На этой странийе подробно расписано как пройти IAF0041 используя только свободное программное обеспечение.
Самой удобной связкой скорее всего будет gschem + icarus + gtkwave.
Вроде бы схему можно сделать и в Kicad, но я так и не разобрался, как из него генерировать verilog модули.
На debian-based системах всё просто:
sh: 1: pygmentize: not found
apt-get install geda gtkwave iverilog
Есть и порт для windows, но он неадекватно устарел, можете даже им не заморачиваться.
Проекты развиваются достаточно быстро, поэтому советую использовать последние версии.
В схеме для входов используйте 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.
Некоторые замечания
Один пример ценнее тысячи слов: первая лаба
Если возникают какие-то проблемы, особенно при создании своих компонентов, то задавайте вопросы в комментариях - разберемся.