Jump to content
    

Свои процессоры

Чтобы не плодить новую тему, напишу сдесь. Если, конечно, автор темы не против.

Недавно прикрепили ко мне студента, а так как в связи с кризисом и мне то делать

особо нечего, то чего уж говорить про бедного студента. Поэтому решил ему дать

интересную тему (с моей точки зрения) для обучения разработке soc проектов

со встроенным процессорным ядром (чем собственно я и занимаюсь).

За основу взяли студенческое risc ядро, описанное в книге Сергиенко А.М.

“VHDL для проектирования вычислительных устройств”. Систему команд и архитектуру

немного доработали. Сделали простенький soc проект в Active-HDL81 для FPGA ф.Actel.

Его, собственно, и предлагаю для повторения всеми желающими. С некоторыми доработками

его можно реализовать и для других FPGA. Пока, для простоты,

пзу команд сделали в виде vhdl. Хотелось бы общими усилиями протестировать

процессорное ядро. Да и может кому пригодится. Оговорюсь сразу, проект сырой.

Поэтому будут исправления и доработки. Может у кого будут дельные предложения.

Готов рассмотреть. Краткое описание процессора можно найти в Директории "Doc".

Ассемблер - в директории "st16asm". Я его делал в "Microsoft Visual Studio 2008".

Еще не разобрался, как сделать, чтобы ".exe" файл запускался на других компьютерах,

где нет MSVC2008 (не программист). Компилятор сделаю попозже, после отработки

системы команд. Это будет LCC, так как есть уже опыт написания

"machine description" файлов под свою систему команд. Ну вот, собственно, пока все.

Будут вопросы, задавайте.

 

Николай.

risc_st.rar

Share this post


Link to post
Share on other sites

Выкладываю новую версию проекта.

Просьба сообщить, работает ли ассемблер у кого нет "Microsoft Visual Studio".

 

Николай.

risc_st.rar

Share this post


Link to post
Share on other sites

Команды Break и LU - что делают?

 

И зачем выделенный регистр SP (при отсутствии команд push/pop и аппаратном стеке возвратов)?

Share this post


Link to post
Share on other sites

Команды Break и LU - что делают?

 

И зачем выделенный регистр SP (при отсутствии команд push/pop и аппаратном стеке возвратов)?

 

LU - Load Byte Unsigned. Беззнаковая загрузка байта.

Команда Break нужна только при отладке ПО с помощью внутрисхемного эмулятора, если память программ является оперативной. Вместо команды на которой ставится точка останова заносится Break. При дальнейшем пуске Break заменяется обратно на штатную команду. Если память программ - ПЗУ, то точки останова прописываются через JTAG в специальный регистр внутрисхемного эмулятора. С помощью аппаратного компаратора сравнивается текущий адрес команды и адрес точки останова. При совпадении происходит остановка процессора. Через JTAG процессор можно снова запустить, блокировав сигнал с компаратора на один период тактовой частоты процессора.

 

Регистр SP - это регистр общего назначения, используемый программой в качестве указателя на стек данных.

 

Николай.

Share this post


Link to post
Share on other sites

Просьба сообщить, работает ли ассемблер у кого нет "Microsoft Visual Studio".

Работает.

Share this post


Link to post
Share on other sites

Выкладываю новую версию проекта.

 

для тех кто альдеком не пользуется, могли бы и vhd файл из risc_cpu.bde сгенерировать, делов то на минуту :(

 

зачем "По сигналу RESET разряды всех регистров обнуляются." вот это сделали ? это сразу режет вам крылья, при использовании на хилой платформе + файл rfile.vhd -> R_RF4:process(CLK,RST,data_w,rfsel) вот вас прибило каждый регистр ручками описывать %)))

 

 

в файле tst_alu.asm есть такой код

 

    imm    0xFF00
    lea    r5,0x0

 

но в доке Doc\to101st16.doc

 

команды lea нет.

Share this post


Link to post
Share on other sites

для тех кто альдеком не пользуется, могли бы и vhd файл из risc_cpu.bde сгенерировать, делов то на минуту :(

 

зачем "По сигналу RESET разряды всех регистров обнуляются." вот это сделали ? это сразу режет вам крылья, при использовании на хилой платформе + файл rfile.vhd -> R_RF4:process(CLK,RST,data_w,rfsel) вот вас прибило каждый регистр ручками описывать %)))

 

в файле tst_alu.asm есть такой код

 

    imm    0xFF00
    lea    r5,0x0

 

но в доке Doc\to101st16.doc

 

команды lea нет.

 

1. Эти файлы генерятся автоматически при каждой компиляции и находятся в директории compile.

 

2. Виноват, соврал. При использовании в качестве регистрового файла внутренней памяти исходное значение берется из файлов инициализации (r8x256_M0.mem). rfile.vhd - как пример на регистрах.

 

3. lea - Load Effective Address. Это псевдокоманда для занесения в регистры констант.

 

lea r5,0xFF00 преобразуется ассемблером в

 

imm 0xFF00

addi r5,r0,0

 

Но можно писать и как в tst_alu.asm.

 

Если успею, вечером добавлю в описание.

 

Николай.

Share this post


Link to post
Share on other sites

для тех кто альдеком не пользуется, могли бы и vhd файл из risc_cpu.bde сгенерировать, делов то на минуту :(

смотрите файлы из архива, они как раз вам и нужны

risc_st.rar\risc_st\risc_st_core\compile\risc_cpu.vhd
risc_st.rar\risc_st\risc_st_core\compile\risc_st_core.vhd
risc_st.rar\risc_st\risc_st_core\compile\risc_sync.vhd

 

З.Ы. пардон, страницу не обновил....

Share this post


Link to post
Share on other sites

Подкорректировали проект.

Проверили прерывания.

Дополнил описание.

 

В принципе проект "готов".

Осталось доделать внутрисхемный эмулятор для работы с отладчиком (программа на PC).

 

Николай.

risc_st.rar

Share this post


Link to post
Share on other sites

Написали JTAG на vhdl, чтобы можно было проект зашить в другие FPGA (останется поменять ОЗУ).

Отмоделировали команды (stop, step, run) внутрисхемного эмулятора.

Подработал ассемблер.

Написал еще несколько тестовых программок.

Проверили в железе работу с семисегментным индикатором.

 

Николай.

risc_st.rar

Share this post


Link to post
Share on other sites

Добавили 2 блока к внутрисхемному эмулятору.

Отмоделировали чтение памяти команд и данных в режиме отладки.

 

Остальное - после отпуска.

 

Николай.

risc_st.rar

Share this post


Link to post
Share on other sites

Пользуюсь своим процессором 5 год, за это время и отладил до безглючности. Работает на Xilinx.

Из плюсов:

язык форт, встроенные uart, фильтры с плавающей точкой, делители, разрядность до 32 бит с/без знака, переменное число поддерживаемых команд.

Из минусов:

средний текстовый редактор, недописанный отладчик, полностью отсутствует описание.

Share this post


Link to post
Share on other sites

Пользуюсь своим процессором 5 год, за это время и отладил до безглючности. Работает на Xilinx.

Из плюсов:

язык форт, встроенные uart, фильтры с плавающей точкой, делители, разрядность до 32 бит с/без знака, переменное число поддерживаемых команд.

Из минусов:

средний текстовый редактор, недописанный отладчик, полностью отсутствует описание.

респект и уважение за такое.

Хотелось узнать следующее из плюсов/ минусов:

Тактовая, производительность в ~мипсах для математики, если подсчитывали.

Если сравнить с имеющимися ARM_ами то вот к какому ближе (по архитектуре) и есть ли преимущество и в чем?

По потреблению наверное проигрыш. Насколько хорош компилятор из форта получился?

Дебагер тоже наверное медленный, не реалтайм. С описанием понимаю вас, такое часто бывает. Поскольку требует много времени.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...