МАРСОХОД

Open Source Hardware Project

Графический дизайн в Quartus II v10.1 для начинающих.

Altera Quartus II v10 для начинающих

Меня долго терзали сомнения , нужно ли об этом рассказывать, но все-таки решил что нужно, по ряду соображений:

  •  Альтера еще не выбросила из пакета графический редактор (за что им "низкий поклон").
  • В тему "ПЛИС" приходят люди из разных смежных областей, в том числе и из схемотехники, поэтому схемотехническое представление может быть, на начальном этапе, более понятным (особенно для тех, кто уже пытался паять какие-то проводки и микросхемы). 
  • Мы (для платы Марсоход) имеем дело с очень маленьким и простым чипом, в котором можно реализовать очень небольшие проекты, не требующие каких-то глубоких знаний и уж тем-более коллективного программирования.
    (В некоторых случаях дело обходится установкой всего-лишь нескольких примитивов) .
  • Далеко не все начинающие программисты на HDL представляют себе, как их проекты выглядят в реальном чипе. (возможно, смогут узнать для себя что-то новое).

Я занимаюсь ПЛИС очень давно и участвовал реализации даже очень больших проектов в графическом виде.
Надеюсь, мой опыт будет кому-нибудь полезен.

Часть1.   Пины (A),  Провода (B), Константы (C).

A.

Чип EPM240T100 имеет, кроме земли, питания и JTAG, 80 пинов, которые можно использовать в своих проектах.
В программе "Resource Property Editor" из комплекта Altera Quartus II один пин выглядит так:

PIN в проектах ПЛИС Altera Quartus II

В середине картинки ромбик в квадратике, это , собственно ножка чипа. Проводок с правой стороны - это вход, который может идти в чип напрямую, или через элемент задержки (^T).
Треугольничек с левой стороны - выходной буферный элемент. Он имеет вход данных и разрешения (который с кружочком).
В программе "Assignment Editor" для каждого пина можно назначить определенные свойства:

  • прежде всего "Location" - номер ножки в чипе.

Затем свойства входа:

  • уже упомянутая задержка "Input Pin to Logic Array Delay" (зачем может понадобиться , не знаю). 
  • "Weak Pull Up" включает подтягивающий резистор на питание (обязательно нужно на кнопочках, чтобы не болтались в воздухе и не ловили наводки). 
  • "Bus Hold" - примерно тоже-самое что и "Weak Pull Up", но подтягивает не к питанию, а к прямому выходу этого-же пина. Это удерживает пин в состоянии, которое на нем было последним.
  • "I/O Standart" - возможно только два случая - наличие или отсутствие триггера шмитта (очеyь нужная функция - триггер шмитта нужен практически всегда).

Ну и свойства выхода:

  • "Slow Slew Rate" - уменьшение скорости нарастания выходного сигнала, якобы для уменьшения помех (не пробовал).
  • "Current Strengh" - возможны два значения 16ma или 8ma. По моим измерениям, в
    первом случае сопротивление канала выходного ключа ~20ом, во втором 40ом.

Для того чтобы использовать пин в дизайне , нужно с помощью меню "Symbol" установить
два примитива - "Bidir" и "Tri".
BIDIR PIN в среде Altera Quartus II
Для запуска меню "Symbol" можно нажать два раза левой кнопкой мыши на свободном поле или соответствующую кнопку в меню редактора (там изображен какой-то логический элементик).

Ввод компонента на схеме Altera Quartus II

Нужный нам примитив можно выбрать в библиотеке или ввести его название с строке "Name:", что , на мой взгляд, гораздо удобнее. Кроме того, есть три частных случая :
Входные и выходные пины на схеме Altera Quartus II

"Input" - когда выходной буфер всегда находится в "Z"- состоянии и используется только вход.
"Output" - когда он всегда разрешён, и данные сразу поступают на выход (вход использовать нельзя ).
"Opndrn" - когда, в зависимости от данных, на выходе или "Z" или "0".
Выход с открытым коллектором на схеме Altera Quartus II

Примитивы  "Input" ,"Output" и "Bidir" могут описывать сразу несколько пинов и должны быть поименованы соответственно (key[3..0] , pt_left и т.д.).

B.

Теперь, когда данные можно вводить в чип и выводить наружу - нужны провода.
Провода на схемах Altera Quartus II

Проводники могут быть одиночные ("Node Line") или шины ("Bus Line") и тоже могут иметь свои имена. Если имена проводников совпадают с именами пинов значит они соединены. В некоторых случаях проводники нужно переименовывать. Для этого можно использовать примитив "Wire"
Переименование проводников на схемах Altera Quartus II

Имена шин могут иметь две размерности (в некоторых случаях это удобно) и менять порядок  бит (на выходе одного элемента, например, bus[3..0], а на входе другого bus[0..3] ). Размерность шины должна точно совпадать с размерностью входа или выхода, к которому она подключена.

C.

Иногда, на вход какого-нибудь компонента или на пин, нужно подать какое-то, не меняющееся во времени, значение (константу). Для этого можно использовать примитивы "GND"  и "VCC".
Константы на схемах Altera Quartus II

В случае, если константа нужна большая, чтобы не рисовать много "GND"  и "VCC" можно использовать параметризованную мегафункцию "LPM_CONSTANT" (здесь и далее "мегафункция"- некоторое количество связанных между собой примитивов,
 реализующee определенную функциональность . Обычно называется LPM_XXX).
Константы на схемах Altera Quartus II
Установить константу можно , как и примитивы, с помощью меню "Symbol", но двумя способами:

  1. С помощью визарда. Сдесь все понятно - отвечаешь на вопросы и в итоге получаешь нужный тебе компонент ( на картинке слева ).
  2. Если в меню "Symbol" убрать галочку "Launch MegaWizard Plug-In", то можно установить так-называемую "чистую" мегафункцию. В этом случае все параметры придётся устанавливать "в ручную", в меню "Properties". Эти параметры видны в табличке возле элемента ( на картинке справа ).

Напоследок пара рекомендаций.

1. Не меняйте геометрическую ориентацию элементов. Поскольку  у всех элементов нет дополнительных признаков, где вход,
где выход, входы всегда должны быть слева, а выходы справа.

2. Старайтесь использовать только "чистые" мегафункции. Это облегчит визуальное восприятие схемы, поскольку они всегда
одинаково выглядят. Это облегчит переносимость каких-то фрагментов схем из других проектов, поскольку не тянут за собой никаких файлов ( можно копировать через клипбоард ).

В следующей статье - Часть2. Комбинаторная логика.

 

 

Комментарии  

+1 #42 Ю р и й 20.06.2016 05:40
В каталоге проекта должен быть файл "*.pin"
+1 #41 Николай18 18.06.2016 07:05
Спасибо за ответ!
Но поскольку эти выводы не показаны на планировщике, а в даташите EPM3064ATC100 их не нашел, то я несколько "завис.
+1 #40 Ю р и й 18.06.2016 03:36
Пины питания на плате уже "жестко" запаяны, и с ними уже ничего нельзя сделать :-|
+1 #39 Николай18 17.06.2016 19:07
Проект компилируется успешно, все выводы (входы-выходы) показываются, но на планировщике выводов нет ни одного вывода питания или земли
+3 #38 Ю р и й 12.12.2014 14:02
Цитирую son313:
Здравствуйте. Помогите пожалуйста реализовать двунаправленный шинник КР1533АП6 на ПЛИС фирмы Altera в quartus 2 в виде модуля на языке Verilog. Внутренняя структура КР1533АП6 если что такая: http://tec.org.ru/board/kr1533ap6/151-1-0-1171
Пробовал составить из готовых элементов ключей, но при компиляции сплошные ошибки. За ранее благодарен.

Фраза для гугла "74245 verilog" :-)
+1 #37 son313 12.12.2014 13:35
Здравствуйте. Помогите пожалуйста реализовать двунаправленный шинник КР1533АП6 на ПЛИС фирмы Altera в quartus 2 в виде модуля на языке Verilog. Внутренняя структура КР1533АП6 если что такая: http://tec.org.ru/board/kr1533ap6/151-1-0-1171
Пробовал составить из готовых элементов ключей, но при компиляции сплошные ошибки. За ранее благодарен.
+2 #36 anakost 22.03.2013 09:10
Я по поводу:
"Opndrn" - когда, в зависимости от данных, на выходе или "Z" или "0".
Сразу и не понял. Может добавить что это выход с открытым стоком, и подключается через подтягивающий резистор? Например для согласование с 5В логикой.
Когда выход активен, он формирует низкий логический уровень. Когда не активен, резистор подтягивает его с напряжению 5В.
+1 #35 Эдуард 02.03.2013 19:12
Спасибо Юрий. Все получилось. А я искал в свойствах вывода.
+1 #34 Ю р и й 01.03.2013 04:37
Цитирую Эдуард:
Здравствуйте. Может подскажите, каким образом убрать с экрана описание выводов. Мне достаточно только номера вывода, а Quartus дополнительно пишет всю информацию, типа:
PIN_103
3.3V Schmitt Trigger Input

В меню "View" убираете все "Show ..." что вам мешают.
+1 #33 Эдуард 28.02.2013 18:57
Здравствуйте. Может подскажите, каким образом убрать с экрана описание выводов. Мне достаточно только номера вывода, а Quartus дополнительно пишет всю информацию, типа:
PIN_103
3.3V Schmitt Trigger Input
+1 #32 Rodion 12.01.2013 16:57
Спасибо! :-)
+1 #31 Ю р и й 09.11.2012 13:30
Цитирую Роман:
что то не могу понять как открыть Resource Property Editor??? Подскажите

Его можно запустить из графического редактора или
пин-планера через "Locate".
Выделите нажный обьект и нажмите ПКМ, в пункте
"Locate" будет список "Locate in..." - выберите нужный. :-)
+1 #30 Роман 09.11.2012 08:54
что то не могу понять как открыть Resource Property Editor??? Подскажите
+1 #29 Ю р и й 05.01.2012 13:49
Цитирую pixar:
Цитирую Ю р и й:

Возьмите обычную ЛН-ку и соедините у нее вход с выходом - будет генерить?
.

ну не откладывая надолго, взял код с
http://www.alteraforum.com/forum/showthread.php?t=709&page=2
пост #15 , вывел на наружные ноги , добавил внутри же инвертор .
залил в DEO0_nano , соединил взод с выходом проводом 30 см длиной - получил 50 МГц . Мерял Rigol_1052.
Если есть надобность , могу оставить один буфер+один инветор, перемычку сделать 5 мм и померять Теком.
200МГц может и выйдет.

Абсолютно не возражаю, но это уже не "генератор внутри ПЛИС"
+1 #28 pixar 05.01.2012 11:12
Цитирую Ю р и й:

Возьмите обычную ЛН-ку и соедините у нее вход с выходом - будет генерить?
.

ну не откладывая надолго, взял код с
http://www.alteraforum.com/forum/showthread.php?t=709&page=2
пост #15 , вывел на наружные ноги , добавил внутри же инвертор .
залил в DEO0_nano , соединил взод с выходом проводом 30 см длиной - получил 50 МГц . Мерял Rigol_1052.
Если есть надобность , могу оставить один буфер+один инветор, перемычку сделать 5 мм и померять Теком.
200МГц может и выйдет.
+1 #27 Ю р и й 05.01.2012 07:00
Цитирую pixar:
http://www.altera.com/literature/ug/ug_low_level.pdf LCELL implement
http://www.alteraforum.com/forum/showthread.php?t=709&page=2

TrueRNG http://ite.gmu.edu/~kgaj/publications/conferences/GMU_FPGA_2004_slides.pdf

а главное - не могу ссылку найти, но видел сам - какие то немцы продавали USB девайс на CoolRunner на основе последней ссылки. Описывалось , как там у них много разных RO по разному от температуры зависят и друг друга стробируют и как от этого чисто случайное число возникает из ниоткуда.


На мой взгняд, не всему что "написано" слдует искренне верить.
Возьмите обычную ЛН-ку и соедините у нее вход с выходом - будет генерить?
Все что здесь описано, это не генератор, а усилитель помех по питанию.
Я-бы даже для генрации слечайных чисел такое использовать не рискнул.
+1 #26 pixar 05.01.2012 01:11
http://www.altera.com/literature/ug/ug_low_level.pdf LCELL implement
http://www.alteraforum.com/forum/showthread.php?t=709&page=2

TrueRNG http://ite.gmu.edu/~kgaj/publications/conferences/GMU_FPGA_2004_slides.pdf

а главное - не могу ссылку найти, но видел сам - какие то немцы продавали USB девайс на CoolRunner на основе последней ссылки. Описывалось , как там у них много разных RO по разному от температуры зависят и друг друга стробируют и как от этого чисто случайное число возникает из ниоткуда.
+1 #25 Ю р и й 04.01.2012 11:11
Цитирую pixar:
Цитирую Ю р и й:
Именно внутри ПЛИС генератор сделать нельзя, частотозадающие элементы все-равно будут снаружи.

Гочему нельзя ? А как же все true random generator cores, работающие на внутренних генераторах?


Очень хотелось-бы посмотреть пример реализации на ПЛИС.
+1 #24 pixar 04.01.2012 09:47
Цитирую Ю р и й:
Именно внутри ПЛИС генератор сделать нельзя, частотозадающие элементы все-равно будут снаружи.

Гочему нельзя ? А как же все true random generator cores, работающие на внутренних генераторах?
+1 #23 Ю р и й 04.01.2012 06:58
Цитирую Chettuser:
Здравствуйте,
Больше не нашёл куда написать, проблема такая:
Хочу создать тактовый генератор 200 МГц на EPM240(или 3032).
Можно ли собрать внутри ПЛИС что то наподобие этого: http://www.radioman-portal.ru/pages/1602/ ?


Именно внутри ПЛИС генератор сделать нельзя, частотозадающие элементы все-равно будут снаружи.
Об RC -генераторах здесь https://marsohod.org/11-blog/105-freqdependancy
о кварцевых здесь https://marsohod.org/11-blog/133-quarz
+1 #22 Chettuser 03.01.2012 11:53
Здравствуйте,
Больше не нашёл куда написать, проблема такая:
Хочу создать тактовый генератор 200 МГц на EPM240(или 3032).
Можно ли собрать внутри ПЛИС что то наподобие этого: http://www.radioman-portal.ru/pages/1602/ ?
+1 #21 zvladm 24.07.2011 03:26
:cry: а как попасть на вторую часть марлезонского балета, т.е. часть 2
+1 #20 Петр 22.07.2011 03:23
Добрый день!

Подскажите, пожалуйста, существуют ли какие-нибудь опции, влияющие на скорость компиляции проекта? А то так долго...
+1 #19 Петр 19.07.2011 09:40
Cпасибо!
+1 #18 Ю р и й 19.07.2011 09:01
Цитирую Петр:
Последний вопрос на сегодня, честное слово! :oops:
Как указывается модуль верхнего уровня? Мы можем указать файл как верхний уровень, а если в файле несколько модулей?

Честно говоря, никогда так не делал. Обычно, один модуль- один файл.
+1 #17 Петр 19.07.2011 08:08
Последний вопрос на сегодня, честное слово! :oops:
Как указывается модуль верхнего уровня? Мы можем указать файл как верхний уровень, а если в файле несколько модулей?
+1 #16 Петр 19.07.2011 08:06
Век живи - век учись!
У меня Ваши уроки распечатаны, этот пример крутил, но в голове ничего не щелкнуло, пока не сказали!
БОЛЬШОЕ СПАСИБО!
+1 #15 Ю р и й 19.07.2011 07:42
Цитирую Петр:
Научился, использовал графическое представление.
А нельзя как-то просто указать - выход такого модуля на вход такого-то модуля?

Почитайте здесь: https://marsohod.org/11-blog/79-veriloglesson2
В конце пример на верилоге.
+1 #14 Петр 19.07.2011 07:09
А еще вопрос можно? ;-)
Каждый модуль нужно писать в отдельном файле?
У меня было два модуля в одном файле, графический символ создавался только для одного, имя которого совпадало с именем файла.
Спасибо!
+1 #13 Петр 19.07.2011 07:06
Научился, использовал графическое представление.
А нельзя как-то просто указать - выход такого модуля на вход такого-то модуля?
+1 #12 Ю р и й 19.07.2011 07:04
Цитирую Петр:
Добрый день!
Подскажите, пожалуйста, в следующем вопросе:
Есть два модуля, написанных на верилоге :-). Как соединить выход одного модуля со входом другого? Использую Альтеру.

Если "Top Level" графический, то для каждого модуля на верилоге нужно создать символ. Делается это в
меню "File > Create/Update > Create Symbol Files for Current File". Затем нужно вставить эти символы в проект
и соединить проводочками.
+1 #11 Петр 19.07.2011 06:33
Добрый день!
Подскажите, пожалуйста, в следующем вопросе:
Есть два модуля, написанных на верилоге :-). Как соединить выход одного модуля со входом другого? Использую Альтеру.
+1 #10 SteveGe 07.06.2011 10:38
Одновременно в обоих напралениях...И нтересно... Не знал такого раньше. Будем разбираться дальше.
+1 #9 Ю р и й 07.06.2011 03:41
Цитирую SteveGe:
Спасибо за ответ, но я все равно не до конца понял. Мне, например, нужно чтоб в один момент ножка(пин) работала на ввод данных, а в другой - на вывод данных (ну типа как AVR МК - с помощью регистра задаем направления передачи). Как конкретно управлять направление передачи данных по Bidir, ведь не может же быть такого, что пин работает и на ввод и на вывод одновременно. Спасибо.

Пин в максе всегда работает на ввод, может работать
на вывод (enable=1), и ничего не мешает это делать одновременно.
+1 #8 SteveGe 06.06.2011 23:59
Спасибо за ответ, но я все равно не до конца понял. Мне, например, нужно чтоб в один момент ножка(пин) работала на ввод данных, а в другой - на вывод данных (ну типа как AVR МК - с помощью регистра задаем направления передачи). Как конкретно управлять направление передачи данных по Bidir, ведь не может же быть такого, что пин работает и на ввод и на вывод одновременно. Спасибо.
+1 #7 Ю р и й 06.06.2011 04:49
Цитирую SteveGe:
"Для того чтобы использовать пин в дизайне , нужно с помощью меню "Symbol" установить
два примитива - "Bidir" и "Tri"." - автор.

Что-то на счет Bidir не совсем вьехал... Enable, если я правильно понял - задает направление передачи: вход или выход; data_out - данные, что нужно выводить, data_in - вводить, правильно я Вас понял? Спасибо.


Посмотрите внимательно на самую первую картинку (из "Resource Property Editor" ). В середине картинки ромбик в квадратике, это , собственно ножка чипа (пин).
Проводок с правой стороны - это входной сигнал - data_in. Он поступает в чип всегда, независимо от сигнала enable.
С левой стороны - выходной буферный элемент , который,
в зависимости от сигнала enable ("0" или "1") может находится в "Z" состоянии, или передавать data_out на пин.
+1 #6 SteveGe 05.06.2011 22:38
"Для того чтобы использовать пин в дизайне , нужно с помощью меню "Symbol" установить
два примитива - "Bidir" и "Tri"." - автор.

Что-то на счет Bidir не совсем вьехал... Enable, если я правильно понял - задает направление передачи: вход или выход; data_out - данные, что нужно выводить, data_in - вводить, правильно я Вас понял? Спасибо.
+2 #5 ю р и й 23.03.2011 17:43
Цитирую vylkan:
А что за "крестики" на концах проводов?

Это означает, что этот конец провода никуда не подключен. На самом деле момент очень важный,
можно дотянуть провод близко ко входу или выходу
компонента, но подключен он к нему или нет можно
судить только по крестику. Спасибо за вопрос.
+1 #4 vylkan 23.03.2011 17:03
А что за "крестики" на концах проводов?
+1 #3 foxit 23.03.2011 13:44
Ждем продолжения
+1 #2 Ю р и й 23.03.2011 10:36
В ближайшее время надеемся запустить
форум.Я думаю, много вопросов можно
будет обсудить там
+1 #1 Алексей 23.03.2011 09:36
Юрий спасибо!
Возможно ли такие же статьи но уже про описательный механизм дизайна. Очень интересует каким образом описываются параметры выходов через "прагмы". TriState и BiDir так же очень интересны в плане применения в шинах. Особенно учитывая тот факт что обособленных выводов на марсоходе маловато и двунаправленнос ть возможный выход из ситуации.

Добавить комментарий


Защитный код
Обновить


GitHub YouTube Twitter
Вы здесь: Начало Статьи о разном Графический дизайн в Quartus II v10.1 для начинающих.