Jump to content
    

Тактирование схем производным сигналом

Слушайте, а вот такое дело.

Я сейчас делаю так, что сигнал CLK_EN генерится по одному фронту (например, в том же FSM по заднему), а триггеры, в которые он заходит, работают по передним. Я точно знаю, что к моменту прихода переднего фронта в триггер на входе CLK_EN уже будет нужное состояние.

 

Это правильный путь? Или у меня какие то отсталые представления? Если CLK_EN выставляется по переднему фронту и сам триггер срабатывает по переднему, то возникает неконтролируемая гонка сигналов, не?

Share this post


Link to post
Share on other sites

Если CLK_EN выставляется по переднему фронту и сам триггер срабатывает по переднему, то возникает неконтролируемая гонка сигналов, не?

ПЛИС и САПР, поддерживающие их ориентированы именно на такую организацию передачи управляющих сигналов(не исключая иное).

Фиксируя управляющий сигнал по срезу и обрабатывая его по фронту вы фактически в 2 раза сокращаете время на обработку этого сигнала.

"Чистая" синхронная схема не требует "ручной" проверки и подгонки - достаточно видеть в отчете, что уложились в заданные ограничения.

Создавая асинхронные и псевдосинхронные схемы вы повышаете вероятность того, что что-то не учтете, либо при переносе блока в другой проект он перестанет работать.

Share this post


Link to post
Share on other sites

...

Это правильный путь? Или у меня какие то отсталые представления? Если CLK_EN выставляется по переднему фронту и сам триггер срабатывает по переднему, то возникает неконтролируемая гонка сигналов, не?

 

первый путь неправильный,

во втором случае гонок не будет

 

+500 vetal

Share this post


Link to post
Share on other sites

Можно здесь несколько поподробней? А конкретно о триггере для переброса данных с одного клока на другой? Когда ставится, чем тактируется, было бы замечательно если бы Вы привели небольшой пример (можно фрагмент на verilog). Спасибо!

пользуйтесь поиском. тема, только на моей памяти, обсуждалась раз 20 %)

Share this post


Link to post
Share on other sites

Тогда я не совсем понял.

У меня на вход триггера поступает сигнал, формируемый по переднему фроанту, сигнал разрешающий его чтение и сам триггер срабатывает по переднему фронту

 

if (clk'event and clk='1') then
INPUT<='1';
CLK_EN<='1;

if (clk'event and clk='1') then
if (clk_en='1') then
OUTPUT<=INPUT;

 

И все сработает правильно, на выходе OUTPUT в тот же момент появится единица?

 

И еще тогда посоветуйте где прочитать про это? В учебника по VHDL и Synthethis Guide's рассматриваются только отдельные модули, а вот про то как правильно тактировать схемы не встречал.

Share this post


Link to post
Share on other sites

И все сработает правильно, на выходе OUTPUT в тот же момент появится единица?

После первого такта в единицу встанут сигналы INPUT и CLK_EN, и уже после второго такта сработает OUTPUT<=INPUT

Share this post


Link to post
Share on other sites

if (clk'event and clk='1') then
INPUT<='1';
CLK_EN<='1;

if (clk'event and clk='1') then
if (clk_en='1') then
OUTPUT<=INPUT;

Я правильно понимаю, что в момент 2 управляемый триггер переключится, так как на его входах состояние CLK_EN='1' и INPUT='1' и на выходе появится '1'?

Drawing1.png

Share this post


Link to post
Share on other sites

Я правильно понимаю, что в момент 2 управляемый триггер переключится, так как на его входах состояние CLK_EN='1' и INPUT='1' и на выходе появится '1'?

Да, так и будет. Запустите симулятор - он вам все покажет.

Share this post


Link to post
Share on other sites

А посоветуйте чего нибудь толкового по продвинутому дизайну на ПЛИС. где были бы рассмотрены подобные вопросы? Advanced FPGA design уже смотрел

А то у меня их много. А что если CLK_EN еще переключает мультиплексор, который может на вход подать 2 разных сигнала. Тогда успеет переключиться?

Share this post


Link to post
Share on other sites

А посоветуйте чего нибудь толкового по продвинутому дизайну на ПЛИС. где были бы рассмотрены подобные вопросы? Advanced FPGA design уже смотрел

А то у меня их много. А что если CLK_EN еще переключает мультиплексор, который может на вход подать 2 разных сигнала. Тогда успеет переключиться?

Тут надо по цифровой смехотехнике книги читать - типа "триггеры для чайников" или "создание конечных автоматов своими руками" :)

 

Ежу же понятно, что сигнал на выходе триггера появляется с небольшой задержкой относительно клока, нормированной в даташите (читайте про конечность скорости света, неисчерпаемость электрона и время переключения КР1533ТМ2).

 

И если клок на все триггеры приходит в одно и то же время, то в момент времени "1" сигнал CLK_EN ещё не будет иметь высокий логический уровень.

 

Зато в момент времени "2" CLK_EN будет иметь высокий лог.уровень и не успеет ещё переключится в ноль.

Share this post


Link to post
Share on other sites

Ох, ну специально же написал,что спрашиваю про книги уровня повыше "знакомимся с VHDL"

Базовые вещи уже многократно прочитаны.

 

Создание конечных автоматов никаких вопросов не вызывает, ага? Вызывает вопрос взаимодействие двух конечных автоматов.

Про время задержки вы мне прямо глаза открыли. Я думал свет распространяется мгновенно и даже от Москвы до Жмеринки пролетает мгновенно.

Share this post


Link to post
Share on other sites

А посоветуйте чего нибудь толкового по продвинутому дизайну на ПЛИС. где были бы рассмотрены подобные вопросы? Advanced FPGA design уже смотрел

А то у меня их много. А что если CLK_EN еще переключает мультиплексор, который может на вход подать 2 разных сигнала. Тогда успеет переключиться?

Книжку не посоветую, но в любом случае у триггера, тактируемого CLK есть времена предустановки и удержания. То есть комбинаторный сигнал на входе D должен быть стабилен до (предустановка) и после (удержание). Обычно комбинаторные схемы более инерционны, чем триггеры и можно спокойно менять сигнал на их входе, поскольку время удержания будет превышено. А вот время срабатывания комбинаторной схемы и время предустановки триггеров и определят максимальную рабочую частоту Вашего проекта.

 

Если Ваши конечные автоматы тактируются одним или синхронным клоком, то этого достаточно для анализа задержек.

Share this post


Link to post
Share on other sites

Ох, ну специально же написал,что спрашиваю про книги уровня повыше "знакомимся с VHDL"

Базовые вещи уже многократно прочитаны.

 

Создание конечных автоматов никаких вопросов не вызывает, ага? Вызывает вопрос взаимодействие двух конечных автоматов.

Про время задержки вы мне прямо глаза открыли. Я думал свет распространяется мгновенно и даже от Москвы до Жмеринки пролетает мгновенно.

 

VHDL тут совершенно не причём.

А ваш вопрос про "неконтролируемые гонки сигналов" - это как раз к базовым вещам и относится. Без понимания того как работает схема из двух одновременно тактируемых триггеров с некоторой логикой между ними ничего серьёзнее новогодней гирлянды на FPGA не сделать. А если и сделать, то с бубном.

Share this post


Link to post
Share on other sites

Вызывает вопрос взаимодействие двух конечных автоматов.

Про время задержки вы мне прямо глаза открыли.

 

Тут все просто. Что есть такие временнные параметры setup и hold Вам уже написали. Они присущи любому триггеру в ПЛИС. Но при дизайне на время забудьте о них и считайте, что любой триггер с приходом клока защелкивает то что было на входе, т.е. устаканившееся состояние в конце предыдущего такта. Если же что-то неуспевает установиться за такт, то об этом Вам скажет таймквест. Но есть исключения - работа с внешним миром, когда таймквест не знает время распространения сигнала вне плис. Эту информацию Вы даете ему с помощью констрейнов.

 

 

 

Share this post


Link to post
Share on other sites

Книжку не посоветую, но в любом случае у триггера, тактируемого CLK есть времена предустановки и удержания. То есть комбинаторный сигнал на входе D должен быть стабилен до (предустановка) и после (удержание)

Обычно комбинаторные схемы более инерционны, чем триггеры и можно спокойно менять сигнал на их входе, поскольку время удержания будет превышено

barabek,Tiro Спасибо за ответы и прояснение ситуации

 

Про инертность и время установки я понимаю и именно поэтому я делал свои схемы по принципам озвученным выше - сигналы CLK_EN и INP на входе триггера устанавливались по переднему фронту и я предполагал, что к заднему фронту они как раз установятся в постоянное состояние и триггер защелкнет то, что надо. То есть когда я рисовал временные диаграммы на бумажке, я делал их так, чтобы в момент переключения на входах все было постоянно и ничего не переключалось.

Вот я как раз полагал, что эта интертность может быть непостоянна и привести к ошибкам, когда один триггер защелкнет состояние на прошлом такте, а другой защелкнет то, что уже успело установиться на предшествующем ему. Но я был не прав и можно считать, что состояние на выходе "защелкнется" быстрее, чем установится новое на входе? А если нет, то Time Analyzer сообщит мне об этом?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...