Программируемая логика - это не так уж и сложно. Разберемся вместе.
Ответить

Verilog и реализация триггеров.

Вс окт 14, 2018 13:09:46

Добрый день.

На настоящий момент, я только приближаюсь к теме практического использования ПЛИС, и в этом направлении стал немного изучать Verilog и использовать симулятор Ikarus. С простыми логическими схемами я вроде бы разобрался, но возникло непонимание с конструированием триггеров, а именно, попытка отказаться от поведенческого программирования, то есть отказа от конструкций вида: always @ (posedge/negedge ...), привела к ошибкам в симуляции.

Собственно, для меня важно описать схему именно поэлементно, чтобы можно было её воспроизвести конкретно на дискретных компонентах при необходимости, и чтобы была ясна её внутренняя реализация. Как правильно, например, сделать RS, D, JK, T триггеры, и в какой программе можно провести их адекватный анализ работы? Может я что-то упускаю из вида?

Re: Verilog и реализация триггеров.

Вс окт 14, 2018 18:35:19

Здравствуйте!

Для начала Вам необходимо разобраться в терминологии. При работе с ПЛИС нужно использовать словосочетание "разработать схему", а не "поведенческое программирование", поскольку результатом синтеза в ПЛИС является электрическая схема, а не ПО/СОФТ/"прога" и так далее.
Далее: большинство триггеров в ПЛИС реализуются как FlipFlop или Latch, которые работают по фронту тактового сигнала, поэтому отказаться от "posedge/negedge" не получится, и если честно я не вижу в этом никакой проблемы.
Если Вы хотите изучить/разобраться как на Verilog-e описать тот или иной логический элемент, то для начала Вам понадобятся учебники по Verilog-y.
Если Вы хотите увидеть результат синтеза Ваша кода на Verilog-e, в этом случае Вам потребуется синтезатор:
- Xilinx: (ISE / VIVADO)
- Intel(Altera): Quartus

Re: Verilog и реализация триггеров.

Вс окт 14, 2018 19:10:23

Для начала Вам необходимо разобраться в терминологии. При работе с ПЛИС нужно использовать словосочетание "разработать схему", а не "поведенческое программирование", поскольку результатом синтеза в ПЛИС является электрическая схема, а не ПО/СОФТ/"прога" и так далее.
Если Вы хотите изучить/разобраться как на Verilog-e описать тот или иной логический элемент, то для начала Вам понадобятся учебники по Verilog-y.

Да, действительно, предлагаю за базу взять стандарт: IEEE 1364-2001.
Глава 7 называется: Gate and switch level modeling - как раз то, что меня интересует.
Глава 9 называется: Behavioral modeling - то, о чём я писал под названием "поведенческого программирования." Оно позволяет упрощать разработку, как понимаю, перекладывая составление схемы на внутренние алгоритмы ПО Verilog.

Далее: большинство триггеров в ПЛИС реализуются как FlipFlop или Latch, которые работают по фронту тактового сигнала, поэтому отказаться от "posedge/negedge" не получится, и если честно я не вижу в этом никакой проблемы.

Мне, например, нужен счётчик на Т-триггерах, я же могу его построить просто из логических элементов. И, да, он будет работать ибо по восходящему, либо по нисходящему фронту, в зависимости от его схемы. Просто, хочется поэкспериментировать, например, построить разные схемы сумматоров. Может быть, с позиции профессионала, мой интерес больше походит на баловство. :)

Кстати, а в самой ПЛИС триггеры находятся как готовые элементы или ПО их синтезирует из логики?

Если Вы хотите увидеть результат синтеза Ваша кода на Verilog-e, в этом случае Вам потребуется синтезатор:
- Xilinx: (ISE / VIVADO)
- Intel(Altera): Quartus

Какова цена вопроса?

Re: Verilog и реализация триггеров.

Вс окт 14, 2018 19:29:41

1. О какой книжке/учебнике идет речь?
2. В ПЛИС счетчики реализуются на D триггерах, T триггера можно использовать в ASIC (связано это с особенностями архитектуры). Вся последовательная логика в ПЛИС должна быть синхронной, чтобы не было проблем по времянке, поэтому вот простейший пример счетчика на Verilog-e:

Код:
module counter
(
input clk_i,  // Тактовая частота
input rst_i,  // Асинхронный сброс
input en_i,  // Сигнал ВКЛ счетчик

output reg [4:0] cnt_o // Результат работы счетчика
);

always @(posedge clk_i or negedge rst_i)
begin
     if (!rst_i) cnt_o<= 5'b0;
     else if (en_i) cnt_o <= cnt_o + 1'b1;
end

endmodule



P.S Счетчик можно и реализовать и комбинационной, затем переписывая его значения в регистр по фронту тактового сигнала, так как значения счетчика в любом случае необходимо хранить.

В ПЛИС Триггера уже сформированы, и не синтезируются из "меньших" логических элементов. Разница состоит в том, что в зависимости от Вашего кода, синтезатор сформирует FlipFlop или Latch.

Про синтезаторы:
Сначала Вам необходимо научиться писать боле-менее "разумный" код на Verilog-e используя симуляторы, то есть выводить на диаграмму результат работы Вашего кода. Все они платные, но чисто теоретически торенты никто не отменял.

Re: Verilog и реализация триггеров.

Вс окт 14, 2018 21:54:54

1. О какой книжке/учебнике идет речь?

IEEE 1364-2001 : IEEE Standard Verilog ® Hardware Description Language - стандарт на язык.

Я бы не прочь почитать толковый учебник.

2. В ПЛИС счетчики реализуются на D триггерах, T триггера можно использовать в ASIC (связано это с особенностями архитектуры).

Ну, Т-триггер можно построить на D-триггерах, так что уже что-то радует.

Вся последовательная логика в ПЛИС должна быть синхронной, чтобы не было проблем по времянке, поэтому вот простейший пример счетчика на Verilog-e: ...

Я так понял, что это счётчик на 5 бит, но организован он как бы через сумматор.

P.S Счетчик можно и реализовать и комбинационной, затем переписывая его значения в регистр по фронту тактового сигнала, так как значения счетчика в любом случае необходимо хранить.

Я понял, попробую подойти к сути ближе, возьмём простейший RS-триггер. Его можно построить на двух элементах И-НЕ или ИЛИ-НЕ, в зависимости от того, по какому фронту нужно срабатывание.

В ПЛИС Триггера уже сформированы, и не синтезируются из "меньших" логических элементов. Разница состоит в том, что в зависимости от Вашего кода, синтезатор сформирует FlipFlop или Latch.

Что означает flip-flop и latch в рамках verilog?

Все они платные, но чисто теоретически торенты никто не отменял.

А какую программу более порекомендуете?

Добавлено after 45 minutes 7 seconds:
Вот что ещё интересного прочёл:
MAX 3000A Programmable Logic Device Family Data Sheet June 2006, ver. 3.5 лист 7:
For registered functions, each macrocell flipflop can be individually programmed to implement D, T, JK, or SR operation with programmable clock control. The flipflop can be by passed for combinatorial operation. During design entry, the designer specifies the desired flipflop type; the Altera development system software then selects the most efficient flipflop operation for each registered function to optimize resource utilization.

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

Re: Verilog и реализация триггеров.

Вс окт 14, 2018 22:06:59

1. Литература для начала: http://www.kit-e.ru/articles/circuit/2008_3_161.php (для ознакомления в целом)
1.1 В дальнейшем рекомендую литература только на английском, отечественные источники мягко говоря ...

2. Не совсем, это пятиразрядный счетчик, соответственно 2^5 = до 32 считает.
3. Про триггеры: думаю для начала можете воспользоваться вот этим источником - https://marsohod.org/verilog/153-verilogpictflop
4. FlipFlop и Latch - это то, как синтезатор реализует описанный Вами на Verilog-e триггер. Изучая литературу Вы поймете в чем разница, вручную очень должно описывать.
5. О ПО: на самом деле все индивидуально и кому как больше нравится. Негласным стандартом является знание симулятора ModelSim. Кряк можете найти на просторах сети.
Синтезатор: Если Вы работаете с ПЛИС от Altera (Intel), то это Quartus. Если Вы работаете с ПЛИС от Xilinx, то либо ISE, либо Vivado. ISE для более древних ПЛИС типа Virtex4,5 Spartan3 и т.д, а Vivado уже для современных.

P.S Да, архитектура ПЛИС складывается из логических ячеек (у каждого производителя они называются по разному и кол-во элементов в них тоже разное). Для начала рекомендую Вам научится писать на Verilog-e простейшие схемы, а уже потом переходить под написание кода под конкретную ПЛИС. Вы правильно заметили, информации очень много и обрабатывать все и сразу очень сложно.

Re: Verilog и реализация триггеров.

Пн окт 15, 2018 13:11:26

Собственно, для меня важно описать схему именно поэлементно, чтобы можно было её воспроизвести конкретно на дискретных компонентах при необходимости, и чтобы была ясна её внутренняя реализация. Как правильно, например, сделать RS, D, JK, T триггеры, и в какой программе можно провести их адекватный анализ работы? Может я что-то упускаю из вида?


Если хотите построить триггеры, да и более сложные схемы на уровне логических элементов, можно воспользоваться даташитами на древние микросхемы серии SN74 (например, буржуйская SN7474 -- наша К155ТМ2, два D-триггера) и т.п. -- там часто приводятся схемы такого уровня (иногда и на уровне транзисторов попадаются, но это уже излишне в данном случае). Что же касается симуляции, то здесь проблемы могут быть с неадекватным поведением используемого ПО. Лично меня в своё время задолбали глюки Xilinx'овского ISIM (нередко банально падал из-за внутренних ошибок) и я перешёл на ModelSim/QuestaSim -- они меня пока что не подводили, любую нужную схему моделировали корректно и быстро.

Насчёт "сборки" триггеров на ПЛИС, не используя встроенные триггеры. Такое возможно, сам делал для интереса на Xilinx'ах -- правда, пришлось "объяснять" компилятору (в ISE, Vivado стараюсь не использовать, ибо тормозит жутко), что у меня циклические связи с схеме намеренно сделаны, а не в результате ошибки, и чтоб он не умничал, а делал то, что ему сказано.

Разница между latch (по-русски их защёлками именуют) и flip-flop (их обычно просто триггерами зовут) заключается в их поведении по отношению к сигналу синхронизации. В защёлке, если этот сигнал имеет активный уровень, сигнал данных свободно проходит с входа на выход; соответственно, если удерживать сигнал синхронизации активным и менять сигнал данных, выход тоже будет меняться (естественно, с определённой задержкой, если говорить про реальные схемы). Когда же сигнал синхронизации становится неактивным, последнее состояние входа "защёлкивается" и удерживается на выходе до тех пор, пока сигнал синхронизации опять не станет активным. Flip-flop меняет состояние своего выхода только в момент активного перепада на линии синхронизации, "копируя" на выход то, что в момент перепада у него было на входе. Технически flip-flop -- это две последовательно включённые защёлки, причём на одну подан прямой сигнал синхронизации, а на другую -- инверсный.

Re: Verilog и реализация триггеров.

Пн окт 15, 2018 17:44:31

Если хотите построить триггеры, да и более сложные схемы на уровне логических элементов, можно воспользоваться даташитами на древние микросхемы серии SN74 ...

Вот это я практикую, только сейчас использую, в основном, серию 74HC. Но, когда элементов становится много, появляются трудности, плюс падает быстродействие.

Что же касается симуляции, то здесь проблемы могут быть с неадекватным поведением используемого ПО. Лично меня в своё время задолбали глюки Xilinx'овского ISIM (нередко банально падал из-за внутренних ошибок) и я перешёл на ModelSim/QuestaSim -- они меня пока что не подводили, любую нужную схему моделировали корректно и быстро.

Да, да, когда я сделал несколько вариантов триггеров на вентилях в Verilog, то Icarus в тесте показал на выходах состояние неопределённости - "X." Я думаю сейчас, что, возможно, я не предусмотрел установку начального состояния. Как бы все реальные элементы всегда немного асимметричны, поэтому схема переключается в то или иное состояние, а при математическом моделировании компоненты получаются идеальными. В общем, это мысли.

Насчёт "сборки" триггеров на ПЛИС, не используя встроенные триггеры. Такое возможно, сам делал для интереса на Xilinx'ах ...

Я посмотрел в стандарт, там написано, что можно перейти даже на уровень транзисторов - nmos, pmos ... Пока основная сложность в моём подходе - слишком много теории, а тут неплохо было бы провести эксперименты с "железом."

Кстати, оказывается ещё Lattice производит свои ПЛИС, тем не менее, как я понял, у них вся серия имеет исполнение BGA.

Просветите пожалуйста, ведь наверняка есть недорогие клоны из Поднебесной ПЛИС Altera и Xilinx, которые сгодились бы для учебных целей, и которые не жалко было бы загубить. Или с таким ненадёжным подходом лучше не связываться?

Re: Verilog и реализация триггеров.

Вт окт 16, 2018 14:59:32

А чем не устраивают эксперименты на какой-нибудь готовой плате с ПЛИС? Они ж не обязательно дорогие, есть и достаточно дешёвые. Ну а братья-китайцы что-то точно выпускают, но насчёт цен и доступности понятия не имею: нужды не было, не смотрел. Кроме того, лепить свою плату... достаточно сложно, даже если не с BGA: как правило, там заморочки с питанием (несколько напряжений, которые подавать-снимать надо в определённой последовательности) и со скоростными линиями, если быструю внешнюю память цеплять или ещё что в этом роде (какую-нибудь SDRAM на 100 МГц развести не проблема, чтоб заработало с первого раза, а вот, скажем, DDR3...).

Re: Verilog и реализация триггеров.

Вт окт 16, 2018 17:17:53

А чем не устраивают эксперименты на какой-нибудь готовой плате с ПЛИС?

Устраивают, даже слышал, что на некоторых платах обустраивают встроенный программатор. Просто, я пока плохо сопоставляю свои потребности с имеющимися решениями, хотелось бы приобрести плату с тем типом ПЛИС, который потом я смогу осилить в самостоятельной практике, например, BGA технология мне не доступна, это однозначно, идеально было бы исполнение QFP, да с шагом покрупнее. FPGA с отдельной памятью тоже пока рановато, думаю CPLD это то, что нужно. По поводу количества вентилей дело самое неопределённое, одно дело, паять дискретные микросхемы, и другое, соединять внутренними линиями, которых может не хватить, как понимаю. В общем, по примерной прикидке, получается нужно от 200 до 1000 вентилей.

Re: Verilog и реализация триггеров.

Вт окт 16, 2018 19:05:21

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

И, кстати говоря, свой проект Вы можете сначала реализовать и отладить в симуляторе (в том же МоделСиме), а затем синтезировать для нескольких реальных ПЛИС и посмотреть, сколько ресурсов он сожрёт. Это позволит точно понять, какой вместимости ПЛИС Вам нужна, после чего можно заняться поисками подходящего варианта.

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

Re: Verilog и реализация триггеров.

Вт окт 16, 2018 20:51:30

Настоятельно рекомендую для ознакомления с ПЛИС использовать только отладочные платы от производителя. Если приобретать у китайцев, то никто не гарантирует что ПЛИС работоспособна и не будет глюков, да и к тому же в случае появление последних, отыскать истинную причину (HDL неверный или проблема в самой ПЛИС и еще что) будет очень сложно. К тому же, на отладочных платах уже выведены простейшие интерфейсы, Вам остается только реализовать их на HDL языке (имеется ввиду выходы ПЛИС забиндены на конкретные порты) и проверить себя, что будет отличной тренировкой.
Нет нужды покупать платы с современными ПЛИС, купите платы годов 2006-2010, для ознакомления это более чем достаточно, да и $ много не потребуется.

Re: Verilog и реализация триггеров.

Ср окт 17, 2018 17:08:10

Спасибо.

А Terasic - это нормальный заменитель оригинальных компектующих?

Re: Verilog и реализация триггеров.

Ср окт 17, 2018 17:19:09

Почему заменитель? Они ж делают платы на альтеровских (т.е. ныне уже интеловских) ПЛИС, а не на своих собственных.

Re: Verilog и реализация триггеров.

Ср окт 17, 2018 22:45:17

Я посмотрел, они производят свой программатор и свои учебные платы, хотя и на базе Intel(Altera). По цене их продукция более доступна, чем оригинальные программатор и платы от Intel, по крайней мере мне так показалось.

Re: Verilog и реализация триггеров.

Вс ноя 04, 2018 17:51:15

На настоящий момент, я только приближаюсь к теме практического использования ПЛИС, и в этом направлении стал немного изучать Verilog и использовать симулятор Ikarus.


Я тоже достаточно долго ходил вокруг и около, а потом в очередном проекте меня прижала необходимость иметь пятьдесят четыре независимых канала восьмибитного ШИМ, и я понял, что момент настал. :)

И вы знаете, несмотря на все свои опасения, за пару дней я не торопясь освоил работу с ПЛИС в объеме, необходимом для того, чтобы сделать такой ШИМ-генератор с SPI-интерфейсом. К чему это я... FPGA/CPLD это не так сложно, как кажется. Меньше углубляйтесь в теорию, больше занимайтесь практикой. :)

Я себе брал вот такую плату, на ней стоит чип в BGA, но Altera выпускает CPLD и в корпусах, которые вполне можно паять на коленке.

Собственно, для меня важно описать схему именно поэлементно, чтобы можно было её воспроизвести конкретно на дискретных компонентах при необходимости, и чтобы была ясна её внутренняя реализация.


В таком случае вообще не надо ничего писать на Verilog. Quartus (если говорить про экосистему Altera) позволяет нарисовать схему непосредственно, как в обычном схемотехническом редакторе.

К слову, Quartus скачивается с официального сайта совершенно бесплатно, не надо никаких кряков.

А вот Verilog особенно хорош как раз тогда, когда схема потенциально будет настолько сложна, что заморачиваться с ней вообще не хочется (и, естесственно, перспективы реализовывать ее на дискретной логике тоже нет). Тогда можно просто описать то, чего хочется, и система синтеза сама разберется. Но, кстати, если хочется, и в этом случае можно запустить RTL Viewer и посмотреть, что же там было синтезировано.

Но кстати для простых систем Verilog тоже имеет преимущества перед рисованием схемы.

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


Именно так. Базовый элемент CPLD/FPGA - триггер (как правило один) и массив логики.

Я так понял, что это счётчик на 5 бит, но организован он как бы через сумматор.


Да. Делать асинхронные счетчики (на основе T-триггеров) в CPLD/FPGA не имеет смысла, потому что это не позволит реализовать потенциал по быстродействию.

А какую программу более порекомендуете?


ПЛИС Altera вроде бы более доступны, соответственно - Quartus.

Кроме того, лепить свою плату... достаточно сложно, даже если не с BGA: как правило, там заморочки с питанием (несколько напряжений, которые подавать-снимать надо в определённой последовательности) и со скоростными линиями


Это все в старших сериях. С младшими (тот же MAX 3000) таких заморочек нет.

хотелось бы приобрести плату с тем типом ПЛИС, который потом я смогу осилить в самостоятельной практике


Особенность ПЛИС по сравнению с контроллерами заключается в том, что код на Verilog будет работать на любой ПЛИС (даже разных производителей), только бы влез по количеству ячеек и используемых физических выводов. Потому какой чип будет стоять на отладочной плате - не так важно.

Re: Verilog и реализация триггеров.

Вт ноя 06, 2018 22:09:16

Спасибо, интересная информация. :)
Ответить