На настоящий момент, я только приближаюсь к теме практического использования ПЛИС, и в этом направлении стал немного изучать Verilog и использовать симулятор Ikarus. С простыми логическими схемами я вроде бы разобрался, но возникло непонимание с конструированием триггеров, а именно, попытка отказаться от поведенческого программирования, то есть отказа от конструкций вида: always @ (posedge/negedge ...), привела к ошибкам в симуляции.
Собственно, для меня важно описать схему именно поэлементно, чтобы можно было её воспроизвести конкретно на дискретных компонентах при необходимости, и чтобы была ясна её внутренняя реализация. Как правильно, например, сделать RS, D, JK, T триггеры, и в какой программе можно провести их адекватный анализ работы? Может я что-то упускаю из вида?
Для начала Вам необходимо разобраться в терминологии. При работе с ПЛИС нужно использовать словосочетание "разработать схему", а не "поведенческое программирование", поскольку результатом синтеза в ПЛИС является электрическая схема, а не ПО/СОФТ/"прога" и так далее. Далее: большинство триггеров в ПЛИС реализуются как FlipFlop или Latch, которые работают по фронту тактового сигнала, поэтому отказаться от "posedge/negedge" не получится, и если честно я не вижу в этом никакой проблемы. Если Вы хотите изучить/разобраться как на Verilog-e описать тот или иной логический элемент, то для начала Вам понадобятся учебники по Verilog-y. Если Вы хотите увидеть результат синтеза Ваша кода на Verilog-e, в этом случае Вам потребуется синтезатор: - Xilinx: (ISE / VIVADO) - Intel(Altera): Quartus
Для начала Вам необходимо разобраться в терминологии. При работе с ПЛИС нужно использовать словосочетание "разработать схему", а не "поведенческое программирование", поскольку результатом синтеза в ПЛИС является электрическая схема, а не ПО/СОФТ/"прога" и так далее. Если Вы хотите изучить/разобраться как на 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
1. О какой книжке/учебнике идет речь? 2. В ПЛИС счетчики реализуются на D триггерах, T триггера можно использовать в ASIC (связано это с особенностями архитектуры). Вся последовательная логика в ПЛИС должна быть синхронной, чтобы не было проблем по времянке, поэтому вот простейший пример счетчика на Verilog-e:
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 используя симуляторы, то есть выводить на диаграмму результат работы Вашего кода. Все они платные, но чисто теоретически торенты никто не отменял.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
P.S Счетчик можно и реализовать и комбинационной, затем переписывая его значения в регистр по фронту тактового сигнала, так как значения счетчика в любом случае необходимо хранить.
Я понял, попробую подойти к сути ближе, возьмём простейший RS-триггер. Его можно построить на двух элементах И-НЕ или ИЛИ-НЕ, в зависимости от того, по какому фронту нужно срабатывание.
В ПЛИС Триггера уже сформированы, и не синтезируются из "меньших" логических элементов. Разница состоит в том, что в зависимости от Вашего кода, синтезатор сформирует FlipFlop или Latch.
Все они платные, но чисто теоретически торенты никто не отменял.
А какую программу более порекомендуете?
Добавлено 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.
Конечно, каша у меня складывается, но, тем не менее, получается, что ПЛИС состоит из ячеек, и каждая ячейка содержит как массив логических вентилей, так и несколько триггеров, которые можно настроить и использовать, экономя вентили для более нужных целей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
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 простейшие схемы, а уже потом переходить под написание кода под конкретную ПЛИС. Вы правильно заметили, информации очень много и обрабатывать все и сразу очень сложно.
Собственно, для меня важно описать схему именно поэлементно, чтобы можно было её воспроизвести конкретно на дискретных компонентах при необходимости, и чтобы была ясна её внутренняя реализация. Как правильно, например, сделать RS, D, JK, T триггеры, и в какой программе можно провести их адекватный анализ работы? Может я что-то упускаю из вида?
Если хотите построить триггеры, да и более сложные схемы на уровне логических элементов, можно воспользоваться даташитами на древние микросхемы серии SN74 (например, буржуйская SN7474 -- наша К155ТМ2, два D-триггера) и т.п. -- там часто приводятся схемы такого уровня (иногда и на уровне транзисторов попадаются, но это уже излишне в данном случае). Что же касается симуляции, то здесь проблемы могут быть с неадекватным поведением используемого ПО. Лично меня в своё время задолбали глюки Xilinx'овского ISIM (нередко банально падал из-за внутренних ошибок) и я перешёл на ModelSim/QuestaSim -- они меня пока что не подводили, любую нужную схему моделировали корректно и быстро.
Насчёт "сборки" триггеров на ПЛИС, не используя встроенные триггеры. Такое возможно, сам делал для интереса на Xilinx'ах -- правда, пришлось "объяснять" компилятору (в ISE, Vivado стараюсь не использовать, ибо тормозит жутко), что у меня циклические связи с схеме намеренно сделаны, а не в результате ошибки, и чтоб он не умничал, а делал то, что ему сказано.
Разница между latch (по-русски их защёлками именуют) и flip-flop (их обычно просто триггерами зовут) заключается в их поведении по отношению к сигналу синхронизации. В защёлке, если этот сигнал имеет активный уровень, сигнал данных свободно проходит с входа на выход; соответственно, если удерживать сигнал синхронизации активным и менять сигнал данных, выход тоже будет меняться (естественно, с определённой задержкой, если говорить про реальные схемы). Когда же сигнал синхронизации становится неактивным, последнее состояние входа "защёлкивается" и удерживается на выходе до тех пор, пока сигнал синхронизации опять не станет активным. Flip-flop меняет состояние своего выхода только в момент активного перепада на линии синхронизации, "копируя" на выход то, что в момент перепада у него было на входе. Технически flip-flop -- это две последовательно включённые защёлки, причём на одну подан прямой сигнал синхронизации, а на другую -- инверсный.
Если хотите построить триггеры, да и более сложные схемы на уровне логических элементов, можно воспользоваться даташитами на древние микросхемы серии SN74 ...
Вот это я практикую, только сейчас использую, в основном, серию 74HC. Но, когда элементов становится много, появляются трудности, плюс падает быстродействие.
Что же касается симуляции, то здесь проблемы могут быть с неадекватным поведением используемого ПО. Лично меня в своё время задолбали глюки Xilinx'овского ISIM (нередко банально падал из-за внутренних ошибок) и я перешёл на ModelSim/QuestaSim -- они меня пока что не подводили, любую нужную схему моделировали корректно и быстро.
Да, да, когда я сделал несколько вариантов триггеров на вентилях в Verilog, то Icarus в тесте показал на выходах состояние неопределённости - "X." Я думаю сейчас, что, возможно, я не предусмотрел установку начального состояния. Как бы все реальные элементы всегда немного асимметричны, поэтому схема переключается в то или иное состояние, а при математическом моделировании компоненты получаются идеальными. В общем, это мысли.
Насчёт "сборки" триггеров на ПЛИС, не используя встроенные триггеры. Такое возможно, сам делал для интереса на Xilinx'ах ...
Я посмотрел в стандарт, там написано, что можно перейти даже на уровень транзисторов - nmos, pmos ... Пока основная сложность в моём подходе - слишком много теории, а тут неплохо было бы провести эксперименты с "железом."
Кстати, оказывается ещё Lattice производит свои ПЛИС, тем не менее, как я понял, у них вся серия имеет исполнение BGA.
Просветите пожалуйста, ведь наверняка есть недорогие клоны из Поднебесной ПЛИС Altera и Xilinx, которые сгодились бы для учебных целей, и которые не жалко было бы загубить. Или с таким ненадёжным подходом лучше не связываться?
А чем не устраивают эксперименты на какой-нибудь готовой плате с ПЛИС? Они ж не обязательно дорогие, есть и достаточно дешёвые. Ну а братья-китайцы что-то точно выпускают, но насчёт цен и доступности понятия не имею: нужды не было, не смотрел. Кроме того, лепить свою плату... достаточно сложно, даже если не с BGA: как правило, там заморочки с питанием (несколько напряжений, которые подавать-снимать надо в определённой последовательности) и со скоростными линиями, если быструю внешнюю память цеплять или ещё что в этом роде (какую-нибудь SDRAM на 100 МГц развести не проблема, чтоб заработало с первого раза, а вот, скажем, DDR3...).
А чем не устраивают эксперименты на какой-нибудь готовой плате с ПЛИС?
Устраивают, даже слышал, что на некоторых платах обустраивают встроенный программатор. Просто, я пока плохо сопоставляю свои потребности с имеющимися решениями, хотелось бы приобрести плату с тем типом ПЛИС, который потом я смогу осилить в самостоятельной практике, например, BGA технология мне не доступна, это однозначно, идеально было бы исполнение QFP, да с шагом покрупнее. FPGA с отдельной памятью тоже пока рановато, думаю CPLD это то, что нужно. По поводу количества вентилей дело самое неопределённое, одно дело, паять дискретные микросхемы, и другое, соединять внутренними линиями, которых может не хватить, как понимаю. В общем, по примерной прикидке, получается нужно от 200 до 1000 вентилей.
Ну, можно было бы купить какую-нибудь из самых дешёвых платок -- и не особо важно, что за ПЛИС там будет, поскольку на ней можно получить необходимый практический опыт и всё такое прочее (грубо говоря, освоите более-менее Альтеру -- сможете и Хилинх использовать, и Латтис, ну и наборот: у всех у них есть свои "тараканы", но базовые вещи очень близки, а хорошо разобравшись с одним, не составит большого труда разобраться и с другими). Ну а затем, если будет нужда спроектировать-таки свою плату, это Вы сможете сделать уже куда более осмысленно, чем сейчас.
И, кстати говоря, свой проект Вы можете сначала реализовать и отладить в симуляторе (в том же МоделСиме), а затем синтезировать для нескольких реальных ПЛИС и посмотреть, сколько ресурсов он сожрёт. Это позволит точно понять, какой вместимости ПЛИС Вам нужна, после чего можно заняться поисками подходящего варианта.
Ну а указываемые производителями вентили... это своего рода "сферические кони в вакууме", и пересчитать в них реальные вентили зачастую весьма пролематично. В частности, если что-то собирается на рассыпухе, то нередко можно сильно сэкономить микросхемы, используя объединение выходов с открытым коллектором или с тремя состояниями; на ПЛИС же для реализации подобного потребуются дополнительные элементы для реализации логических функций или мультиплексоров, которых на рассыпухе в явном виде не было.
Настоятельно рекомендую для ознакомления с ПЛИС использовать только отладочные платы от производителя. Если приобретать у китайцев, то никто не гарантирует что ПЛИС работоспособна и не будет глюков, да и к тому же в случае появление последних, отыскать истинную причину (HDL неверный или проблема в самой ПЛИС и еще что) будет очень сложно. К тому же, на отладочных платах уже выведены простейшие интерфейсы, Вам остается только реализовать их на HDL языке (имеется ввиду выходы ПЛИС забиндены на конкретные порты) и проверить себя, что будет отличной тренировкой. Нет нужды покупать платы с современными ПЛИС, купите платы годов 2006-2010, для ознакомления это более чем достаточно, да и $ много не потребуется.
Я посмотрел, они производят свой программатор и свои учебные платы, хотя и на базе Intel(Altera). По цене их продукция более доступна, чем оригинальные программатор и платы от Intel, по крайней мере мне так показалось.
На настоящий момент, я только приближаюсь к теме практического использования ПЛИС, и в этом направлении стал немного изучать Verilog и использовать симулятор Ikarus.
Я тоже достаточно долго ходил вокруг и около, а потом в очередном проекте меня прижала необходимость иметь пятьдесят четыре независимых канала восьмибитного ШИМ, и я понял, что момент настал.
И вы знаете, несмотря на все свои опасения, за пару дней я не торопясь освоил работу с ПЛИС в объеме, необходимом для того, чтобы сделать такой ШИМ-генератор с SPI-интерфейсом. К чему это я... FPGA/CPLD это не так сложно, как кажется. Меньше углубляйтесь в теорию, больше занимайтесь практикой.
Собственно, для меня важно описать схему именно поэлементно, чтобы можно было её воспроизвести конкретно на дискретных компонентах при необходимости, и чтобы была ясна её внутренняя реализация.
В таком случае вообще не надо ничего писать на Verilog. Quartus (если говорить про экосистему Altera) позволяет нарисовать схему непосредственно, как в обычном схемотехническом редакторе.
К слову, Quartus скачивается с официального сайта совершенно бесплатно, не надо никаких кряков.
А вот Verilog особенно хорош как раз тогда, когда схема потенциально будет настолько сложна, что заморачиваться с ней вообще не хочется (и, естесственно, перспективы реализовывать ее на дискретной логике тоже нет). Тогда можно просто описать то, чего хочется, и система синтеза сама разберется. Но, кстати, если хочется, и в этом случае можно запустить RTL Viewer и посмотреть, что же там было синтезировано.
Но кстати для простых систем Verilog тоже имеет преимущества перед рисованием схемы.
Цитата:
Конечно, каша у меня складывается, но, тем не менее, получается, что ПЛИС состоит из ячеек, и каждая ячейка содержит как массив логических вентилей, так и несколько триггеров, которые можно настроить и использовать, экономя вентили для более нужных целей.
Именно так. Базовый элемент CPLD/FPGA - триггер (как правило один) и массив логики.
Цитата:
Я так понял, что это счётчик на 5 бит, но организован он как бы через сумматор.
Да. Делать асинхронные счетчики (на основе T-триггеров) в CPLD/FPGA не имеет смысла, потому что это не позволит реализовать потенциал по быстродействию.
Цитата:
А какую программу более порекомендуете?
ПЛИС Altera вроде бы более доступны, соответственно - Quartus.
Цитата:
Кроме того, лепить свою плату... достаточно сложно, даже если не с BGA: как правило, там заморочки с питанием (несколько напряжений, которые подавать-снимать надо в определённой последовательности) и со скоростными линиями
Это все в старших сериях. С младшими (тот же MAX 3000) таких заморочек нет.
Цитата:
хотелось бы приобрести плату с тем типом ПЛИС, который потом я смогу осилить в самостоятельной практике
Особенность ПЛИС по сравнению с контроллерами заключается в том, что код на Verilog будет работать на любой ПЛИС (даже разных производителей), только бы влез по количеству ячеек и используемых физических выводов. Потому какой чип будет стоять на отладочной плате - не так важно.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения