Перейти к содержанию
    

Сквозное прохождение сигнала через два триггера

Доброго времени суток.

Цифровой схемотехникой и темой ПЛИС занимаюсь не так давно, поэтому прошу знающих людей пояснить следующую ситуацию.

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

always @(posedge clk) begin
    z <= y;
    y <= x;end

может ли при разводке возникнуть ситуация, когда новые данные на вход второго триггера придут раньше, чем клок на второй триггер, т. е. новые данные появятся на выходе второго триггера не по второму фронту, как ожидаем, а по первому? Или же трассировщик не допустит такой ситуации?

 

Аналогичный вопрос для другого примера:

always @(posedge clk) 
   case (state)
       ...
       1: begin
           z <= in1 + in2;
           state <= 2;
       end

       2: begin
           z <= in1 - in2;
           state <= 3;
       end
       ...
   endcase

Если этот код синтезируется в следующую конструкцию, то допустима ли ситуация, когда состояние автомата успеет измениться и пройти через логику на вход триггера до прихода того же самого фронта клока на этот триггер?

5a44a9be5ecb.png

Изменено пользователем des00

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Трассировщик будет стараться сделать так, чтобы данные на выходе второго триггера появились по второму фронту тактового сигнала. От Вас требуется правильно задать временные ограничения (Timing Constraints). Стоит заметить, что если входной сигнал схемы тактируется не от clk и находится в другом частотном домене, то первый триггер может захватить не те данные, которые ожидаете Вы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно ли я понимаю, если оба триггера тактируются от одного источника, достаточно будет задать только период для клока (create_clock -period 20.0 [get_ports clk])? Входной порт данных пока в расчет не беру, полагаем, что на первый триггер данные приходят во время.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно ли я понимаю, если оба триггера тактируются от одного источника, достаточно будет задать только период для клока (create_clock -period 20.0 [get_ports clk])? Входной порт данных пока в расчет не беру, полагаем, что на первый триггер данные приходят во время.

в принципе, да

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если входные сигналы принадлежат другому клоку , может возникнуть метастабильность, поэтому

лучше удалить логику между 1 и 2 триггером

post-11121-1428474896_thumb.jpg

quartusii_handbook 14.1 стр 810

А еще лучше "привести" сигналы к единой тактовой , и только затем добавлять логику

Если входные сигналы уже были "регистрированы" вашей clk и схема работает на clk , тогда всё должно быть нормально (конечно если тайминг анализ не ругается)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...