Форум программистов, компьютерный форум, киберфорум
Hrethgir
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Что самое интересное в FPGA...

Запись от Hrethgir размещена 23.12.2024 в 00:18
Показов 1926 Комментарии 1
Метки fpga, триггер

[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 лута. Ну да - занимают. А я что? Я писал анализатор? Всё проверил в тестбенчах, длину цепи наращивал постепенно, постепенно и с задержкой сдвигал захватываемй сигнал. Я что виноват что анализатор такой или так быстро работает сумматор? Нет - не виноват.
Миниатюры
Нажмите на изображение для увеличения
Название: Screenshot from 2024-12-22 23-47-18.png
Просмотров: 940
Размер:	15.6 Кб
ID:	9120   Нажмите на изображение для увеличения
Название: Screenshot from 2024-12-23 19-44-41.png
Просмотров: 1081
Размер:	13.1 Кб
ID:	9125   Нажмите на изображение для увеличения
Название: Peek 2024-12-25 22-11.gif
Просмотров: 411
Размер:	42.3 Кб
ID:	9134  

Изображения
 
Изображения
Тип файла: jpg Снимок экрана (37).jpg (81.5 Кб, 1003 просмотров)
Тип файла: jpg Снимок экрана (38).jpg (59.6 Кб, 807 просмотров)
Тип файла: jpg Снимок экрана (39).jpg (59.1 Кб, 586 просмотров)
Метки fpga, триггер
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 1
Комментарии
  1. Старый комментарий
    Баг есть с таймингом стенда из 1400 последовательных сумматоров. Думаю попробовать Стрый способ - подать на выход модуля. Если не пройдет номер, то испытывать его в более сложных проектах выдающих более сложные результаты формирующиеся во время всей работы. Как минимум можно сравнивать что быстрее, а что медленнее. С точными цифрами пока проблема, но думаю решу её в ближайшее время. Считаю что при создании триггера нахожусь на правильном пути и с правильным выбором его архитектуры.
    Запись от Hrethgir размещена 25.12.2024 в 09:58 Hrethgir вне форума
 
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru