Как бы потихонечку освоить работу с FPGA

Печатные платы, программируемая логика, разработка и изготовление аппаратуры

Moderator: Shaos

imsushka
Maniac
Posts: 327
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Как бы потихонечку освоить работу с FPGA

Post by imsushka »

Lavr wrote: 01 Nov 2025 08:15
imsushka wrote: 30 Oct 2025 07:36скорее всего квартус намутил кучу мультиплексоров для записи в регистры.
А я правильно понимаю этот момент: как только появляется конструкция типа

Code: Select all

always @*
   ...
так сразу же появляются и регистры, даже если схема чисто комбинационного типа?
я верилог плохо знаю, больше вхдл, я ж паскалист
надо пробовать и смотреть в ртлке. я так всегда делаю.
ну или плюнуть на верилог/вхдл и нарисовать схему просто
User avatar
Lavr
Supreme God
Posts: 16818
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Starting with FPGA

Post by Lavr »

Lavr wrote: 30 Oct 2025 08:05Я тогда сказал, что я руками нарисовал бы АЛУ лучше. :idea:
imsushka wrote: 30 Oct 2025 08:16и про руки - да, руками будет лучше. но лень
В общем, решил я попробовать «нарисовать» и АЛУ и процессор руками.
Пока «полёт нормальный», но один момент меня смутил, поэтому нуждаюсь в компетентной консультации…
Я втащил тактовую частоту в CPLD вот так, как на рисунке ниже. Подразумевал, что первый элемент – буфер, а CLK по сюжету мне нужна и в фазе и в противофазе.
GLOBAL primitive on-node.png
Получил ПРЕДУПРЕЖДЕНИЕ, что выше под рисунком.

Внимательно перевёл и прочитал, что же от меня хотят… Сильно понимания не обрёл, ибо мутно как-то.
ГЛОБАЛЬНЫЙ примитив на узле <имя> питает логику — может возникнуть неглобальное использование сигнала.

ПРИЧИНА: ГЛОБАЛЬНЫЙ примитив питает сложную логику.

ДЕЙСТВИЕ: Если вы планируете использовать глобальный сигнал для питания логики, то никаких действий не требуется. Если вы планируете использовать сигнал только как глобальный, то в вашем проекте есть ошибка. Чтобы устранить это предупреждение, необходимо либо удалить примитив GLOBAL, либо переместить подключение входного сигнала, питающего логику, перед примитивом GLOBAL.
Тем более, что ПРЕДУПРЕЖДЕНИЕ - вроде как и не ошибка… :-?

Но полистал Интернет на эту тему, и если я не ошибся, то вроде как всё дело вот в чём:
выход тактовой-частоты.png
Ну ладно… я изменил цепь входа CLK вот так:
GLOBAL primitive on-node2.png
И WARNINGGLOBAL primitive on node…” исчез. :o

 WARNING ИСЧЕЗ!
«Из окна дуло. Штирлиц закрыл окно, и дуло сразу исчезло!». :lol:

Что меня, собственно, беспокоит: правильно ли я разрешил эту проблему?
И что – это единственный способ затащить CLK в ПЛИС именно на удвоенной частоте от предполагаемой, или я чего-то не знаю?
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Shaos
Admin
Posts: 24605
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Как бы потихонечку освоить работу с FPGA

Post by Shaos »

Есть CPLD и FPGA с несколькими клоками - можно на них подавать на один фазу, а на другой - противофазу

А задержи на инверторах не пройдут - синтезатилка упростит их всех нафик...
User avatar
Lavr
Supreme God
Posts: 16818
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Starting with FPGA

Post by Lavr »

Shaos wrote: 21 Nov 2025 20:42А задержи на инверторах не пройдут - синтезатилка упростит их всех нафик...
Мне трудно сориентироваться, кто такая у тебя "синтезатилка" и что за "задержи на инверторах не пройдут" у неё... :-?
Если ты имел в виду "задержи" на логических элементах, то я такого не упоминал, хотя задержки имеют место быть.
Но я совсем про другое писал:
Lavr wrote: 21 Nov 2025 18:10... первый элемент – буфер, а CLK по сюжету мне нужна и в фазе и в противофазе.
Это, собственно, и получается по приведенной мной выше схеме:
GLOBAL primitive on-node3.png
Триггер на входе задержал сигнал CLK примерно на 6 нс - ну и ладно, теперь для всей схемы тактовый сигнал - CLK/2 с выхода триггера, поскольку так якобы рекомендуют.
А после инверторов - сигналы в фазе и каких либо "задержи на инверторах" я лично не наблюдаю и не ждал. :roll:

Вопрос был совсем в другом:
Lavr wrote: 21 Nov 2025 18:10Что меня, собственно, беспокоит: правильно ли я разрешил эту проблему?
Тем, что втащил CLK в ПЛИС через триггер?
Lavr wrote: 21 Nov 2025 18:10И что – это единственный способ затащить CLK в ПЛИС именно на удвоенной частоте от предполагаемой, или я чего-то не знаю?
Что, все втаскивают CLK в ПЛИС через триггер, или есть какой другой способ?
You do not have the required permissions to view the files attached to this post.
iLavr
imsushka
Maniac
Posts: 327
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Starting with FPGA

Post by imsushka »

Lavr wrote: 22 Nov 2025 08:41
Тем, что втащил CLK в ПЛИС через триггер?
Lavr wrote: 21 Nov 2025 18:10И что – это единственный способ затащить CLK в ПЛИС именно на удвоенной частоте от предполагаемой, или я чего-то не знаю?
Что, все втаскивают CLK в ПЛИС через триггер, или есть какой другой способ?
это старые плиски. там это нормально
в новых плл есть и множественный клок и сдвиги фаз и ...

работает и ладно
User avatar
Lavr
Supreme God
Posts: 16818
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Starting with FPGA

Post by Lavr »

imsushka wrote: 22 Nov 2025 08:44работает и ладно
Да оно и так и так работает... во втором случае просто нет WARNING-a.
Собственно говоря, меня больше интересует ПОЧЕМУ это так? :wink:
А подогнать любую схему под результат "работает и ладно" мне опыта хватает... :idea:
iLavr
imsushka
Maniac
Posts: 327
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Starting with FPGA

Post by imsushka »

Lavr wrote: 22 Nov 2025 09:13
imsushka wrote: 22 Nov 2025 08:44работает и ладно
Да оно и так и так работает... во втором случае просто нет WARNING-a.
Собственно говоря, меня больше интересует ПОЧЕМУ это так? :wink:
А подогнать любую схему под результат "работает и ладно" мне опыта хватает... :idea:
без варнингов - потому что синтезаторам так проще считать временые дела.
клок по плисине брошен глобально. без логики, без задержек.
выходы тригеров, с глобальным клоком, синхронны. считать проще
а когда используешь логический выход, то время посчитать проблемно.

вот и ругается
User avatar
Lavr
Supreme God
Posts: 16818
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Starting with FPGA

Post by Lavr »

imsushka wrote: 22 Nov 2025 09:52без варнингов - потому что синтезаторам так проще считать временые дела.
клок по плисине брошен глобально. без логики, без задержек.
Вот оказалось, что всё в реальности несколько иначе...
Я, значит, приделал на входе триггер, как рекомендовали всякие умные советы.
Image
От WARNING-a избавился, но зачем? :o
После компиляции в рапорте MAX+plus II мне пишет:
INFO: Signal 'CLK' chosen for auto global Clock
И прицепил 'CLK' на вывод 125, а это и есть Global Clock1 MAX3000A! :roll:
Обычно я это сам вручную назначаю, но сейчас ещё не добрался до назначения выводов.
imsushka wrote: 22 Nov 2025 09:52выходы тригеров, с глобальным клоком, синхронны. считать проще
а когда используешь логический выход, то время посчитать проблемно.
По осциллограмме как раз получается, что не синхронны... :no:
ImageВнутренний якобы "такт" сдвинут на примерно 6 нс относительно 'CLK' ... :-?

Shaos wrote: 21 Nov 2025 20:42Есть CPLD и FPGA с несколькими клоками - можно на них подавать на один фазу, а на другой - противофазу
Вот оказывается в семействе MAX3000A именно так и есть: два глобальных тактовых сигнала, которые доходят до КАЖДОЙ логической ячейки! :idea:
CLK-1.png
CLK-2.png
CLK-3.png
Значит, если мне в моём проекте нужны два тактовых сигнала - в фазе и противофазе - то мне их следует сформировать снаружи ПЛИС, скажем, тем же триггером, и подать их на Global Clock1 и Global Clock2?
А внутри ПЛИС уже синхронизировать всё от этих сигналов?

И кстати, глобальный RESET CPLD - тоже совместить с RESET-ом моего процессора внутри CPLD
? :roll:
You do not have the required permissions to view the files attached to this post.
iLavr
imsushka
Maniac
Posts: 327
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Starting with FPGA

Post by imsushka »

Lavr wrote: 24 Nov 2025 10:07
imsushka wrote: 22 Nov 2025 09:52выходы тригеров, с глобальным клоком, синхронны. считать проще
а когда используешь логический выход, то время посчитать проблемно.
По осциллограмме как раз получается, что не синхронны... :no:
ImageВнутренний якобы "такт" сдвинут на примерно 6 нс относительно 'CLK' ... :-?
синхронны. все тригеры завязанны на клок. а то что сдвинуто. так это накладные расходы на мультиплексоре.
Lavr wrote: 24 Nov 2025 10:07 Значит, если мне в моём проекте нужны два тактовых сигнала - в фазе и противофазе - то мне их следует сформировать снаружи ПЛИС, скажем, тем же триггером, и подать их на Global Clock1 и Global Clock2?
А внутри ПЛИС уже синхронизировать всё от этих сигналов?

И кстати, глобальный RESET CPLD - тоже совместить с RESET-ом моего процессора внутри CPLD [/size]? :roll:
смотря какя частота нужна. если 100мгц то формируй на улице. если 10мгц - подавай 20 и дели на двоих.

посмотри в логах - какая максимальная частота получается. если устраивает и есть соответсвующий генератор то дели

я свою фигню могу запихать в макс3000, но по частоте не прохожу.
мне надо 65мгц, а макс может только 30мгц
слишком длинные цепочки получаются
Screenshot_1.png
You do not have the required permissions to view the files attached to this post.
User avatar
Lavr
Supreme God
Posts: 16818
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Starting with FPGA

Post by Lavr »

imsushka wrote: 24 Nov 2025 10:51смотря какя частота нужна. если 100мгц то формируй на улице. если 10мгц - подавай 20 и дели на двоих.
Ну как-то я гораздо скромнее замахиваюсь... Это на тестах 100 нс период, чтобы видеть сдвиги по 5...6 нс.
Так-то я планирую процессор на 2 МГц - в оригинале на ТТЛ-рассыпухе он был под эту частоту рассчитан.

Но всё же непонятно - зачем делить частоту внутри ПЛИС?
Если снаружи 2 глобальных тактовых входа специально протянуты до каждой ячейки? :roll:
iLavr
User avatar
Shaos
Admin
Posts: 24605
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Starting with FPGA

Post by Shaos »

Lavr wrote: 24 Nov 2025 10:07
imsushka wrote: 22 Nov 2025 09:52выходы тригеров, с глобальным клоком, синхронны. считать проще
а когда используешь логический выход, то время посчитать проблемно.
По осциллограмме как раз получается, что не синхронны...

Внутренний якобы "такт" сдвинут на примерно 6 нс относительно 'CLK' ... :-?
Ну потому что у тебя глобальный только до триггера, а внутренний «якобы такт» это уже и не клок вовсе, а «логика»…
User avatar
Lavr
Supreme God
Posts: 16818
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Starting with FPGA

Post by Lavr »

Shaos wrote: 24 Nov 2025 14:25Ну потому что у тебя глобальный только до триггера, а внутренний «якобы такт» это уже и не клок вовсе, а «логика»…
Нет... не «логика», а триггер всё же. Если «логика», то триггер обходят.

Image
Image
iLavr
imsushka
Maniac
Posts: 327
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Starting with FPGA

Post by imsushka »

Lavr wrote: 24 Nov 2025 11:04
Ну как-то я гораздо скромнее замахиваюсь... Это на тестах 100 нс период, чтобы видеть сдвиги по 5...6 нс.
Так-то я планирую процессор на 2 МГц - в оригинале на ТТЛ-рассыпухе он был под эту частоту рассчитан.

Но всё же непонятно - зачем делить частоту внутри ПЛИС?
Если снаружи 2 глобальных тактовых входа специально протянуты до каждой ячейки? :roll:
а зачем тогда плис? делай все на логике.

если уже есть плисина, то ее надо по максимуму загрузить
User avatar
Shaos
Admin
Posts: 24605
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Starting with FPGA

Post by Shaos »

Lavr wrote: 24 Nov 2025 17:29
Shaos wrote: 24 Nov 2025 14:25Ну потому что у тебя глобальный только до триггера, а внутренний «якобы такт» это уже и не клок вовсе, а «логика»…
Нет... не «логика», а триггер всё же...
Логика после триггера :lol:
imsushka
Maniac
Posts: 327
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Starting with FPGA

Post by imsushka »

Shaos wrote: 24 Nov 2025 22:16
Lavr wrote: 24 Nov 2025 17:29
Shaos wrote: 24 Nov 2025 14:25Ну потому что у тебя глобальный только до триггера, а внутренний «якобы такт» это уже и не клок вовсе, а «логика»…
Нет... не «логика», а триггер всё же...
Логика после триггера :lol:
и логика до тригера

тригер с глобальным клоком все синхронизирует