Что самое интересное в FPGA...
Запись от Hrethgir размещена 23.12.2024 в 00:18
Показов 1835
Комментарии 1
|
[B]Самое главное, что все эти искания с триггером - работают через раз, никакой стабильности. Кроме триггера с защёлкой. Сумматор тоже стабилен - там никакой ошибки и ничего аномального нет.[/B] Ну с которыми я работал, что после того, как я угадал мысль разработчиков, при разработке первого своего триггера тут [url]https://habr.com/ru/articles/854562/[/url] , это то, что эта хитрость - особенность FPGA. На ней работает даже то, что работать не должно. Тот проект - лаунчер, он подаёт после установки единицы, на вход триггера, сигнал Z. По правилам схемотехники эти триггеры не должны работать, но они работают. Но далее, я получил триггер более высокоскоростной, в два раза быстрее, и он не должен работать (я так делаю потому, что получилось в первый раз - я просто угадал мысль разработчиков, отбросив мысль что компилятор тупой), но - работает. С ним правда проект занимает критически большую логическую часть, хотя глядя на файлы анализа - ничего критического. В общем я переделал немного и без того рабочую схему, но пока сюда не выкладываю, у меня там поиск дальнейших хитростей и размышления. Хотя выложу. У меня есть мысль, что как только я придумаю как убрать верхний NOT , то сообщение о критической части пропадёт. Но тем не менее это работает. Оба варианта триггера работают практически одинаково - с одинаковой скоростью. Но в отличии от предшевствинника на базе защёлки DLC , работаю быстрее него в два раза. Удивительно, что вообще и предшевственник работает. Но то скрытая хитрость - я её всего лишь угадал (додумался), и думаю что это не было злым умыслом, скорее это просто как-то совпало с чем-то, чего я не знаю пока. В общем новый триггер такой [IMG]https://www.cyberforum.ru/blog_attachment.php?attachmentid=9125&stc=1&d=1734979152[/IMG] . [CODE]module Trs (input S, R, output Q); not nLr(nLr1,R); OBUF b1(Obf1_1,S); bufif1 bf1(Q,nLr1,Obf1_1); nor bf2(Obf2,S,R); bufif1 bf3(Q,Q,Obf2); OBUF b5(Obf3,R); bufif1 bf4(Q,nLr1,Obf3); endmodule[/CODE] Тест бенч нового на тактовой частоте сигнала захвата с оцилятора 135 MHZ Цепь состоит из последовательно соединённых 100 триггеров. [IMG]https://www.cyberforum.ru/blog_attachment.php?attachmentid=9128&stc=1&d=1734979605[/IMG] Прототип с публикации тут [url]https://habr.com/ru/articles/854562/[/url] Тест бенч прототипа на тактовой частоте сигнала захвата с оцилятора 135 MHZ [IMG]https://www.cyberforum.ru/blog_attachment.php?attachmentid=9129&stc=1&d=1734979605[/IMG] Этот получается, что новый триггер более чем в два раза быстрее. Ах да. Цепь из ста триггеров и одного NOT, занимает, сверху новый, снизу старый. Триггер с элементом NOR и работает, и не перегружает логику. Что интересно - он работает и с входящим сигналом Z, но его прототипы создавали сообщения, поэтому я вставил элемент NOR. [QUOTE] Resource Usage Utilization Logic 103/8640 2% --LUT,ALU,ROM16 103(103 LUT, 0 ALU, 0 ROM16) - --SSRAM(RAM16) 0 - Register 0/6693 0% --Logic Register as Latch 0/6480 0% --Logic Register as FF 0/6480 0% --I/O Register as Latch 0/213 0% --I/O Register as FF 0/213 0% CLS 52/4320 2% I/O Port 2 - I/O Buf 1 - --Input Buf 0 - --Output Buf 1 - Resource Usage Utilization Logic 99/8640 2% --LUT,ALU,ROM16 99(99 LUT, 0 ALU, 0 ROM16) - --SSRAM(RAM16) 0 - Register 99/6693 2% --Logic Register as Latch 99/6480 2% --Logic Register as FF 0/6480 0% --I/O Register as Latch 0/213 0% --I/O Register as FF 0/213 0% CLS 118/4320 3% I/O Port 2 - I/O Buf 1 - --Input Buf 0 - --Output Buf 1 - [/QUOTE] Теперь уже новый. [IMG]https://www.cyberforum.ru/blog_attachment.php?attachmentid=9125&stc=1&d=1734972508[/IMG] завтра протестирую. Не знаю, мне почему-то больше сложные нравятся, чем будет тот, что ниже. Не знаю чем и почему, просто тестирую пока что, так как для других задач у меня пока маловато времени. Он намного стабильнее двух предшевственников - ни создаёт сообщений и вроде как из файла видно - вполне компактен. Смысл архитектуры этого триггера заключается в том, что тут нет закольцованных логических элементов, а есть прерыватель, а сигнал устанавливающий значение подаётся в момент прерывания. Но есть проблема - проект стенда для сумматоров с ним - не компилируется, ошибок нет - долго синтез происходит, поэтому думаю его надо доработать именно до совместимости с проектом стенда для сумматоров. Но в проекте стенда для триггеров он нормально компилируется и собирается. И в проекте лаунчера он испытан на сохранение информации с входящим сигналом установки - Z.Конечно триггеры такой архитектуры интересны, но самым простым триггером мне представляется такой [IMG]https://www.cyberforum.ru/blog_attachment.php?attachmentid=9131&stc=1&d=1735064326[/IMG]. Он работать должен, но со стартом. Проверен в симуляторе. Но если быть прогматичным, и исподобиться соединить две архитектуры и прошлый опыт с разоблачением "хитрости" компилятора, то получится такая [IMG]https://www.cyberforum.ru/blog_attachment.php?attachmentid=9134&stc=1&d=1735154079[/IMG]. И моя практика пока показывала, что именно эта хитрость делает рабочим и стабильным нечто лучше всего: совмещение некоторых элементов с проверкой условия (НЕ и И), на самом деле с целью создания на входе в модуль определённых функций и таблиц истинности на определённых узлах модуля. В чём здесь на самом деле логика на мой взгляд, что как правило - сброс триггера определяет считывающий с него данные модуль, а установка значения единицы может осуществляться многими, и соответственно, так как применяется в паре с элементом И, что если нужно напротив осуществлять сброс многими а установку одним - то соответственно Не подключается к входу установки, а И к входу сброса. [CODE]module Trs (input S, R, output Q); not nLr(nLr1,R); and a1(an1,S,nLr1); OBUF b5(Ob,R); bufif1 b1(ob1,nLr1,Ob); nor n1(Q,an1,ob1); bufif1 b2(ob1,Q,nLr1); endmodule[/CODE] Вот что получается при компиляции той-же цепи из 100 триггеров и одного НЕ [QUOTE]Resource Usage Utilization Logic 100/8640 2% --LUT,ALU,ROM16 100(100 LUT, 0 ALU, 0 ROM16) - --SSRAM(RAM16) 0 - Register 0/6693 0% --Logic Register as Latch 0/6480 0% --Logic Register as FF 0/6480 0% --I/O Register as Latch 0/213 0% --I/O Register as FF 0/213 0% CLS 52/4320 2% I/O Port 1 - I/O Buf 1 - --Input Buf 0 - --Output Buf 1[/QUOTE] [B][I][SIZE="5"]Сумматоры.[/SIZE][/I][/B] Тестбенч на этой-же частоте цепи сумматоров с делителем захватываемого сигнала на 10. Полная цепь 1400 сумматоров, шаг делителя - действие цепи 2800 сумматоров. Один такт - делителя захватываемого сигнала - время действия цепи 28000 сумматоров. Подробности тут [url]https://habr.com/ru/articles/866816/[/url] . Хотя и тут я по тестовому стенду подробно не объяснял но всё-же. [IMG]https://www.cyberforum.ru/blog_attachment.php?attachmentid=9124&stc=1&d=1734901523[/IMG] Разбираться ещё со многим, в плане платы и среды разработки. Но цифры можно сказать точно (по числу тактов) 8 * 28000 = 224000 , за 128 тактов частоты 135 МГц. 135 МГЦ это 0.135 такта за наносекунду. за один такт срабатывает 1750. Умножаем 1750×0.135 получаем 236 сумматоров срабатывают за одну наносекунду. Там получалось четыре тысячных долей наносекунды, примерно, на срабатывание одного сумматора. , и давно, правда я его не тестил, потому что нахожусь под впечатлениями от сумматора. Высказали мнение, что проект не делает с тестом сумматоров то, что мне нужно, так как я якобы не знаю, что он делает, потому что 1400 сумматоров занимают всего лишь 23 лута. Ну да - занимают. А я что? Я писал анализатор? Всё проверил в тестбенчах, длину цепи наращивал постепенно, постепенно и с задержкой сдвигал захватываемй сигнал. Я что виноват что анализатор такой или так быстро работает сумматор? Нет - не виноват. |
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 1
Комментарии
-
Баг есть с таймингом стенда из 1400 последовательных сумматоров. Думаю попробовать Стрый способ - подать на выход модуля. Если не пройдет номер, то испытывать его в более сложных проектах выдающих более сложные результаты формирующиеся во время всей работы. Как минимум можно сравнивать что быстрее, а что медленнее. С точными цифрами пока проблема, но думаю решу её в ближайшее время. Считаю что при создании триггера нахожусь на правильном пути и с правильным выбором его архитектуры.Запись от Hrethgir размещена 25.12.2024 в 09:58


