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

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

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24637
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

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

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

Image

А кстати там нету примитивов чтоли где бы у триггера были бы и Q, и /Q?
imsushka
Maniac
Posts: 331
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

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

Post by imsushka »

Shaos wrote: 25 Nov 2025 16:04
У него глобальный только до первого триггера

А кстати там нету примитивов чтоли где бы у триггера были бы и Q, и /Q?
глобальный на то и глобальный что по всей микрухе

нет, такого нету в старых максах

кстати, если использовать свой клок, то он жрет дополнительные ресурсы
и если его использовать повсеместно, то растут задержки
User avatar
Lavr
Supreme God
Posts: 16855
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Starting with FPGA

Post by Lavr »

Shaos wrote: 24 Nov 2025 14:25Ну потому что у тебя глобальный только до триггера, а внутренний «якобы такт» это уже и не клок вовсе, а «логика»…
По "букварям" на ПЛИС сигнал после триггера, тактируемого глобальным тактом с точки зрения ПЛИС как раз-таки синхронный в рамках того, что подразумевается концепцией "синхронный дизайн".

К примеру, если бы я собрался моделировать в ПЛИС i8080 и начал бы с тактового генератора:
GC1C21.png
В ПЛИС я бы его собрал примерно вот так:
GC1C2_2.png
Я подписал на схеме, что считается синхронным с точки зрения ПЛИС семейства MAX 3000A.
У них глобальные CLK1 и CLK2 (как и глобальный RESET) достигают каждой ячейки кратчайшим путём,
но соединяться должны только с входами C триггеров.

Ну и осциллограмма показывает, что это действительно так: сигналы, "привязанные" к GCLK1 - синхронны.
GC1C2T1.png
(Я не заостряю сейчас вопрос, что с точки зрения тактирования i8080 они хуже, нежели C1 и C2.) :wink:

Но если GCLK1 подать на любой LUT на вход комбинационной логики, то он перестаёт быть глобальным тактом.
О чём меня и предупредили, хотя я не собирался цеплять свой CLK на вывод GCLK1... :no:
Image
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16855
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Starting with FPGA

Post by Lavr »

Lavr wrote: 30 Nov 2025 18:41 По "букварям" на ПЛИС ...
По "букварям" на ПЛИС синхронный дизайн они рекомендуют делать вот так:
GCLK1.png
Что я и попытался конкретно проиллюстрировать на примере выше.

Если что, "букварь" у меня называется вот так:
Intel® Quartus® Prime Standard Edition User Guide Design Recommendations
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16855
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Starting with FPGA

Post by Lavr »

Lavr wrote: 24 Nov 2025 17:29
Shaos wrote: 24 Nov 2025 14:25Ну потому что у тебя глобальный только до триггера, а внутренний «якобы такт» это уже и не клок вовсе, а «логика»…
Нет... не «логика», а триггер всё же...
После триггера - этот сигнал всё ещё считается привязанным к глобальной синхронизации ПЛИС.
Этот "синхронный дизайн" ПЛИС как раз обеспечивает.

А вот на дальнейшую собственную синхронизацию полагаться нельзя! Её механизмы ПЛИС не гарантируют!
То есть после каждого блока с собственной синхронизацией следует осуществить привязку к глобальной синхронизации ПЛИС.

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

Image

Но я вознамерился всё запихать в ПЛИС, оставив снаружи лишь кнопки и индикатор.

Вот тут и произошло то, о чём предупреждают в мануалах и "букваре": с увеличением размера проекта планировщику становится всё труднее осуществлять кратчайшие соединения и может возникнуть непредсказуемая ошибка.

Когда у меня заполнение ПЛИС сильно превысило 80% эта непредсказуемая ошибка сразу же и возникла в виде асинхронных сбоев и глитчей.
TEST-2.png
А в обоих случаях выполняются одни и те же 16 байт программы:

Code: Select all

   MVA  5
   MVB  3
   ADD
   SEL  15
   STA
   LDB
   LDB
   LDB
   MVA  15
   MVA  14
   MVA  13
   MVA  12
   MVA  11
   MVA  10
   CMC
   CMC
  
Особенности аппаратного исполнения этого кода меня беспокоили при просмотре симуляции схемы ПЛИС...

Что говорит "букварь"? Если это случилось, Вам необходимо изменить свою схему, чтобы она более корректно "привязывалась" к глобальной синхронизации ПЛИС.
Да, Ваша схема может увеличиться в объёме! Но корректный результат гарантирован в таком случае.

Вот сижу и думаю, чем пожертвовать, чтобы выполнить эти вполне справедливые требования. :-?
You do not have the required permissions to view the files attached to this post.
iLavr