DE10-LITE приехала!
Спешу поделиться радостью: прямо перед праздничными выходными почта довезла плату с 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
Наверное PLL и M9K можно подсмотреть в других opensource проектах, типа MIPSfpga+.
no subject
Я пока делаю всё через IDE Квартус, особо сложностей нету, так только грабельки по мелочам собираю.
PLL и блочную память сделал. Дальше буду стартовать процессор.
Большая работа сделать сборку проекта с командной строки. Это как раз и буду подглядывать в mipsfpga+
no subject
Вот здесь: https://github.com/sergev/vak-opensource/tree/master/hardware/de10-lite/switches-and-leds
no subject
В линукс переползу чуть позже.
У меня там почему-то на Ubuntu 18.04 x64 виснут мастера IP-блоков - то есть когда открывается интерфейс создания PLL или памяти, то по кнопке next зависает окно и не перерисовывается.
Очень радует что по умолчанию зашивается прошивка в память ПЛИС, а не флешку как в ардуине, хоть зря не стачивается, поскольку я на ПЛИС первый раз, то экспериментирую очень много!
no subject
Такая вот программа работает гладко:
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
Но сам факт, что коротенькая бэсмовская программа крутится на FPGA, не может не радовать. :)
no subject
По этим картинкам:
видно, что стоят синхронизирующие защелки, но так как у нас и так сигналы засинхронизированы я и подумал, что надо сначала адрес выставить, потом защелкнуть и только потом считать результат.
Но с толку сбило, что ПЗУ то заработало сразу! (11-бит потому что 4к-слова сделал, чтобы памяти на осциллограф оставить)
Любопытно, что IP-блок ROM (который тоже внтури M9K RAM) работает нормально.
Но эти "ловушки" мне нравятся, т.к. пришлось квест пройти с SignalTap а это вещь нужная. Даже и не знал что он есть и хорошо работает.
Я и сам с трудом сдерживаю эмоции :) По-детски радуюсь :)
Да короткая программа работает:
https://youtu.be/ZBcn2QYrOnk
no subject
no subject
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
Запощу видео в список рассылки бэсм6, пусть народ порадуется.
no subject
Осталась проблема с ПЗУ. Её до завтра оставлю, т.к. там вылезли косяки с командой uj или другими переходами. Смотря в какую левую или правую часть команды ставишь переход то работает то нет. Видимо та же проблема с таймингами.
no subject
https://youtu.be/WmhsyinIhco
Ломается на арифметическом тесте....
no subject
assign ibus_addr = pc[15:1];
Посмотрел ещё раз внимательно времянку на примере теста UJ. Вроде ibus_addr стабильно стоит аж до конца запроса к памяти, тут всё в порядке. Но выставляется адрес одновременно с запросом ibus_rd. То же самое при обращении к данным.
Проблема в том, что отсутствует опережение, то что называется Address Setup Time. Очевидно, для альтеровскиго ПЗУ опережение не нужно, а для памяти требуется. Надо учесть это в твоём коде привязки к блокам M9K.
no subject
Я первым делом в RTL model viewer проверил, что все синтезированные цепи соответствуют коду RTL. Всё проследил по проводам. Все места где были подозрения тоже проверил - там всё правильно.
Затем полез уже в Technology Map и там увидел что квартус там нагенерил. Там "дичь".
И такая вещь:
Похоже конечно на регистровый файл, но там еще паутина из регистров которые называются "M"
Буду это всё думать...