Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Архитектрура системы команд 8-разрядного МК
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Страницы: 1, 2, 3
IgorKossak
vitja, на этом форуме сложились некоторые правила, которые следовало почитать, прежде чем оставлять сообщения.
Помимо прочих, обсуждение действий модератора наказывается запретом оставлять сообщения на форуме на неделю.
Настоятельно рекомендую воспользоваться этим временем для раздумий о своём поведении.
proba
vitja, ваш процессор кое в чем похож на M16C/R8C от ренесас, в них стек ( 3 pointer'a ) можно использовать как регистры, достоинство при входе/выходе из подпрограм: вместо множества push-pop команд переадресуется указатель стека.
советовал бы и переименовать свои проект а так многим оно ассотсируется с мк M8 Cypress'a.
vitja
Цитата(proba @ Jan 22 2009, 20:14) *
vitja, ваш процессор кое в чем похож на M16C/R8C от ренесас.

По вашей рекомендации посмотрел М16С от Ренесас. Спасибо.
На 300-странице Шита батарейки у бука кончились (шнур питания отскочил).
Однако общее впечатление сложилось.
За что уважаю японцев – за то, что любую чужую идею могут довести до совершенства, из автомобиля Форда сделать Ниссан, из транзистора – Панасоник, из интегральной схемы – Сони.
Так и здесь. РОН ДЕС, превращены в 8 специализированных регистров – Р0-3,А1-2, РБ и SP. Стековые фреймы взяты из х86, байтовые команд, наверное, из 8051, даже ввели 4 разрядную ИММ в команду и многое чего друго ……
Однако главное сделали добротный практичный продукт, не заморочились на РИСК с его конвейером, используют многотактные команды переменной длины с прямой обработкой данных в памяти и не только 16-разрядные, но и байтовые.
Жаль, что мы не знаем японского, а то бы ответили, но тогда не было бы М16...
Но как сказал, мой знакомый индивидуальный предприниматель "даже на пончиках можно прилично заработать, просто их надо делать"...
Вот и я того же мнения и Мицубиси одобряю, и сампопытаюсь что то сделать несмотря ....
Mahagam
в какое количество логики подобие M16C выльется? получится ли это ядро простым? на какой частоте оно заведётся?

кстати, в отличие от ваших виртуальных выкладок TI уже который раз подряд что-то сделал на основе практических исследований: http://focus.ti.com/lit/an/slaa205c/slaa205c.pdf
конечно, тут немного притянуто за уши. но в целом картина более-менее правдивая. в отличие от.
vitja
Цитата(Mahagam @ Feb 2 2009, 17:30) *

Благодарю за ссылку. И даже посчитал для М8 бенч 8 на 16 CASE. получил 135 байт без оптимизации (MSP430 198, arm7 - 338, pic18 - 208, atmega 350 с оптимизацией). Еще раз спасибо Вам и TI...
Leka
Цитата(vitja @ Feb 7 2009, 11:40) *
...И даже посчитал для М8 бенч 8 на 16 CASE. получил 135 байт без оптимизации (MSP430 198, arm7 - 338, pic18 - 208, atmega 350 с оптимизацией)...

Ну и что? У меня 36-разрядная архитектура(для FPGA выгодно брать разрядность из ряда 9/18/36 - память полнее используется) - для нее неоптимизированный switch_case выливается в (автокод):
Код
//-----------------------
proc switch_case(a)
  var output
  if a = 1
    output = 1
  elsif a = 2
    output = 2
  ...
  elsif a = 16
    output = 16
  end
  return output
//-----------------------
proc main
  var result
  result = switch_case(16)
  return
//-----------------------

- что дает ~300 байт и ~40 тактов(неймановская архитектура, регистровый файл на памяти - вместе с кодом). Но те-же цифры будут и для 16-разрядных данных, и для 32-разрядных. Так что не вижу смысла даже в 16-разрядных ядрах, не то что в 8-разрядных.
Mahagam
Цитата(vitja @ Feb 7 2009, 11:40) *
Благодарю за ссылку. И даже посчитал для М8 бенч 8 на 16 CASE. получил 135 байт без оптимизации (MSP430 198, arm7 - 338, pic18 - 208, atmega 350 с оптимизацией). Еще раз спасибо Вам и TI...

а вы, однако, оригинал. для вашего М8 уже есть компилятор от IAR? методика расчёта совпадает? или вы вырезали свои 135 байт из контекста Си-кода?
сравнивать нужно подобное с подобным. попробуйте написать код аналогичный вашему для М8, для остальный приведённых процов, ручками. тогда и сравнивайте.

"ничто так не улучшает результатов, как новая "улучшенная" методика измерений" biggrin.gif
vitja
Цитата(Mahagam @ Feb 8 2009, 00:55) *
попробуйте написать код ....для М8.... ручками. тогда и сравнивайте.

; Name : 8-bit 2-dim Matrix
; Purpose : Benchmark copying 8-bit values.
;typedef unsigned char UInt8;
;const UInt8 m1[16][4] = {
;void main (void)
;int i, j;
;volatile UInt8 m2[16][4], m3[16][4];
call uint8
.byte {0x12, 0x56, 0x90, 0x34}

.byte {0x90, 0x34, 0x78, 0x12}
Ret
;};
_for ldl 16 st I ;for(i = 0; i < 16; i++)
_for ldlA m2 \ ldlB m3 ;for(j=0; j < 4; j++)
_do R+ ldd std(IA) ; m2[i][j] = m1[i][j];
@+ ldd(IA) @+ std(IB) ;m3[i][j] = m2[i][j];
_next I dec <cc>
_endo
Ret ;return;
Результаты ТИ MSP-86 ARM-393 8051-398 PIC-324 ATMega-354.
Для М8 получилась исчезающе малая величина - 21 байт.
Продолжаю знакомиться с материалами ТИ. Благодарю ВАС за возможность увлекательного чтения. Особенно меня восхитило одно из примечаний к PICу «did not support the memory model required for Whetstone analysis».
Следующим планирую посчитать КИХ фильтр, но оптимизированный на базе фиксированной, не плавающей арифметики.

Цитата(Leka @ Feb 7 2009, 14:55) *
Ну и что? ..... дает 300 байт):

Код М8 на базе вашего автокода......
proc switch_case ;(a)
dup ; var output
_if eql 1;a = 1
_then drop \ ldl 1 \ ret; output = 1
; ...
_if eql 16;a = 16
_then drop \ ldl 16 \ ret; output = 16
_endi

//-----------------------
proc main
; var result
ldl 10h call switch_case; result = switch_case(16) на верхушке стека
ret; return
//-----------------------[/code]
- что дает 135 байт, а не 300. Почти те-же цифры будут и для 16-разрядных данных, и для 32-разрядных. "Так что не вижу смысла даже в 16-разрядных ядрах, не то что в 32-разрядных".
Leka
Цитата(vitja @ Feb 8 2009, 12:47) *
Для М8 получилась исчезающе малая величина - 21 байт.

Включая таблицу?

Цитата
- что дает 135 байт, а не 300. Почти те-же цифры будут и для 16-разрядных данных, и для 32-разрядных.

Полагаю, так-же аккуратно подсчитано, как и для "21 байт"
vitja
Цитата(Leka @ Feb 8 2009, 13:37) *
Включая таблицу?

Да. Байты таблицы следуют сразу за вызовом процедуры (их расположение ТИ не оговорила).
При вызове процедуры адрес возврата записывается в стек. Используя байтовую команду команду R+ldd четверка очередных байт таблицы считывается и .... Выход из процедуры осуществляется по модифицированному адресу возврата.
********
Это последнее
;* Purpose : Benchmark an FIR filter. The input values for the filter
;* is an array of 51 16-bit values. The order of the filter is * 17.
;const float COEFF[FIR_LENGTH] =
;{ -0.000091552734, 0.000305175781, 0.004608154297, 0.003356933594,
........0.000305175781, -0.000091552734};

Coeff: .word ….
;/* The following array simulates input A/D converted values */
;const unsigned int INPUT[] =
;{ 0x0000, … 0x0000, 0x0000,;....... 0x0C00, 0x0800, 0x0400};
Input=1000h
;void main(void)
;int i, y; /* Loop counters */
;volatile float OUTPUT[36],sum;
Output=1100h
mainM8:
_for ldl 36 st y LdB output ;;;;;;for(y = 0; y < 36; y++)
_do lddl 0 ctd sum ;;;;sum=0;
_for ldl 8 st i ;;;;;;for(i = 0; i < FIR_LENGTH/2; i++)
Ldwl coeff SpushR
ldwl input ldl 0 ld y adw drop pushB adwl 16 pushA
;;;;sum = sum+COEFF[i] * ( INPUT[y + 16 - i] + INPUT[y + i] );
_do @- ldwA @+ ldwB adw ldwR+ imulw add
_next I dec <сс>
_endo
;;;OUTPUT[y] = sum + (INPUT[y + FIR_LENGTH/2] * COEFF[FIR_LENGTH/2] );
ldwl input+8 ldl 0 ld y adw stwB ldwB ldwR+ imulw ldd Sum add
ldwl output ldl 0 ld y adw pushB stdB
_next y dec <cс>
_endo dropR ret ;;;;;return;

В МК FLOAT использую либо от лености, либо по незнанию вычислений с фиксированной точкой. Поэтому считаем, что не смтря на их 5-разрядный АЦП мы получаем 16-разрядные коды. Что бы сохранить погрешность на уровне младшего разряда, коэффициенты также принимаем 16-битными, МАК считаем 32-разрядным для предупреждения накопления ошибки вычислений.
Результаты TI MSP430 – 986;ARM thumb – 1528;8051 – 2056;PIC18 – 2006;Atmega8 – 1356.
M8 69(+-) байт кода (без таблицы коэффициентов, иначе + 34 байта) с точностью достаточной для практического применения 8-разрядного МК для решения задач ЦОС, например, звука. Из байт большая и самая запутанная часть ушла на вычисления адресов, а не самого фильтра.

Вывод. Надо срочно менять в системе команд механизмы доступа к данным. Надо отказываться от индесных регистров (содранных с АВР) и вводить другую. Может быть базовую, как в Ренесанс, может быть ... вариантов много. Какой выбрать?
Leka
Таблица - это 64 байта, которые надо прибавить к "21 байт". Как и все вспомогательные константы, коды инициализации и проч - для получения полного рабочего кода, который можно загрузить в процессор и выполнить.

Вариант для М8 не является аналогом Си-варианта от TI, а эквивалентен следующему:
Код
switch(a) {
  case 0x01: return(1);
  case 0x02: return(2);
...

Это уже оптимизация, тк исключается команда перехода.
Так-что до корректного сравнения ой как далеко.
vitja
Цитата(Leka @ Feb 8 2009, 14:26) *
Таблица - это 64 байта, которые надо прибавить к "21 байт........Так-что до корректного сравнения ой как далеко.

Со всем согласен.
Второе это результат ручной оптимизации, которую, наверное, автоматически проделали в ТИ, поскольку я приводил их оптимизированные данные (без оптимизации они хуже). Действительно, зачем писать команду перехода в конец выбора, что бы там выполнить РЕТ.

Перовое ое результат моей спешки. 64+21=85 по сравнению с 354 байтами АВР это не «исчезающее малая величина» - это просто величина меньшая в 4 раза. Из этого не следует вывод, что система команд М8 в 4 раза эффективнее, чем у АВР.
Leka
Цитата(vitja @ Feb 8 2009, 16:16) *
... 64+21=85 по сравнению с 354 байтами АВР это не «исчезающее малая величина» - это просто величина меньшая в 4 раза.

Это потому, что и в этом тесте код для М8 не является аналогом Си-варианта от TI, а эквивалентен, скорее, следующему:
Код
... for(i = 0; i < 16*4; i++) m3[i] = m2[i] = m1[i]; ...

Лучше другие тесты брать, где нет явной оптимизации, а эти "от TI"(на сахаре те-же) - в помойку.
vitja
Цитата(Leka @ Feb 8 2009, 17:59) *
код для М8 не является аналогом Си-варианта от TI
Лучше другие тесты брать, где нет явной оптимизации, а эти "от TI"(на сахаре те-же) - в помойку.

Я влез в бенчи, поскольку мне здесь настоятельно посоветовали не пользоваться доморощенным рейтингом, а взять бенчмарки и на них оценить эффективность системы команд М8. Я это сделал за выходные, используя исходники тестов фирмы TI для MSP430, и получил результаты. Оказалось, что эффективность М8 по тестам ТИ превышает эффективность АТMega во много раза, когда по моим рейтингам всего лишь в 1.6 раза (3 раза получилось только для 32-разрядных данных). Кстати, тоже самое, в смысле его эффективности, получили разработчики MSP430 относительно других МК.
****Вывод. Нельзя верить заказным бенчам, нельзя верить мне, нельзя верить фирме TI и прочим – надо верить самому себе, здравому смыслу, своему опыту, академикам и интуиции.
*** Ты прав в твоем (моем) примере я «оптимизировался», избавился от внутреннего цикла последовательной пересылки 4 байтов, за счет пересылки сразу 4-байтного (32-разрядного) слова во внешнем цикле. Это был рефлекс программиста, не устоял от соблазна.
***PS. Мне дали ссылку на Сахару и на Ти/// согласен/// в помойку их///
****Не мог бы кто нибудь предложить тройку (пятерку….) тестов, ****действительно характерных**** для областей применения 8-разрядных МК с исходниками на Си и рейтингами других 8-разрядных МК по объему кода, желательно без оптимизации, плавающей арифметики и не очень больших, поскольку транслирую вручную (я не разобрался в Сахаре и могу из нее выбрать «удобные» для М8 тесты). Заранее признателен.
****PS2. Прочитал в первом номере «Современная электроника» о нашем отечественном микроконтроллере 1886 ВЕ фирмы Миландр.
Ведь могут найти деньги и сделать с достаточно хорошими характеристиками.
Однако это клон PICа… В рейтинге TI он стоит на последнем месте (Меня позабавило данное ими примечание к PICу «did not support the memory model required for Whetstone analysis»…. Почему не cделать М8 за теже деньги, но с большей эффективностью, где Whetstone analysis поддерживается?? Я не понимаю. А вы?
***** Написание тестов выявило существенные недостатки архитектуры М8 по организации доступа к данным. Поэтому я задумался об этом. Продуманное выложу чуть позже.
******* Но не дают гены покоя*********************************
К вопросу о совместимости системы команд и ЯВУ (один из показателей эффективности МК)
Остальное я упоминал – первое это минимальный объем кода, остальное - эффективная реализация в аппаратуре (в тактах, площади, потреблении…), а также концептуальность системы команд, ее ортогональность и возможность расширения (развития).
**Итак о совместимости с ЯВУ***Почитал описание языково-ориентированного (под Си, Паскаль, Модула…) процессора КРОНОС, разработанного и сделанного в конце 80-х в Новосибирске, опередившего Интел с их Пнем на много лет. Так вот, академики из Новосибирского филиала РАН выбрали для его машинной реализации 0-адресную систему команд, как наиболее эффективную…. Кто прав – академики из РАН или те, кто предлагает «морэ регистров» для обеспечения совместимости с ЯВУ вместо стековой архитектуры? Вопрос для меня не из простых?
vetal
Цитата
Почему не cделать М8 за теже деньги, но с большей эффективностью, где Whetstone analysis поддерживается?? Я не понимаю. А вы?

Потому-что для пика есть средства разработки, а M8 только на бумаге. Когда M8 будет обеспечен типовыми средствами разработки(как миниму C - компилятор, отладчик(симулятор), внутрисистемный отладчик) тогда и можно будет на что-то претендовать, а в вашем случае это пока просто набор вентилей(и тот на бумаге).
vitja
Цитата(vetal @ Feb 10 2009, 10:02) *
Потому-что для пика есть средства разработки, а M8 только на бумаге.

Москва тоже не сразу строилась// Надо же с чего то начинать // сперва проект на бумаге потом в железе и параллельно средства разработки//
vetal
Цитата
параллельно средства разработки

Вы явно недооцениваете данный этап smile.gif
Mahagam
как вот такая вот абракадабра
Цитата(vitja @ Feb 8 2009, 13:50) *
;* Purpose : Benchmark an FIR filter. The input values for the filter
;* is an array of 51 16-bit values. The order of the filter is * 17.
;const float COEFF[FIR_LENGTH] =
;{ -0.000091552734, 0.000305175781, 0.004608154297, 0.003356933594,
........0.000305175781, -0.000091552734};

Coeff: .word ….
;/* The following array simulates input A/D converted values */
;const unsigned int INPUT[] =
;{ 0x0000, … 0x0000, 0x0000,;....... 0x0C00, 0x0800, 0x0400};
Input=1000h
;void main(void)
;int i, y; /* Loop counters */
;volatile float OUTPUT[36],sum;
Output=1100h
mainM8:
_for ldl 36 st y LdB output ;;;;;;for(y = 0; y < 36; y++)
_do lddl 0 ctd sum ;;;;sum=0;
_for ldl 8 st i ;;;;;;for(i = 0; i < FIR_LENGTH/2; i++)
Ldwl coeff SpushR
ldwl input ldl 0 ld y adw drop pushB adwl 16 pushA
;;;;sum = sum+COEFF[i] * ( INPUT[y + 16 - i] + INPUT[y + i] );
_do @- ldwA @+ ldwB adw ldwR+ imulw add
_next I dec <сс>
_endo
;;;OUTPUT[y] = sum + (INPUT[y + FIR_LENGTH/2] * COEFF[FIR_LENGTH/2] );
ldwl input+8 ldl 0 ld y adw stwB ldwB ldwR+ imulw ldd Sum add
ldwl output ldl 0 ld y adw pushB stdB
_next y dec <cс>
_endo dropR ret ;;;;;return;

согласуется с

Цитата(vitja @ Jan 16 2009, 14:15) *
...совместимой с ЯВУ, удобной для программирования на ассемблере, простой в реализации
и обеспечивающей компактный программный код и малое число тактов на его выполнение...

ну и где тут удобство программирования на ассемблере?

Цитата(vitja @ Feb 10 2009, 09:24) *
Я влез в бенчи, поскольку мне здесь настоятельно посоветовали не пользоваться доморощенным рейтингом, а взять бенчмарки и на них оценить эффективность системы команд М8. Я это сделал за выходные, используя исходники тестов фирмы TI для MSP430, и получил результаты. Оказалось, что эффективность М8 по тестам ТИ превышает эффективность АТMega во много раза, когда по моим рейтингам всего лишь в 1.6 раза (3 раза получилось только для 32-разрядных данных). Кстати, тоже самое, в смысле его эффективности, получили разработчики MSP430 относительно других МК.

тесты TI все собирались компилятором IAR. для всех платформ. и тут выскакиваете вы, пишете некую абракадабру, которую никто проверить не в состоянии. и заявляете, что по результатам особо тонкой ручной оптимизации вы тут всех уделали. а как это проверить? для доброй половины самопальных ядер есть хотя бы транслятор ассемблера.

Цитата(vitja @ Feb 10 2009, 09:24) *
***PS. Мне дали ссылку на Сахару и на Ти/// согласен/// в помойку их///

все эти звёздочки и чёрточки вместо знаков препинания русского языка заставляют усомниться в адекватности человека, так свирепо их использующего.

Цитата(vitja @ Feb 10 2009, 09:24) *
Остальное я упоминал – первое это минимальный объем кода, остальное - эффективная реализация в аппаратуре (в тактах, площади, потреблении…)

для того что бы оценивать хоть что-то (хоть объём кода, хоть такты и площадь) необходимо иметь минимум модель проектируемого устройства. а то что-то мне кажется, что противоречий при реализации в железе вашего ужаса М8 будет море.
vitja
Цитата(Mahagam @ Feb 10 2009, 12:32) *
как вот такая вот абракадабра

"У людей не хватает времени что-либо узнавать/ Они покупают вещи готовыми в магазинах"/ где ///
Так сказал Лис/// "Антуан/ёёёёё////
За ссылку на тесты спасибо/ Однако нельзя ли ближе к 8-разрядным МК? без флоат и транспортирования матриц/
Дайте честные тесты характерные для 8-разрядных МК/ без оптимизации как в ТИ//
Три или 5 тестов с исходниками на Си и оценками затрат программного кода для известных 8-разрядных МК (без Сахары)/
Буду благодарен///
За абракадабру извините/ Не придумал еще символики понятной для /// и интуитивной для умных/


Цитата(vetal @ Feb 10 2009, 10:38) *
Вы явно недооцениваете данный этап smile.gif

Я даже очень оцениваю////Но нельзя ставить телегу впереди лошади как Вы предлагаете//
Нет системы команд/// нет прочего ////Включитесь в предыдущий этап - поучаствуйте в создании систему команд
для 8-разрядного МК (стекового)/ Предложите//// Однако Спасибо
zltigo
Цитата(vitja @ Feb 10 2009, 14:20) *
Не придумал еще символики понятной для /// и интуитивной для умных/


Мoderator:

Второй и последний раз предупреждаю - увижу еще раз символику "для особо умных" и/или не оформленные тэгами исходники тему закрою.
Mahagam
Цитата(vitja @ Feb 10 2009, 15:20) *
"У людей не хватает времени что-либо узнавать/ Они покупают вещи готовыми в магазинах"/ где ///
Так сказал Лис/// "Антуан/ёёёёё////
За ссылку на тесты спасибо/ Однако нельзя ли ближе к 8-разрядным МК? без флоат и транспортирования матриц/
Дайте честные тесты характерные для 8-разрядных МК/ без оптимизации как в ТИ//
Три или 5 тестов с исходниками на Си и оценками затрат программного кода для известных 8-разрядных МК (без Сахары)/
Буду благодарен///
За абракадабру извините/ Не придумал еще символики понятной для /// и интуитивной для умных/



Я даже очень оцениваю////Но нельзя ставить телегу впереди лошади как Вы предлагаете//
Нет системы команд/// нет прочего ////Включитесь в предыдущий этап - поучаствуйте в создании систему команд
для 8-разрядного МК (стекового)/ Предложите//// Однако Спасибо

повторяю просьбу: пишите на русском языке. придерживайтесь хотя бы минимальных правил пунктуации. иначе создаётся ощущение переписки с пациентом больницы имени Кащенко.

нет отдельно тестов для 8-разрядных МК и отдельно для 16-разрядных. как нет тетрадей для 5-го класса. и зачем вам три или пять тестов? возьмите один. но всеобъемлющий. для начала сойдёт и Dhrystone. он опять же есть в доке от TI. тест этот придуман не TI, и используется уже много лет для абсолютно разных архитектур. тест далеко не совершенен, но это самое доступное из того, что можно придумать. тем более что уже есть куча результатов этого теста.

поучаствовать? а смысл? представим что это ядро уже есть в виде исходников. и пока нет реализации в кремнии - используем их в качестве soft-ядра в FPGA. и что мы видим? компилятора под этот кошмар ждать лет 10-15. писать на ассемблере? опять нет смысла. ибо сэкономленное на размере памяти отыграется в размере самого ядра. я уже вижу, что ядро обойдёт по размеру MicroBlaze, при том, что частота работы будет много ниже. так зачем тратить силы на заведомо провальный проект?
GetSmart
Тема очень забавная smile.gif Не хотелось бы чтобы её закрыли. В качестве наказания лучше банить автора на день. Тогда он быстрее найдёт все знаки препинания на своей убунте.

А настойчивость автора похвальна smile.gif
vitja
Цитата(GetSmart @ Feb 10 2009, 14:50) *
Тема очень забавная Не хотелось бы чтобы её закрыли. В качестве наказания лучше банить автора на день. Тогда он быстрее найдёт все знаки препинания на своей убунте.
А настойчивость автора похвальна smile.gif

Спасибо. (Нашел знаки препинания на чужой убунте).
Но нету темы!!!. Есть только знаки препинания от некоторых...За них меня банить....
Предлагаю ........

Код
******Преабула
Единственная задача МК – обработка данных. Данные бывают входными, выходными, константами,  переменными состояния системы и промежуточными. Кроме этого данные бывают локальными, глобальными и структурированными и прочими….
******Коллизия
Как быть в стековом процессоре для обеспечения эффективного доступа к данным?
За неимением места ниже об этом написано очень кратко.
****** Фабула
Имеется модель памяти стекового 8-разрядного МК, содержащая:
– ОЗУ,
- ПЗУ
- стек вычислений
- стек возвратов
- данные в ОЗУ.
******Кульминация
Для выше указанной модели в системе команд 8-разрядного стекового процессора М8 предлагаются следующие  способы адресации данных (указаны мнемоники адресации):
___На стеке данных:
«пусто» - верхушка стека данных
К – катый элемент стека данных
@ - косвенно ОЗУ через верхушку стека данных
К @ - косвенно ОЗУ через катый элемент стека данных
___На стеке возвратов:
R - верхушка стека возвратов
К – катый элемент стека возвратов
@R+ - косвенно из ПЗУ через верхушку стека возвратов с постинкрементом
К @R+ - косвенно из ПЗУ через катый элемент стека возвратов с постинкрементом
___В ОЗУ:
Pi – итый элемент страницы ОЗУ 8 байт
К Pi – итый элемент страницы ОЗУ 128 байт
К К Pi – итый элемент страницы ОЗУ 2 Кбайт
(К К) @Pi - косвенно через итый элемент страницы ОЗУ
Прим. Можно реализовать более общий механизм адресации локальных данных – через регистр указатель фрейма (базы) и смещения относительно него (для 8-разрядного МК достаточно прямой страничной адресации – примеры ПИК. 1876ВЕ1 и др.)
____@# - абсолютная адресация???
____# - непосредственная адресация.
____Прим. Все указанные способы адресации являются полями байтовых команд загрузки выгрузки стека или байтовых префиксов адреса операнда источника-приемника в байтовых команд обработки данных. Длина данных задается в байт-коде команды от 1 до 4 байт.
Префикс адреса задает адрес операнда приемника для следующей стековой  байтовой команды обработки данных
****** Развязка
Примеры машинных команд М8 обработки данных…и их длина в байтах:
2 swapd – обмен 4-мя байтами между верхушкой и третьим элементом стека – 2 байта
P1 swap – обмен байтами между верхушкой стека и ОЗУ (Р1 - префикс адреса элемента в текущей странице ОЗУ) – 2 байта
@ldw     - косвенная загрузка в стек 2 байт по адресу на верхушке стека – 1 байт
3 @ld     - косвенная загрузка байта в стек по адресу третьего элемента стека – 2 байта
R 3 @ldw  - косвенная загрузка слова в стек возвратов по адресу из третьего элемента стека
(K) R (K) addw  ; RK+SK > RK      - от 2 байт
Ldw# input P4ldw add @ stP3  ; P3=input(P4) – 7 байт (для пересылки 32-разрядного данного команда stP3 меняется на stdP3)
@R+ К stwP3 – загрузка слова из ПЗУ в ячейку ОЗУ РК3.
Прим. К… и R… Pi… @ через пробел – это префиксы адреса (байтовые команды).



*****Эпилог
Получили разнообразные способы доступа к данным (в т.ч. в стеках и ПЗУ) , а также форматы команд (от 0 адресных до 1 и 2 адресных). Однако в этом надо разбираться …..
В том числе и в мнемонике, что бы была нагляднее и интуитивно понятнее?????
Mahagam
Цитата(vitja @ Feb 10 2009, 16:43) *
Спасибо. (Нашел знаки препинания на чужой убунте).
Но нету темы!!!. Есть только знаки препинания от некоторых...За них меня банить....

моя твоя понимай. банить нихт! smile.gif

Цитата(vitja @ Feb 10 2009, 16:43) *
В том числе и в мнемонике, что бы была нагляднее и интуитивно понятнее?????

очевидно и наглядно, и интуитивно понятно, что получается монстр сложностью на уровне ядра ARM9, и крайне невысокой частотой. с арм9 не сможет конкурировать по частоте. с 8-ми битниками - по сложности.

кстати, где вы найдёте психа, чтобы всё это реализовал?
vitja
Цитата(Mahagam @ Feb 10 2009, 14:46) *
...пациентом больницы имени Кащенко.
нет отдельно тестов для 8-разрядных МК и отдельно для 16-разрядных.....есть один. но всеобъемлющий.....Dhrystone
...поучаствовать

1. Советую смотреть не на знаки препинания, а на водную гладь - это успокаивает...
2. "есть один. но всеобъемлющий.....Dhrystone" - спасибо...
3. Так не участвуйте....
Leka
Чтобы разобраться в сути эффективного доступа к памяти - предлагаю сравнить разные архитектуры на примере A[i]=B[j] для случая, когда стеки, аккумуляторы и прочие регистры(исключая, конечно, регистровый файл на памяти) - "пустые". laughing.gif
Mahagam
Цитата(Leka @ Feb 10 2009, 20:38) *
Чтобы разобраться в сути эффективного доступа к памяти - предлагаю сравнить разные архитектуры на примере A[i]=B[j] для случая, когда стеки, аккумуляторы и прочие регистры(исключая, конечно, регистровый файл на памяти) - "пустые". laughing.gif

привёл бы пример, отчего отталкиваться.

Цитата(vitja @ Feb 10 2009, 20:36) *
1. Советую смотреть не на знаки препинания, а на водную гладь - это успокаивает...

да я то не волнуюсь, а вот модератор... он может и smile3046.gif
IgorKossak
Господа, хватит о личностях!
Касается всех.
zzzzzzzz
В своё время каждый строитель МК проходит подобный этап "нахождения самой лучшей архитектуры". И я был грешен... "Мудрость" же такова, что её, самой лучшей, нет в природе. В эпоху софт-процессоров есть только два пути - для экономии времени взять готовый проц. или разработать свой, совершенно не универсальный, но наилучшим образом "заточенный" под конкретную задачу.

Пардон за банальность, конечно. Но, поиск оптимума для универсальных процессоров имеет смысл только тогда, когда он будет реализовываться в виде чипа. А вот тут - стена. Не нужны новые. Их и так полно. При этом, сам чип - лишь малая часть работы, которую предстоит проделать для хоть какого-то спроса на него.

ИМХО, гораздо более интересная задача для убивания времени, с возможностью "жизни" продукта в будущем - сочинить самый минималистический МК. Чтобы меньше и проще уже ну ни как. 8 разрядов, например. Так как меньше уже совсем нет интереса у пользователей.

Если же есть желание строить высокоэффектиные и производительные МК - смотрите в сторону длинного командного слова типа адрес операнда1 + адрес операнда2 + адрес операнда3 + команда и многопортовое ОЗУ. Всё остальное упрощается до безобразия, нечего будет оптимизировать вообще.
Leka
Код
//a[i] = b[j], a, b - указатели в памяти, i,j - индексы в памяти.
//Пример: адресация, как у PDP-11, 16-разрядные команды/слова:
r1 = @#a //2слова, 3такта - минимум для однопортовой памяти
r1+= @#i //4,3
r2 = @#b //4,3
r2 += @#j //4,3
@r1 = @r2 //2,3
//18байт, 15тактов. Поправьте, если напутал.

//"безрегистровая" 3х-операндная, 36-разрядные команды(для FPGA)
buf=b[j] //1слово,3такта - для двухпортовой блочной памяти
a[i]=buf //1,3
//2слова(9байт), 6тактов.

//Добавляйте другие архитектуры...



Цитата(zzzzzzzz @ Feb 10 2009, 20:52) *
В своё время каждый строитель МК проходит подобный этап "нахождения самой лучшей архитектуры". И я был грешен... "Мудрость" же такова, что её, самой лучшей, нет в природе.

a14.gif Поэтому ищу/пишу легконастраиваемый компилятор высокоуровневого автокода - чтобы без проблем можно было поменять архитектуру без необходимости переписывать прикладное ПО.

Цитата
...ИМХО, гораздо более интересная задача для убивания времени, с возможностью "жизни" продукта в будущем - сочинить самый минималистический МК. Чтобы меньше и проще уже ну ни как. 8 разрядов, например. Так как меньше уже совсем нет интереса у пользователей.

Если же есть желание строить высокоэффектиные и производительные МК - смотрите в сторону длинного командного слова типа адрес операнда1 + адрес операнда2 + адрес операнда3 + команда и многопортовое ОЗУ. Всё остальное упрощается до безобразия, нечего будет оптимизировать вообще.

Есть уже у меня 36-разрядное - для Virtex-5 получается ~300LUT и ~100MIPS, а на подходе Spartan-6, у которого вроде те-же 6-входовые LUT-ы...

Уточнил(проект под сукном до написания компилятора) - получаются ~400 6-входовых ЛУТ для системы из ядра с 2К*36 памяти, COM-порта связи с компом(загрузка и запуск программы) и простого VGA контроллера - "helloworld" выводить.
vetal
Цитата
Поэтому ищу/пишу легконастраиваемый компилятор высокоуровневого автокода

На фтп лежит пакет Lisatek от coware - делает ассемблер и линкер(и еще много чего). Если силами сообщества удастся подобрать ключ к gpg(или pgp точнее не помню), то появится тузла которая из описания ядра поможет сделать на полуавтомате компилятор С smile.gif
ReAl
Цитата(vetal @ Feb 10 2009, 22:16) *
На фтп лежит пакет Lisatek от coware - делает ассемблер и линкер(и еще много чего). Если силами сообщества удастся подобрать ключ к gpg(или pgp точнее не помню), то появится тузла которая из описания ядра поможет сделать на полуавтомате компилятор С smile.gif

Если мне именяет склероз, на opencores.org есть проект 16-битного стекового процессора с С-компилятором на базе GCC - там, возможно, есть файлы описания архитектуры для кодогенератора. Если есть - можно попробовать взять в качестве козы, так как должны быть хоь некоторое подобие.
На мой взгляд, может и тяжелее придётся, чем ломаной коммерческой тулзой, но перспективнее.
Leka
Хочется скрыть уровень машинно-зависимого ассемблера, чтобы упростить переносимость кода, и видеть такую цепочку: ЯВУ --> автокод --> машинные коды. При этом основная оптимизация д/б на уровне ЯВУ --> автокод. Имхо, этот уровень оптимизации может дать самый большой выйгрыш, и имеет смысл попытаться воспользоваться серьезными пакетами разработки ПО - как только подтвердится перспектива.

Автокод - предельно упрощенный машинно-независимый ЯВУ, чтобы 1) легко можно было писать на нем несложные программы, и 2) компилятор на конкретную архитектуру можно было настроить "за пару вечеров" - тогда появится смысл в уникальных ядрах под конкретные задачи. Для этого компилятора важнее компактность и прозрачность исходника, а не оптимизирующие способности - вполне достаточно будет, чтобы не мешал оптимизации на уровне ЯВУ --> автокод (+ делал мелкую оптимизацию типа неполного вычисления логических выражений...). Тут лучше самому написать, имхо, а из готового брать только алгоритмы (только разобраться - не всегда быстрее). Пишу уже.

Проблема - подобрать автокод, удобный для максимально широкого круга ядер. Пример автокода, каким его вижу, уже приводил в другой ветке (N ферзей). Для "безрегистровой архитектуры" вроде удобно, а вот для регистровых/стековых... не ясно пока.
Rst7
Я вот не пойму смысла этих баталий? Слабо покурить внутреннее устройство GCC, чтобы обнаружить, что сначала он компилит программу в некий псевдокод для виртуальной машины. Вот если генератор из псевдокода в асм для вновь разрабатываемой архитектуры будет требовать минимум извращений, то тогда и архитектура будет оптимальной для поддержки ее гнусем. Это, конечно, при выполнении других условий, например, минимизации количества лутов, или максимального быстродействия, или еще каких, стоящих перед разработчиками.

Кстати, гад по портированию гнуся существует в природе, с вдумчивого изучения этого документа и стоит начать.
Leka
Цитата(Rst7 @ Feb 11 2009, 01:50) *
...генератор из псевдокода в асм для вновь разрабатываемой архитектуры...

Так и хотел сначала , но потом отказался от этого подхода - получим "автомат для бритья"(как в анекдоте - лица у всех разные... до первого бритья).
Rst7
Цитата
Так и хотел сначала, но потом отказался от этого подхода


А что, есть выбор? Кроме гнуся в качестве компилятора яву надеяться не на что, добрый дядя не появится и не подарит оптимизирующий компиллер. Так что - курить до полного просветления маны по гнусю. А иначе это все пустое теоретизирование, которое никогда не принесет никаких плодов.
Leka
Имхо, выбор есть - в проектах на FPGA во многих случаях хватит автокода. Оптимизация логических выражений уже есть, оптимизировать распределение переменных не обязательно из-за большого регистрового файла в памяти. Остальную оптимизацию можно выделить в отдельную ступень: автокод --> оптимизатор --> автокод.
Rst7
Цитата
в проектах на FPGA во многих случаях хватит автокода.


Ну до пятисот команд программа без особого напряга пишется на асме. И оптимизируется вручную. А вот больше - тут без яву делать нечего. Конечно, граница "500" - она достаточно условна. Но близка по порядку к объему памяти программ распространенных мелких микроконтроллеров. Как показывает практика, написание программы на яву для таких контроллеров превращается в "написание на Си программы на асме".

И еще одно - компилятор вашего "автокода" тоже добрый дядя напишет? А оптимизатор? Или сами, врукопашную, последовательно наступая на весь набор граблей в компиляторостроении, с выдачей на гора "супероптимизирующего компилятора автокода" лет через 10? wink.gif

Вообщем - думайте еще. И крепко.

PS Мне кажется, осилить порт гнуся на другую архитектуру (особенно, если есть возможность точить архитектуру под компилятор) не займет более двух месяцев.
vitja
[Флуд, не имеющий отношения к теме]
GetSmart
Ближе к делу, Витя. А то точно тему закроют. Вам же десять раз сказали, что новая архитектура без компилятора с ЯВУ не нужна никому. Что будете делать? Или кто его будет делать? Может лучше сразу "на бережку" осознать бесполезность разработки ?! Если конечно это не курсовая работа. Но для курсовой не обязательно прыгать выше головы.
vitja
Цитата(Leka @ Feb 10 2009, 22:29) *
Код
//a[i] = b[j], a, b - указатели в памяти, i,j - индексы в памяти.
//Пример: адресация, как у PDP-11, 16-разрядные команды/слова:
//18байт, 15тактов. Поправьте, если напутал.
//"безрегистровая" 3х-операндная, 36-разрядные команды(для FPGA)
buf=b[j] //1слово,3такта - для двухпортовой блочной памяти
a[i]=buf //1,3
//Добавляйте другие архитектуры...

на твой код выставляю свой в 12 байт для 8-разрядного процессора М8 (данные в примере 16-разрядные).
ldw# B Ildw adw @ld ;6 байт
ldw# A Jldw adw @st ;6 байт
Запись типа Форта.
Однако приводя свой пример А(I)=B(J) ты забыл о других операторах присваивания типа-
А=0
А=1234...
А=В
А=un(B )
A=bin(B,C)....
А есть еще условные операторы, циклы, вызовы процедур....
Расставь проценты их использования в типовых программах МК. Раскрой их машинную реализацию в кодах и байтах для своего процессора, как это сделал я для 8-разрядных МК. Умножь их на проценты. И ты получишь рейтинги, которые получил я для МК8051,ПИК,АВР и пр....
Leka
А не так:
Код
загрузка указателя b //3 байта
загрузка индекса j //3
сложение //1
косвенная загрузка //1
загрузка указателя a //3
загрузка индекса i //3
сложение //1
косвенная выгрузка //1

=16 байт?

Цитата(Rst7 @ Feb 11 2009, 14:00) *
...компилятор вашего "автокода" тоже добрый дядя напишет?

Сам и напишу.

Цитата
загрузка указателя ... индекса ...

- имеются в виду косвенные загрузки
vitja
Цитата(Leka @ Feb 11 2009, 23:13) *
загрузка индекса j //3

В системе команд процессора М8 команда загрузки имеет длину 1 байт (поэтому 16-4=12).
Вы внимательны, в отличие от других.
Команда загрузки в М8 имеет следующие форматы:
(K) Pildw - текущая страница ОЗУ
(K) PPildw -предыдущая страница ОЗУ
(K) @ldw - косвенная адресация через стек вычислений
(K) Rldw - стек возвратов
(K) @Rldw -косвенная адресация через стек возвратов
(K) @R+ldw -косвенная адресация ПЗУ через стек возвратов
ldw# xxx - загрузка константы
где w - длина данного 1, 2, 4 байта
К - необязательный префикс константы
Мнемоника приведена условно и форматы команд тоже.
Leka
Если нет @ldw#, тогда 20 байт получим:
Код
ldw# b //3
@ldw //1
ldw# j //3
@ldw //1
adw //1
@ld //1
ldw# a //3
@ldw //1
ldw# i //3
@ldw //1
adw //1
@st //1
Mahagam
MSP430
Код
1F420802        MOV.W   &_a, R15
1F520402        ADD.W   &_i, R15
1E420602        MOV.W   &_b, R14
1E520202        ADD.W   &_j, R14
AF4E0000        MOV.W   @R14, 0(R15)

20 байт / 12 тактов

однако, как мне кажется
тут
Код
//"безрегистровая" 3х-операндная, 36-разрядные команды(для FPGA)
buf=b[j] //1слово,3такта - для двухпортовой блочной памяти
a[i]=buf //1,3

компилятор "догадывается" о том, что такое a и b, то есть это не аналог ли такого:
Код
1F420402           MOV.W   &_i, R15
1E420202           MOV.W   &_j, R14
DF4E06022602    MOV.B   _b(R14), _a(R15)

14 байт/9 тактов ?

Цитата
Расставь проценты их использования в типовых программах МК. Раскрой их машинную реализацию в кодах и байтах для своего процессора, как это сделал я для 8-разрядных МК. Умножь их на проценты. И ты получишь рейтинги, которые получил я для МК8051,ПИК,АВР и пр....

получим бесполезные циферки совершенно не учитывающие архитектурных особенностей изучаемых ядер применительно к различным задачам. что и показали даже такие примитивные одноклеточные тесты с сахары.
vitja
Цитата(GetSmart @ Feb 11 2009, 20:43) *
1. Ближе к делу.
2. Вам же десять раз сказали, что новая архитектура ..... не нужна никому.
3. Может лучше сразу "на бережку" осознать бесполезность разработки .
4. ….не обязательно прыгать выше головы.

Огорчили.
1. Описание М8 приведено http://www.moko.ru/mc/
2. Кто сказал, что новая архитектура не нужна никому?
3. Это ваше личное мнение.
4. Промолчу, но прыгну.
Однако. Все это сплошная говорильня, в которой и Вы и я и другие принимаем участие, вместо того, что бы...
Полезность в этом есть, но пользы мало.
Возможно я не смог четко сформулировать свои проблемы и свои их решения. Описание М8 буду править по результатам обсуждения. Но не за день, а за неделю ...две..три..Сейчас написать что либо конкретное уже нет сил, могу только пописывать.

Рекомендую почитать Михаила Козлова из Института высшей нервной деятельности…РАН на близкую тему о «Возможностях универсального кода внутреннего представления программы».....Вот где энергия, настойчивость и сила характера.
http://n-t.ru/tp/ts/uk.htm

Проблемы у нас – это дороги, ...... и кризис.
Однако причем все это? Заполнить пустую строку буковками и отправить их Вам. А оно это нужно?
Leka
Цитата(Mahagam @ Feb 12 2009, 13:24) *
...компилятор "догадывается" о том, что такое a и b, то есть это не аналог ли такого: ...

Имел в виду динамические массивы(адрес первого элемента - не константа). Для статических массивов код у регистровых архитектур будет короче, конечно.
Mahagam
Цитата(vitja @ Feb 12 2009, 23:00) *
2. Кто сказал, что новая архитектура не нужна никому?

а кому нужна ещё одна ничем не выдающаяся 8-и битная архитектура? что в реё такого действительно необычного заложено, что ею будут активно пользоваться? особо малое количество требуемой памяти для кода? и какой ценой? ценой усложнения самого ядра до умопомрачения? так это сводит на нет всё преимущество от мелкого кода. и тем более такое ядро не будет интересно для FPGA применений. уж скорее Leka своего мутанта доделает и даже продать успеет (результаты то у него интересные получились), чем вы дойдёте хотя бы до стадии HDL-тестирования.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.