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

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

Moderator: Shaos

Post Reply
User avatar
Shaos
Admin
Posts: 24858
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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

Post by Shaos »

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

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

Image

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

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

Post by imsushka »

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

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

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

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

Re: Starting with FPGA

Post by Lavr »

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

К примеру, если бы я собрался моделировать в ПЛИС i8080 и начал бы с тактового генератора:

GC1C21.png
GC1C21.png (13.67 KiB) Viewed 520 times

В ПЛИС я бы его собрал примерно вот так:

GC1C2_2.png
GC1C2_2.png (26.17 KiB) Viewed 520 times

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

Ну и осциллограмма показывает, что это действительно так: сигналы, "привязанные" к GCLK1 - синхронны.

GC1C2T1.png
GC1C2T1.png (12.37 KiB) Viewed 520 times

(Я не заостряю сейчас вопрос, что с точки зрения тактирования i8080 они хуже, нежели C1 и C2.) :wink:

Но если GCLK1 подать на любой LUT на вход комбинационной логики, то он перестаёт быть глобальным тактом.
О чём меня и предупредили, хотя я не собирался цеплять свой CLK на вывод GCLK1... :no:
Image
iLavr
User avatar
Lavr
Supreme God
Posts: 16858
Joined: 21 Oct 2009 15:08
Location: Россия

Re: Starting with FPGA

Post by Lavr »

Lavr wrote: 01 Dec 2025 01:41 По "букварям" на ПЛИС ...
По "букварям" на ПЛИС синхронный дизайн они рекомендуют делать вот так:

GCLK1.png
GCLK1.png (12.67 KiB) Viewed 519 times

Что я и попытался конкретно проиллюстрировать на примере выше.

Если что, "букварь" у меня называется вот так:
Intel® Quartus® Prime Standard Edition User Guide Design Recommendations
iLavr
User avatar
Lavr
Supreme God
Posts: 16858
Joined: 21 Oct 2009 15:08
Location: Россия

Re: Starting with FPGA

Post by Lavr »

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

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

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

Image

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

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

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

TEST-2.png
TEST-2.png (14.35 KiB) Viewed 436 times

А в обоих случаях выполняются одни и те же 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
  
Особенности аппаратного исполнения этого кода меня беспокоили при просмотре симуляции схемы ПЛИС...

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

Вот сижу и думаю, чем пожертвовать, чтобы выполнить эти вполне справедливые требования. :-?
iLavr
Post Reply