DE10-LITE приехала!
Apr. 30th, 2019 11:35 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Спешу поделиться радостью: прямо перед праздничными выходными почта довезла плату с FPGA Altera Max10 в исполнении Terasic de10-lite.

Базовые хеловордлы пройдены: светодиоды, ключи, кнопки, HEX и писк через бузер освоены. Под парами лежат модули RS232 на 3.3v и модуль SD-карточек.
Версия бузера у меня buzzer он немного суров, т.к. имеет усилитель на транзисторе 2TY без ограничивающего резистора, поэтому ток протекающий через него получается великоват и он греется. Надо быть внимательным с полярностью управляющего сигнала.
Для МЭСМ-6 понадобится модуль PLL и блоки памяти M9K.
Вгрузка памяти программ и данных будет организована пока через mif-файл. Скрипт перевода oct файлов в mif готов.
В ближайшее время начну вкорячивать МЭСМ-6 в DE10-LITE.

Базовые хеловордлы пройдены: светодиоды, ключи, кнопки, HEX и писк через бузер освоены. Под парами лежат модули RS232 на 3.3v и модуль SD-карточек.
Версия бузера у меня buzzer он немного суров, т.к. имеет усилитель на транзисторе 2TY без ограничивающего резистора, поэтому ток протекающий через него получается великоват и он греется. Надо быть внимательным с полярностью управляющего сигнала.
Для МЭСМ-6 понадобится модуль PLL и блоки памяти M9K.
Вгрузка памяти программ и данных будет организована пока через mif-файл. Скрипт перевода oct файлов в mif готов.
В ближайшее время начну вкорячивать МЭСМ-6 в DE10-LITE.
no subject
Date: 2019-04-30 08:50 pm (UTC)Наверное PLL и M9K можно подсмотреть в других opensource проектах, типа MIPSfpga+.
no subject
Date: 2019-05-01 09:15 am (UTC)Я пока делаю всё через IDE Квартус, особо сложностей нету, так только грабельки по мелочам собираю.
PLL и блочную память сделал. Дальше буду стартовать процессор.
Большая работа сделать сборку проекта с командной строки. Это как раз и буду подглядывать в mipsfpga+
no subject
Date: 2019-05-02 05:48 am (UTC)Вот здесь: https://github.com/sergev/vak-opensource/tree/master/hardware/de10-lite/switches-and-leds
no subject
Date: 2019-05-02 06:36 am (UTC)В линукс переползу чуть позже.
У меня там почему-то на Ubuntu 18.04 x64 виснут мастера IP-блоков - то есть когда открывается интерфейс создания PLL или памяти, то по кнопке next зависает окно и не перерисовывается.
Очень радует что по умолчанию зашивается прошивка в память ПЛИС, а не флешку как в ардуине, хоть зря не стачивается, поскольку я на ПЛИС первый раз, то экспериментирую очень много!
no subject
Date: 2019-05-02 03:14 am (UTC)Такая вот программа работает гладко:
start start '1'
xta '77755' ; читаем из GPIO (Switches)
atx '77756' ; пишем в GPIO (Leds)
uj start
Привожу ее диаграмму сигналов из SignalTap (хорошо что он есть, пусть и базовый!)
Там конечно что-то мелькает, но работает. То есть программа считывается корректно.
Но с памятью данных возникли проблемы.
Если код сделать таким:
start start '1'
xta '77755'
atx '200'
xta '200'
atx '77756'
uj start
Получается такая диаграмма:
При этом читается и пишется в разные места. Пробовал задерживать сигнал готовности - работает, но там видно что по шине адреса что-то нехорошее бегает. А так как сигнал i_read или i_write включен, то память считывает и с "мусорных" адресов.
Может реагировать только на первый переход i_read или i_write в активное состояние а потом ждать когда он придет в ноль...
no subject
Date: 2019-05-02 05:54 am (UTC)Но сам факт, что коротенькая бэсмовская программа крутится на FPGA, не может не радовать. :)
no subject
Date: 2019-05-02 07:02 am (UTC)По этим картинкам:
видно, что стоят синхронизирующие защелки, но так как у нас и так сигналы засинхронизированы я и подумал, что надо сначала адрес выставить, потом защелкнуть и только потом считать результат.
Но с толку сбило, что ПЗУ то заработало сразу! (11-бит потому что 4к-слова сделал, чтобы памяти на осциллограф оставить)
Любопытно, что IP-блок ROM (который тоже внтури M9K RAM) работает нормально.
Но эти "ловушки" мне нравятся, т.к. пришлось квест пройти с SignalTap а это вещь нужная. Даже и не знал что он есть и хорошо работает.
Я и сам с трудом сдерживаю эмоции :) По-детски радуюсь :)
Да короткая программа работает:
https://youtu.be/ZBcn2QYrOnk
no subject
Date: 2019-05-02 06:39 pm (UTC)no subject
Date: 2019-05-03 04:07 am (UTC)function [7:0] to_hex(input [3:0] ival);
begin
to_hex = ival == 0 ? 8'b00111111 :
ival == 1 ? 8'b00000110 :
ival == 2 ? 8'b01011011 :
ival == 3 ? 8'b01001111 :
ival == 4 ? 8'b01100110 :
ival == 5 ? 8'b01101101 :
ival == 6 ? 8'b01111101 :
ival == 7 ? 8'b00000111 :
ival == 8 ? 8'b01111111 :
ival == 9 ? 8'b01101111 :
ival == 10 ? 8'b01110111 :
ival == 11 ? 8'b01111100 :
ival == 12 ? 8'b00111001 :
ival == 13 ? 8'b01011110 :
ival == 14 ? 8'b01111001 :
ival == 15 ? 8'b01110001 :
$
end
endfunction
Вчера уже поздно попробовал прогнать тест a+x a-x x-a.
Вместо стоп команды я сделал вывод PASS или FAIL с вывдом на хекс цифры
К большому сожалению:
Потом разделил частоту процессора до 2Гц, вывел PC на HEX-индикатор и стало ясно что прыгает после первой проверки с адреса 3.
Сегодня в течении дня я постараюсь выложить проект на гитхаб.
no subject
Date: 2019-05-03 05:05 am (UTC)Запощу видео в список рассылки бэсм6, пусть народ порадуется.
no subject
Date: 2019-05-03 05:26 pm (UTC)Осталась проблема с ПЗУ. Её до завтра оставлю, т.к. там вылезли косяки с командой uj или другими переходами. Смотря в какую левую или правую часть команды ставишь переход то работает то нет. Видимо та же проблема с таймингами.
no subject
Date: 2019-05-03 06:16 pm (UTC)https://youtu.be/WmhsyinIhco
Ломается на арифметическом тесте....
no subject
Date: 2019-05-02 07:38 pm (UTC)assign ibus_addr = pc[15:1];
Посмотрел ещё раз внимательно времянку на примере теста UJ. Вроде ibus_addr стабильно стоит аж до конца запроса к памяти, тут всё в порядке. Но выставляется адрес одновременно с запросом ibus_rd. То же самое при обращении к данным.
Проблема в том, что отсутствует опережение, то что называется Address Setup Time. Очевидно, для альтеровскиго ПЗУ опережение не нужно, а для памяти требуется. Надо учесть это в твоём коде привязки к блокам M9K.
no subject
Date: 2019-05-03 06:10 am (UTC)Я первым делом в RTL model viewer проверил, что все синтезированные цепи соответствуют коду RTL. Всё проследил по проводам. Все места где были подозрения тоже проверил - там всё правильно.
Затем полез уже в Technology Map и там увидел что квартус там нагенерил. Там "дичь".
И такая вещь:
Похоже конечно на регистровый файл, но там еще паутина из регистров которые называются "M"
Буду это всё думать...