PealehtKasulik infoKüsiViimased muudatused
HomeUseful StuffAskRecent Changes
ГлавнаяПолезноеСпроситьИзменения
ENGESTRUS
#SUBTITLE Arvutid #SUBURL [Course:30874 〔Õppeaine ÕIS-is〕] === Информация Страничка предмета: http://www.pld.ttu.ee/~teet/a1_k_ttu.html Задания и другие материалы: https://edu.pld.ttu.ee/ === Харьютусы Допуском к экзамену являются выполненные лабы и пары проверочных. Проверочные проблем никаких вызывать не должны, вся информация присутствует на слайдах и в википедии. С лабами немного сложнее, но если понимаете, что от вас требуется, то всё будет в порядке. По какой-то причине до сих пор иногда рекомендуется использовать [[http://www.pld.ttu.ee/info/dixi/ DixiCad]] - смело это игнорируйте. !DixiCad - это устаревший софт, который даже загуглить нормально нельзя (все результаты поиска связаны с ТТУ). Xilinx - это уже что-то посовременнее, однако с ним тоже проблем достаточно - постоянные вылеты и прочие проблемы. В целом пользоваться можно, если не хотите сильно заморачиваться, то это ваш выбор. Есть еще пара вариантов: * http://ww.fastad.com/circuit/ - Миленький java applet. * Proteus - вроде бы нормальная программа, но стоит каких-то нечеловеческих денег. * **gEDA** - свободный вариант, но работает только на GNU/Linux, да и в целом требует более глубоких знаний. Этот вариант довольно подробно описан ниже. === Свободное программное обеспечение Самой удобной связкой скорее всего будет [[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 === Обсуждения * [[Вопрос 8]] - про вторую лабу. ---- Кому нужна программа xilinx есть ссылка: http://rutracker.org/forum/viewtopic.php?t=1463255 -- Juli 2014-03-06 12:53 UTC ---- Если кто-то все-таки хочет с DixiCad поиграться, то вот: [[File:dfr_dixi.zip]] -- Artur Gummel 2016-01-30 10:55:50 ---- Полезная программа для построения карт Карно, минимизации функций, преобразования функций в ДНФ или КНФ. [[File:carnoinstall.zip]] -- Artur Gummel 2016-01-30 11:01:32 ---- Logisim - программа для построения логических схем. [[File:logisim-win-2.7.1.zip]] -- Artur Gummel 2016-01-30 11:03:21 Attach file:
Summary:
This change is a minor edit.
To save this page you must answer this question:
Please type here the name of our university (three letters)
Username:
Replace this text with a file