Showing revision 3

Edit this pageIAF0041 Free Software

На этой странийе подробно расписано как пройти 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).

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

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

Подробнее:

.sch

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

.sym

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

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

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

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

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

sh: 1: pygmentize: not found

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

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

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

Нужно создать .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 файлов (так может быть в том случае, если вы создавали свой модуль), то вставьте и его имя в первую команду.

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

  • x - unknown logic value
  • z - high impendance
    Проверяйте схему!

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

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.

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

  • Порядок входящих и выходящих портов зависит от расположения в .sch файле
  • Если вас не устраивает порядок параметров в сгенерированном .v файле, то удалите все IPAD (при этом не удаляя соединения), а потом поставьте их обратно в обратном порядке.
  • Все файлы содержат просто текст, так что если что-то не так, то их можно открыть любым текстовым редактором и подредактировать вручную.
  • bufif не работают. Баг репорт с патчем здесь: https://bugs.launchpad.net/geda/+bug/1304681 2014-04-11 патч приняли, в следующей версии должно всё работать. 2015-09-30 в последней версии всё ОК.

Пример

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

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



To save this page you must answer this question:

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