Edit this pageIAF0041 Free Software

На этой странице подробно расписано как пройти IAF0041 используя только свободное программное обеспечение.

Самой удобной связкой скорее всего будет gschem + icarus + gtkwave.

Вроде бы схему можно сделать и в Kicad, но я так и не разобрался, как из него генерировать verilog модули.

Установка

На debian-based системах всё просто:

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).

Создание своего компонента, состоящего из обычных элементов

Вам необходимо создать два файла:

Подробнее:

.sch

Для входов и выходов используйте in-1 и out-1 из библиотеки input/output.
Каждому входу и выходу нужно дать имя в refdes.

.sym

Добавляем пины и линии, как вам нравится. У каждого пина в настройках нужно поставить:

После того, как все готово, выделяем всё что есть (Ctrl+a) и жмем Edit/Symbol translate, на 0, ОК. Это нужно для того, чтобы при добавлении компонента на схему он появлялся бы под мышкой, а не где-то еще.

Добавляем два атрибута:

Добавление элемента в основную схему

Чтобы ваш новый компонент было видно в библиотеке элементов, нужно отредактировать (или создать, если его не существует) файл ~/.gEDA/gafrc . Туда добавляем это:

(component-library ".")
(source-library ".")

Другими словами, чтобы он добавлял в библиотеку все файлы, лежащие рядом с вашей главной схемой.

Создание своего компонента с готовым verilog кодом для него

Нужно создать .sym файл, процесс чем-то похож на создание сабмодуля, но есть различия. В .sym нужно добавить атрибут device, а в его значение написать название модуля. Также вам может понадобится VERILOG_PORTS=POSITIONAL, хотя я такой атрибут не добавлял вообще. Порядок параметров определяется за счет pinnumber, в который вы можете вписать название параметра. Смею предположить, что при VERILOG_PORTS=POSITIONAL будет игнорироваться pinnumber, а вместо него будет использован pinseq. Совестно будет поставить pinseq и pinnumber соответствующие действительности. Кроме этого, вы должны также указать refdes, а вот указывать source не нужно. Не забывайте сделать translate :)

Симуляция

Для начала нужно по схеме сгенерировать verilog модуль:

gnetlist -g verilog -o ПолучившийсяМодуль.v файлсхемы.sch

Получившийся .v файл будет содержать переменные, у которых в названии есть “/”. Несмотря на то, что даже такие переменные должны работать, iverilog очень ругается. Если же заменить все знаки “/” на, допустим, “__”, то проблема решится. Плохо, что нельзя в обычном редакторе сделать replace all, потому что это не единственные места, где есть этот знак, зато perl легко с этим справится:

perl -p -i -e 's/(?<!\*)\/(?!\*)/__/g' ПолучившийсяМодуль.v

Компилируем и запускаем

iverilog -o compiled Arvutid.V ArvutidTestBench.v # compile
vvp compiled # run

Если же у вас несколько verilog файлов (так может быть в том случае, если вы создавали свой модуль), то вставьте и его имя в первую команду.

В случае, если у вас какая-то ошибка в схеме, то на выходах вы можете получить такие значение:

Весь процесс от начала до конца:

gnetlist -g veriog -o Arvutid.v arvutid.sch # generate verilog file for schematic
perl -p -i -e 's/(?<!\*)\/(?!\*)/__/g' Arvutid.v # replace / with __

iverilog -o compiled Arvutid.v ArvutidTestBench.v # compile
vvp compiled # run

Результат симуляции

Просто открываете .vcd файл с помощью gtkwave.

Некоторые замечания

Пример

Один пример ценнее тысячи слов: первая лаба
Если возникают какие-то проблемы, особенно при создании своих компонентов, то задавайте вопросы в комментариях - разберемся.

Полезные ссылки:



To save this page you must answer this question:

Please type here the name of our university (three letters)