|
Свои процессоры, Разработка своих процессоров со своей системой команд |
|
|
|
 |
Ответов
(60 - 74)
|
Dec 6 2009, 13:06
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Цитата(flipflop @ Dec 6 2009, 15:54)  Ясно, значит я все правильно понимаю и проблемы вполне реальные .
Если не секрет, какой частоты и на каком кристалле вам удалось добиться? В ASIC-е на 0,18 - 250 МГц. Но там много мультимедийных инструкций, тормозящих процессор. Николай.
|
|
|
|
|
Dec 6 2009, 13:21
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 27-12-08
Из: Петербург
Пользователь №: 42 787

|
Цитата(Ynicky @ Dec 6 2009, 16:06)  В ASIC-е на 0,18 - 250 МГц. Но там много мультимедийных инструкций, тормозящих процессор.
Николай. Ого, а где вы их производите?
|
|
|
|
|
Dec 6 2009, 13:34
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Цитата(flipflop @ Dec 6 2009, 16:21)  Ого, а где вы их производите? Ну не в России же. Николай.
|
|
|
|
|
May 23 2010, 16:56
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Перешел в тему "Свои процессоры" из "Цифровой видеокамеры". Предлагается всем поучаствовать в обсуждении открытого RISC процессора с большим регистровым файлом. Выкладываю краткое описание процессора. Пока не охвачена тема доступа к специализированным регистрам, т.е формат команд для доступа к ним. Какие еще нужны (frame pointer, variable pointer)? По мере устаканивания архитектуры и системы команд, буду выкладывать проект на VHDL. Николай.
Прикрепленные файлы
torf32.pdf ( 103.18 килобайт )
Кол-во скачиваний: 248
|
|
|
|
|
May 25 2010, 05:43
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Я как раз и собираюсь "пощупать" процессор в FPGA. Хотя это будет Virtex5 (на работе отдаю новую схему пп для разводки). Туда много чего влезет. Планирую одну такую платку взять домой на время. Но можно и попроще. А как можно сделать if...else без флагов? Можно, конечно, сделать команды "branch" (BR) без CMP так: BR if RD = 0, RD /= 0, RD < 0, RD >= 0 и т.д. Хотя это теже флаги без сохранения в регистре. Но при этом смещение будет в 12 разрядов или в 32 разряда с предварительной командой IMM.
Николай.
|
|
|
|
|
May 25 2010, 08:01
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
Цитата(Ynicky @ May 25 2010, 09:43)  А как можно сделать if...else без флагов? Пример бесфлагового процессора - NIOS II, даже переноса нет. Цитата(=AK= @ May 25 2010, 11:26)  Большой регистровый файл - значит, контекст сохранять долго. Значит, на прерывания медленно будет реагировать. А зачем сохранять контекст? Все переменные подпрограммы прерывания - статические. Если нужна реентрабельность - свой собственный статический стек. Цитата А кто компилятор будет делать под такую архитектуру? Или предполагается его на ассемблере мутузить? Для начала - "ассемблерное" подмножество Си (см пример "N-ферзей" в предыдущей ветке), потом расширяем компилируемое подмножество.
|
|
|
|
|
May 25 2010, 11:12
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Цитата(Leka @ May 25 2010, 12:01)  Пример бесфлагового процессора - NIOS II, даже переноса нет. Мой опыт в проектировании процессоров говорит, что надо начинать проверку с условных команд ветвления (BR) и конвейера обработки данных. Так что желательно сейчас сосредоточиться на этих командах. Если бы места в коде команд хватило бы на 2 регистра и смещение, то я бы сделал команды условных ветвлений как в NIOSII и MIPS32. Николай.
|
|
|
|
|
May 25 2010, 15:21
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Начал делать АЛУ и сразу возникла мысль: в операциях формата RI поменять местами RD и RS. Тогда получим: RR: RD = RD opalu RS (пример на ассемблере: add rd,rs) RI: RD = RS opalu IMM (пример на ассемблере: addi rd,rs,imm) При этом в формате RI регистр-источник и регистр-приемник могут быть разными.
To Leka: это не усложнит компилятор?
Николай.
|
|
|
|
|
May 25 2010, 18:23
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Подкорректировал описание.
Сообщение отредактировал Ynicky - May 25 2010, 18:24
Прикрепленные файлы
torf32.pdf ( 103.68 килобайт )
Кол-во скачиваний: 134
|
|
|
|
|
May 25 2010, 21:47
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
Проблема вот в чем.
На уровне "ассемблерного" Си нет оптимизации, поэтому для 2х- и 3х- операндных архитектур запись одного и того-же алгоритма д/б различной для достижения оптимума по объему кода и быстродействию.
На примере кода N-ферзей. Если для 3х-операндной архитектуры оптимально использование индексных массивов "arow[pos]", "arow[pos1]", и тд, то для 2х-операндной архитектуры оптимальнее будет использование модифицируемых указателей "*arow", "*arow1", и тд. Тк одной 3х-операндной инструкции: arow[pos1] = temp; непосредственно соответствуют три 2х-операндные инструкции: tmp = arow; tmp += pos1; *tmp = temp; Ветвления: "if( pos != N )..." - одна бесфлаговая 3х-операндная инструкция, или "if( pos - N != 0 )..." - две флаговые 2х-операндные инструкции (сравнение + ветвление), или "if( tmp=pos, tmp -= N, tmp != 0 )..." - три бесфлаговые 2х-операндные инструкции.
Пришел к выводу, что используемое "ассемблерное" подмножество Си д/б жестко привязано к целевой архитектуре, те все преобразования выражений вынести из уровня компиляции: "ассемблерное" подмножество Си --> машинные коды, на уровень компиляции: к-л подмножество Си --> "ассемблерное" подмножество Си. На код самого компилятора ("ассемблерное" подмножество Си --> машинные коды) это слабо повлияет, тк все особенности архитектуры предполагаю вынести во внешние таблицы(файлы) - делаю универсальным, чтобы и для своих процессоров использовать.
Сообщение отредактировал Leka - May 25 2010, 21:49
|
|
|
|
|
May 26 2010, 07:43
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(Leka @ May 25 2010, 17:31)  А зачем сохранять контекст? Все переменные подпрограммы прерывания - статические. Если нужна реентрабельность - свой собственный статический стек. Для того, чтобы обработку прерывания делать на С. И для того, чтобы более высокоприоритетное прерывание могло прервать низкоприоритетное (это не совсем реентерабельность). А если свой собственный стек - что в нем сохранять-то? Все регистры - слишком долго, веть их же много. А если запретить использовать все, то на фиг их надо было делать много? Две страницы регистров - отдельно для "нормальной" работы, отдельно для прерываний - выглядит более прогрессивным решением, чем просто много регистров. Еще больше страниц регистров, которые бы образовали стековую структуру, выглядит еще более заманчивым. А на каждой странице много регистров не нужно. Цитата(Leka @ May 25 2010, 17:31)  см пример "N-ферзей" в предыдущей ветке Ссылочку приведите
|
|
|
|
|
May 26 2010, 08:28
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
Если регистры не используются одновременно разными подпрограммами, то сохранять их не нужно. Если регистров много - их можно без конфликтов распределить по подпрограммам, и сохранять ничего не придется. Прерывания в процессоре с 1К регистров у меня реализованы, пишутся на "автокоде"( http://electronix.ru/forum/index.php?showt...mp;#entry605442 ), никаких потерь на входе/выходе. "Ассемблерный" Си для 3х-операндной архитектуры: http://electronix.ru/forum/index.php?showt...st&p=760789
|
|
|
|
|
  |
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0
|
|
|