Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RISC
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Egel
Здравствуйте. Чисто в учебных целях нужно создать RISC- процессор с порядка 20-ти командами. Представление на этот счет есть. Вопрос вот какой - как лучше организовать ассемблер к нему? Т.е. вот, что я имею в виду: будет описана модель ПЗУ - просто как статическая память в FPGA. Хотелось бы, чтобы некоторая программа компилировала исходный ассемблер и вставляла по нужным адресам коды команд для процессора в нужные строки модели ПЗУ, написанной на Verilog. Т.е. сделать нечто вроде реализации для PicoBlaze.
Суть вопроса - как это лучше сделать, на каком языке писать эту программу и сложно ли (последнее конечно относительное понятие).
В дальнейшем модель ПЗУ будет просто цепляться к проекту и синтезироваться с ним вместе.

Если есть какие-нибудь советы по RISC тоже очень буду рад выслушать. На опенкорки не отсылать - не люблю пользоваться чужими проектами.

Спасибо за потраченное время
Leka
Цитата(Egel @ Apr 3 2009, 19:32) *
...Если есть какие-нибудь советы...

В первую очередь продумать методику отладки проекта в целом, с оценкой скорости/трудоемкости. Если все с нуля - ошибки будут и в железе, и в софте, и на системном уровне.
Serhiy_UA
Советую выбрать 20 команд из системы команд AVR. Хоть там их больше сотни, но для некоторых простых алгоритмов хватит и 20 команд.
Вы сможете использовать уже готовый ассемблер и, например, AVR-Studio. Первый легко позволит формировать код и размещать его по адресам, а второй делать параллельную проверку Вашего проекта в режиме симуляции проверенными средствами.
Работа сложная, но интересная.
Правильная постановка задачи - уже половина ее решения, похоже, с этим у Вас все в порядке.
Egel
Да команды простенькие - у меня завалялось хитрое АЛУ с 8 командами. надо сделать ветвление, и пересылка типа регистр-регистр и память-регистр. Вот еще вопрос - сколько внутренних регистров выбрать? или ограничится только ОЗУ данных? мне бешенная производительность не нужна - главное, чтобы работало. (без всяких там КЭШ и конвейеров и т.д.).
Вот что еще интересно - легко ли потом будет навесить всякую периферию на него - типа таймерных блоков, может даже UART и т.д.?
Leka
Цитата(Serhiy_UA @ Apr 3 2009, 20:36) *
Советую выбрать 20 команд из системы команд AVR. Хоть там их больше сотни, но для некоторых простых алгоритмов хватит и 20 команд...

Реально у АВР как раз около 20 команд, это маркетологи раздули число мнемоник cranky.gif
Ниже таблица всех(вроде) команд AT90S1200 - для моего первого ассемблера. Для своих первых софт-процессоров я просто менял эту таблицу - без переделки программы.
Код
;AT90S1200
0001 11sd dddd ssss : ADC Rddddd,Rsssss;
0000 11sd dddd ssss : ADD Rddddd,Rsssss;
0010 00sd dddd ssss : AND Rddddd,Rsssss;
0111 kkkk dddd kkkk : AND R1dddd,kkkkkkkk;
1001 010d dddd 0101 : ASR Rddddd;
0001 01sd dddd ssss : CMP Rddddd,Rsssss;
0011 kkkk dddd kkkk : CMP R1dddd,kkkkkkkk;
1001 010d dddd 0000 : COM Rddddd;
0000 01sd dddd ssss : CPC Rddddd,Rsssss;
1001 010d dddd 1010 : DEC Rddddd;
1001 010d dddd 0011 : INC Rddddd;
1100 kkkk kkkk kkkk : JMP @kkkkkkkkkkkk;
1111 01kk kkkk ksss : JMP(Fsss=0)@kkkkkkk;
1111 00kk kkkk ksss : JMP(Fsss=1)@kkkkkkk;
1101 kkkk kkkk kkkk : JSR @kkkkkkkkkkkk;
1001 010d dddd 0110 : LSR Rddddd;
1001 0100 1ddd 1000 : MOV Fddd,0;
1001 0100 0ddd 1000 : MOV Fddd,1;
1000 001d dddd 0000 : MOV @R11110,Rddddd;
1000 000d dddd 0000 : MOV Rddddd,@R11110;
0010 11sd dddd ssss : MOV Rddddd,Rsssss;
1001 1000 dddd dsss : MOV P0ddddd.sss,0;
1001 1010 dddd dsss : MOV P0ddddd.sss,1;
1011 1ssd dddd ssss : MOV Pssssss,Rddddd;
1011 0ssd dddd ssss : MOV Rddddd,Pssssss;
1111 101d dddd xsss : MOV F110,Rddddd.sss;
1111 100d dddd 0sss : MOV Rddddd.sss,F110;
1110 kkkk dddd kkkk : MOV R1dddd,kkkkkkkk;
1001 010d dddd 0001 : NEG Rddddd;
0000 0000 0000 0000 : NOP;
0010 10sd dddd ssss : OR Rddddd,Rsssss;
0110 kkkk dddd kkkk : OR R1dddd,kkkkkkkk;
1001 010d dddd 0111 : ROR Rddddd;
1001 0101 0xx1 1000 : RTI;
1001 0101 0xx0 1000 : RTS;
0000 10sd dddd ssss : SBC Rddddd,Rsssss;
0100 kkkk dddd kkkk : SBC R1dddd,kkkkkkkk;
1001 1001 dddd dsss : SKP(P0ddddd.sss=0);
1001 1011 dddd dsss : SKP(P0ddddd.sss=1);
1111 110d dddd xsss : SKP(Rddddd.sss=0);
1111 111d dddd xsss : SKP(Rddddd.sss=1);
0001 00sd dddd ssss : SKP(Rddddd=Rsssss);
1001 0101 100x 1000 : SLP;
0001 10sd dddd ssss : SUB Rddddd,Rsssss;
0101 kkkk dddd kkkk : SUB R1dddd,kkkkkkkk;
1001 010d dddd 0010 : SWP Rddddd;
1001 0101 101x 1000 : WDR;
0010 01sd dddd ssss : XOR Rddddd,Rsssss;
;
yes
ну если только для ПЛИС - то у ксайлинса (и наверняка у остальных так же) есть специальный формат для прошивки в память
этот файлик приклеивается impact-ом без пересинтеза проекта, то есть в конфигурационном потоке меняются битики

так работает не только пикоблейз, но и микроблейз и поверПС

формат открытый - любым языком С, Жавой, Бейсиком - пишите такой текстовый файл и подключайте к проекту

--------------

если это синтезировать хочется - то прямо исходный код генените - верилог или вхдл
у Гейслера есть такой элемент AHBROM на VHDL, ну и сообще такое пишется за несколько минут - заголовок в формате case, внутри offset:command; ну и endcase endmodule

--------------

а из чужих проектов mico8 от Lattice можно смотреть
Egel
А где про это можно почитать? я не первый раз слышу, но так до конца и не въехал как это делается - понимаю, что там должно быть все просто. Но, на сколько я знаю там обязательно вставлять специфический template в проект.....
iosifk
Цитата(Egel @ Apr 6 2009, 22:03) *
А где про это можно почитать? я не первый раз слышу, но так до конца и не въехал как это делается - понимаю, что там должно быть все просто. Но, на сколько я знаю там обязательно вставлять специфический template в проект.....

Посмотрите у меня на сайте статьи: "Микропроцессор своими руками"... И особенно раздел про ассемблер...
Будут вопросы - пишите.
Кстати, где живете?
Удачи!
tolik1
Цитата(Egel @ Apr 3 2009, 19:32) *
Здравствуйте. Чисто в учебных целях нужно создать RISC- процессор с порядка 20-ти командами. Представление на этот счет есть. Вопрос вот какой - как лучше организовать ассемблер к нему? Т.е. вот, что я имею в виду: будет описана модель ПЗУ - просто как статическая память в FPGA. Хотелось бы, чтобы некоторая программа компилировала исходный ассемблер и вставляла по нужным адресам коды команд для процессора в нужные строки модели ПЗУ, написанной на Verilog. Т.е. сделать нечто вроде реализации для PicoBlaze.
Суть вопроса - как это лучше сделать, на каком языке писать эту программу и сложно ли (последнее конечно относительное понятие).
В дальнейшем модель ПЗУ будет просто цепляться к проекту и синтезироваться с ним вместе.

Если есть какие-нибудь советы по RISC тоже очень буду рад выслушать. На опенкорки не отсылать - не люблю пользоваться чужими проектами.

Спасибо за потраченное время

Аналогично с AVR рекомендую посмотреть PIC контроллеры 16 серии. Там порядка 30 с небольшим команд. Есть описания на русском.
Egel
Спасибо за ответы. Живу в Москве и Химках rolleyes.gif

Обязательно все посмотрю!
iosifk
Цитата(Egel @ Apr 7 2009, 21:21) *
Спасибо за ответы. Живу в Москве и Химках rolleyes.gif


Тогда до встречи на ЭкспоЭлектронике. Буду 14 со второй половины и 15 первую половину дня на стенде Элтеха...
Скопидор
Цитата(Egel @ Apr 6 2009, 23:03) *
понимаю, что там должно быть все просто.

А с чего Вы это взяли? smile3009.gif

Вы полагаете, что любой новичок запросто может сварганить на ПЛИСине микропроцессор соответствующий по уровню сложности AVR?
Mahagam
Цитата(Скопидор @ Apr 8 2009, 10:13) *
Вы полагаете, что любой новичок запросто может сварганить на ПЛИСине микропроцессор соответствующий по уровню сложности AVR?

да. только сроки разработки будут зависеть от опыта. у начинающего с нуля запросто уйдёт год-полтора. это если вечерами по часику колупаться с симулятором.
Egel
Господа следите пожалуйста за ходов разговора, чтобы вставлять свои комментарии в стиле автор лох. Разговор тогда был про прошивку процессора без пересинтезирования всего проекта. И это действительно легко у того же PicoBlaze. У меня еще руки не дошли, чтобы разобраться с этим. Я думаю, на простой AVR пол года вполне достаточно. Но сейчас такого замаха вообще нет - нет столько времени
Leka
Цитата(Egel @ Apr 8 2009, 13:33) *
...про прошивку процессора без пересинтезирования всего проекта.

У меня память программ/данных загружается через последовательный COM-порт - без участия ISE.
Egel
Во во! я так и хотел сделать сначала! т.е. у вас стоит контроллер порта и при загрузке RESETим процессор? а с помощью чего в Windows можно загрузить по COM порту? я знаю только Hyper Terminal. Вы как делали? Чем загружали и откуда?
Leka
Цитата(Egel @ Apr 8 2009, 15:27) *
Во во! я так и хотел сделать сначала! т.е. у вас стоит контроллер порта

Управляющий контроллер: UART, преобразователь hex-символы <--> тетрады(чтобы обмен был только в текстовом режиме), сдвиговый регистр, выделитель кодов конца строки(для формирования машинного слова), регистр состояния, формирователь управляющих стробов(запись в память программ, инкремент счетчика адреса, и тп).

Цитата
и при загрузке RESETим процессор?

У меня команда NOP процессора расширена командами управляющего контроллера(в память программ они не попадают, тк вырезаются контроллером): STOP, PROG, START... . И полная программа выглядит так примерно:
Код
STOP
  PROG //переход в режим записи в память команд
  R1=100 // или стандартно: MOV R1, 100
  ...
  STOP
  START //запуск процессора

М/б и другие специальные команды управляющего контроллера, например для пошаговой отладки.

Цитата
а с помощью чего в Windows можно загрузить по COM порту? я знаю только Hyper Terminal.

Через командную строку(cmd.exe): copy prog.hex com1
Только сначала надо настроить com-порт при помощи команды mode (или через Hyper Terminal).

Цитата
Чем загружали и откуда?

У меня через свою программу(редактор+компилятор+загрузчик, написана на Паскале/Delphi), прямо из окна редактора (кнопочки "compile", "prog").
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.