PealehtKasulik infoKüsiViimased muudatused
HomeUseful StuffAskRecent Changes
ГлавнаяПолезноеСпроситьИзменения
ENGESTRUS
На этой странийе подробно расписано как пройти **[[IAF0041]]** используя только свободное программное обеспечение. Самой удобной связкой скорее всего будет [[http://www.geda-project.org/ gschem + icarus + gtkwave]]. * **gschem** - тут просто рисуем схему * **gnetlist** - преобразует схему в verilog модуль * **iverilog** - симулируем схему! Только нужно самим написать test bench. * **gtkwave** - просматриваем результат симуляции. Вроде бы схему можно сделать и в Kicad, но я так и не разобрался, как из него генерировать verilog модули. == Установка На debian-based системах всё просто: {{{bash apt-get install geda gtkwave iverilog }}} Есть и [[http://www.delorie.com/pcb/geda-windows/ порт для 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** содержащий внутреннее строение компонента * **.sym** для отображения компонента в общей схеме Подробнее: ==== .sch Для входов и выходов используйте in-1 и out-1 из библиотеки input/output. Каждому входу и выходу нужно дать имя в refdes. ==== .sym Добавляем пины и линии, как вам нравится. У каждого пина в настройках нужно поставить: * pintype - обычно это либо in, либо out * pinlabel - название пина. Должно быть таким же, как и refdes в .sch файле. * pinnumber и pinseq - номер пина. Я обычно ставлю pinseq такой же, как и pinnumber. Учтите, что начинаться они должны с единицы, и пропускать номера нельзя. Подробнее тут: http://wiki.geda-project.org/geda:master_attributes_list#pinseq После того, как все готово, выделяем всё что есть (Ctrl+a) и жмем Edit/Symbol translate, на 0, ОК. Это нужно для того, чтобы при добавлении компонента на схему он появлялся бы под мышкой, а не где-то еще. Добавляем два атрибута: * source=путь к внутренностям - для привязки * refdes=X? - для нумерации. То есть такие компоненты будут называться X1, X2 и так далее. === Добавление элемента в основную схему Чтобы ваш новый компонент было видно в библиотеке элементов, нужно отредактировать (или создать, если его не существует) файл {{{~/.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 модуль: {{{bash gnetlist -g verilog -o ПолучившийсяМодуль.v файлсхемы.sch }}} Получившийся .v файл будет содержать переменные, у которых в названии есть "/". Несмотря на то, что даже такие переменные должны работать, iverilog очень ругается. Если же заменить все знаки "/" на, допустим, "__", то проблема решится. Плохо, что нельзя в обычном редакторе сделать replace all, потому что это не единственные места, где есть этот знак, зато perl легко с этим справится: {{{bash perl -p -i -e 's/(?<!\*)\/(?!\*)/__/g' ПолучившийсяМодуль.v }}} === Компилируем и запускаем {{{bash iverilog -o compiled Arvutid.V ArvutidTestBench.v # compile vvp compiled # run }}} Если же у вас несколько verilog файлов (так может быть в том случае, если вы создавали свой модуль), то вставьте и его имя в первую команду. В случае, если у вас какая-то ошибка в схеме, то на выходах вы можете получить такие значение: * x - unknown logic value * z - high impendance Проверяйте схему! Весь процесс от начала до конца: {{{bash 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. == Некоторые замечания * Порядок входящих и выходящих портов зависит от расположения в .sch файле * Если вас не устраивает порядок параметров в сгенерированном .v файле, то удалите все IPAD (при этом не удаляя соединения), а потом поставьте их обратно в **обратном** порядке. * Все файлы содержат просто текст, так что если что-то не так, то их можно открыть любым текстовым редактором и подредактировать вручную. * bufif не работают. Баг репорт с патчем здесь: https://bugs.launchpad.net/geda/+bug/1304681 **2014-04-11** патч приняли, в следующей версии должно всё работать. **2015-09-30** в последней версии всё ОК. == Пример Один пример ценнее тысячи слов: [[http://dl.dropboxusercontent.com/u/71236259/arvutid.html первая лаба]] Если возникают какие-то проблемы, особенно при создании своих компонентов, то задавайте вопросы в комментариях - разберемся. == Полезные ссылки: * http://www.easy-asic.de/downloads/HOWTO_hierarchical_designs.pdf Прикрепить файл:
Описание:
Это изменение является незначительной правкой.
Чтобы сохранить эту страницу вы должны ответить на вопрос:
Please type here the name of our university (three letters)
Имя пользователя:
Заменить этот текст файлом