На этой странице подробно расписано как пройти IAF0041 используя только свободное программное обеспечение.
Самой удобной связкой скорее всего будет gschem + icarus + gtkwave.
Вроде бы схему можно сделать и в Kicad, но я так и не разобрался, как из него генерировать verilog модули.
На debian-based системах всё просто:
sh: 1: pygmentize: not found
apt-get install geda gtkwave iverilog
Есть и порт для windows, но он неадекватно устарел, можете даже им не заморачиваться.
Проекты развиваются достаточно быстро, поэтому советую использовать последние версии.
On most systems, verilog
symbol library is not enabled by default. That’s because of conflicts with vhdl
library, meaning that you cannot have both enabled at the same time.
You have to edit /usr/share/gEDA/gafrc.d/geda-clib.scm
and uncomment "verilog"
.
В схеме для входов используйте IPAD, а для выходов OPAD. Сеть каждого IPAD и OPAD должна быть названа - кликаете на соединение, edit, добавляете netname.
Для схемы необходимо добавить атрибут module_name, которым в дальнейшем будет называться ваш модуль в verilog. (Add/Attribute)
В конце все элементы нужно пронумеровать. Это делается автоматически: Attributes/Autonumber text. В autonumber text in вместо Selected objects выбрать Whole hierarchy (впрочем, можно и что-то другое, но если вы используете submodules, тогда точно whole hierarchy).
Вам необходимо создать два файла:
Подробнее:
Для входов и выходов используйте in-1 и out-1 из библиотеки input/output.
Каждому входу и выходу нужно дать имя в refdes.
Добавляем пины и линии, как вам нравится. У каждого пина в настройках нужно поставить:
После того, как все готово, выделяем всё что есть (Ctrl+a) и жмем Edit/Symbol translate, на 0, ОК. Это нужно для того, чтобы при добавлении компонента на схему он появлялся бы под мышкой, а не где-то еще.
Добавляем два атрибута:
Чтобы ваш новый компонент было видно в библиотеке элементов, нужно отредактировать (или создать, если его не существует) файл ~/.gEDA/gafrc
. Туда добавляем это:
sh: 1: pygmentize: not found
(component-library ".") (source-library ".")
Другими словами, чтобы он добавлял в библиотеку все файлы, лежащие рядом с вашей главной схемой.
Нужно создать .sym файл, процесс чем-то похож на создание сабмодуля, но есть различия. В .sym нужно добавить атрибут device, а в его значение написать название модуля. Также вам может понадобится VERILOG_PORTS=POSITIONAL, хотя я такой атрибут не добавлял вообще. Порядок параметров определяется за счет pinnumber, в который вы можете вписать название параметра. Смею предположить, что при VERILOG_PORTS=POSITIONAL будет игнорироваться pinnumber, а вместо него будет использован pinseq. Совестно будет поставить pinseq и pinnumber соответствующие действительности. Кроме этого, вы должны также указать refdes, а вот указывать source не нужно. Не забывайте сделать translate :)
Для начала нужно по схеме сгенерировать verilog модуль:
sh: 1: pygmentize: not found
gnetlist -g verilog -o ПолучившийсяМодуль.v файлсхемы.sch
Получившийся .v файл будет содержать переменные, у которых в названии есть “/”. Несмотря на то, что даже такие переменные должны работать, iverilog очень ругается. Если же заменить все знаки “/” на, допустим, “__”, то проблема решится. Плохо, что нельзя в обычном редакторе сделать replace all, потому что это не единственные места, где есть этот знак, зато perl легко с этим справится:
sh: 1: pygmentize: not found
perl -p -i -e 's/(?Компилируем и запускаем
sh: 1: pygmentize: not found
iverilog -o compiled Arvutid.V ArvutidTestBench.v # compile vvp compiled # runЕсли же у вас несколько verilog файлов (так может быть в том случае, если вы создавали свой модуль), то вставьте и его имя в первую команду.
В случае, если у вас какая-то ошибка в схеме, то на выходах вы можете получить такие значение:
Весь процесс от начала до конца:
sh: 1: pygmentize: not found
gnetlist -g veriog -o Arvutid.v arvutid.sch # generate verilog file for schematic perl -p -i -e 's/(?Результат симуляции
Просто открываете .vcd файл с помощью gtkwave.
Некоторые замечания
Один пример ценнее тысячи слов: первая лаба
Если возникают какие-то проблемы, особенно при создании своих компонентов, то задавайте вопросы в комментариях - разберемся.