Перейти к содержанию
    

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

Николай.

risc_st.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Николай.

risc_st.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

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

 

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

 

Николай.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

для тех кто альдеком не пользуется, могли бы и 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 нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для тех кто альдеком не пользуется, могли бы и 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.

 

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

 

Николай.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для тех кто альдеком не пользуется, могли бы и 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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

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

 

Николай.

risc_st.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

 

Николай.

risc_st.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

Николай.

risc_st.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Из плюсов:

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

Из минусов:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Из плюсов:

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

Из минусов:

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

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...