vak: (Default)
В языке Rust есть интересная фича: кооперативная многозадачность, реализованная в форме async/await и future. Интересно, можно ли на её основе сбацать простой симулятор цифровой логики. Когда-то я сделал такое на простом Си ("Симулятор RTL - это очень просто"). Но в Си пришлось задействовать setjmp/longjmp для переключение потоков, а тут вроде всё нужное прямо в языке дано.

Имеется хорошая статья, объясняющая подробности кооперативной многозадачности в Русте: https://os.phil-opp.com/async-await/
vak: (Default)
В копилку ценных исходников: открытая реализация точки доступа Wi-Fi на FPGA.

https://github.com/Nuand/bladeRF-wiphy/
vak: (Default)
Я тут по жизни вращаюсь промеж разработчиков RTL, и по моим наблюдениям, среди профессионалов предпочитающие VHDL встречаются примерно один к десяти.

Двадцать лет назад один чувак провёл забавное соревнование: нашёл добровольцев-разработчиков и дал им реальное задание на время. Девять человек писали на Verilog, пять на VHDL. Надо было за 90 минут сделать загружаемый 9-битный счётчик с инкрементом на 3, декрементом на 5, четностью и переносом.

http://www.angelfire.com/in/rajesh52/contest.html

Из девяти писавших на Verilog один не уложился в отведённое время, трое выдали дизайн, который не прошёл тесты, и пятеро произвели вполне функциональный результат.

Ни один из предпочёвших VHDL не справился с задачей.

В то время, в 1997 году, Verilog и VHDL выглядели инструментами более-менее сравнимого уровня. Но в 2002 году изобрели SystemVerilog, и чаша весов необратимо перевесила.

vak: (Default)
До сих пор существует мнение, что язык VHDL является обязательным для военных разработок в США. На самом деле с 1997 года это не так.

"In early 1995, DoD standard MIL-STD-454L was replaced and the use of VHDL was no longer mandated. Instead, the new wording stated that ASIC designs “should be documented” by means of VHDL. By 1997 even this suggestion was removed."

"Who is still using VHDL? In 2015, the US appeared to be 80–90% Verilog/SystemVerilog. There are certain US military and aerospace vendors continuing to use VHDL, despite the lack of a DoD mandate. Europe used to be a huge VHDL supporter, but this is a legacy issue now and there is very little new VHDL being written. There’s little VHDL usage in India/Asia, as these are historically Verilog. When VHDL was mentioned to the Broadcom team in Israel, there were chuckles."

Вот хорошая статья про историю языков и текущее состояние: http://trilobyte.com/pdf/golson_clark_snug16.pdf
vak: (Улыбка)
Имеющийся тест чипа Am2910 проходит на файле alg_beh/alg_beh2910.vhdl, но выдаёт кучу ошибок на файле funct_block_alg_beh/funct_block_alg_beh2910.vhdl. Вывод - нельзя слепо доверять этим исходникам, без тестов никак нельзя.
150 ошибок из 1037 проверок )
Возможно, это всё проблемы GHDL. На симуляторе Modelsim оба теста проходят чисто. Modelsim входит в состав бесплатной версии Altera Quartus (с некоторыми ограничениями).

На симуляторе Cadence IUS оба теста alg_beh тоже проходят. OEM-версия IUS содержится в бесплатном пакете Xilinx Vivado. Но у него есть минус: он не понимает guard-выражения языка VHDL.
ERROR: [XSIM 43-3147] "funct_block_alg_beh2901.vhdl" Line 135. Guard expressions are not supported. 
ERROR: [XSIM 43-3147] "funct_block_alg_beh2901.vhdl" Line 151. Guard expressions are not supported. 
vak: (Улыбка)
Попробовал скомпилить исходники чипа Am2901 используя GHDL. Падает по внутренней ошибке, пытаясь обработать двунаправленные сигналы.
Протокол )
GHDL не может справиться с функцией WiredOr в строке:
    signal RAM0, RAM3, Q0, Q3 : WiredOr MVL7;
vak: (Улыбка)
Традиционно считается, что моделирование цифровой аппаратуры это технически очень сложная задача. Программы-симуляторы для Verilog и VHDL стоят жутких денег. SystemC хоть и бесплатный, но сущий ад для разработчиков. Хуже того: уровень абстракции имеет тенденцию повышаться, и сейчас мало кто вообще понимает, что происходит в симуляторе на самом нижнем уровне. Все нужные алгоритмы были описаны в научных статьях в начале 90-х и похоронены в библиотеках под толстым слоем пыли. В современных книжках в лучшем случае рассказывается про очередь событий и упоминаются дельта-циклы. Живем как питекантропы, поддерживая огонь в костре и не умея его зажечь.

Изначально я задумал это как задачку для продвинутых студентов: сваять в качестве курсовой работы простейший RTL-симулятор для цифровых схем. Но когда стал придумывать 'правильный ответ', оказалось все не так просто. Копать пришлось несколько глубже, чем может осилить студент. Поэтому пришлось превратить это просто в красивую иллюстрацию технологии симуляции. Исходники можно взять здесь: https://github.com/sergev/vak-opensource/tree/master/hardware/rtlsim

Основные установки:
1) Язык Си. Максимальная простота и ясность.
2) Простые структуры данных. Никаких объектов или шаблонов.
3) Событийно-управляемое моделирование: максимальная эффективность.
4) Динамическая память не используется.
5) Сопроцессы реализованы посредством стандартных POSIX-функций семейства getcontext(), входящих в библиотеку glibc.

Вся реализация уложилась примерно в 200 строчек Си-шного кода. Это, наверное, самая красивая программа, которую мне доводилось делать.

Пример симуляции есть в предыдущем посте: https://vak.dreamwidth.org/213855.html
Можно сравнить с тем же примером на Верилоге: https://vak.dreamwidth.org/213634.html