реклама на сайте
подробности

 
 
6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Синхронизатор, Две тактовые, единичные импульсы
Boris_TS
сообщение Apr 10 2011, 11:46
Сообщение #16


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Тут как-то совсем не прозвучало в исходном задании - являются ли исходные clock (100М и 50М) связанными - т.е. понимает ли среда при Place&Route какие соотношения между этими частотами или это асинхронные тактовые частоты ?

Если есть асинхронщина, то будет и пара триггеров (метастабильный -> стабильный). Для достижения максимальной устойчивости работы проекта, как минимум, необходимо сделать так, чтобы линия данных между этими двумя триггерами была минимальной длины. А вот как это добиться уже зависит от конкретной ПЛИС (кстати, название среды разработки и семейство ПЛИС как-то тоже не были озвучены)...
Go to the top of the page
 
+Quote Post
AlphaMil
сообщение Apr 10 2011, 17:17
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 1-01-10
Из: Минск, Беларусь
Пользователь №: 54 588



Да, частоты зависимы и генерируются от одного клока. Сейчас использую S3 и ISE 12.4. Среда понимает соотношение частот. Так может все было зря?
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Apr 10 2011, 17:28
Сообщение #18


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(AlphaMil @ Apr 10 2011, 20:17) *
Да, частоты зависимы и генерируются от одного клока.
Сейчас использую S3 и ISE 12.4. Среда понимает соотношение частот.

Это хорошо, что от одного генератора. Теперь остаётся уточнить, как Вы получали эти частоты: при помощи DLL ? Хорошо бы схемку (ну или HDL описание) глянуть этого места.

Если всё сделать правильно, то и метастабильности не будет - а значит, всё будет тривиально (как функционально моделируется - так и работает,.. если, конечно all constraints are met).
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 10 2011, 18:07
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(AlphaMil @ Apr 10 2011, 20:17) *
Да, частоты зависимы и генерируются от одного клока.


Тицце и Шенк на этот счет

Код
module in_out_flag
(
input  in_flag,
input  out_clk,
output ena_out_flag
);

reg          dff_a = 1'b0;
reg [1:0] shift_rg = 2'b00;

always @(posedge out_clk or posedge in_flag)
begin
if(in_flag)            dff_a <= 1'b1;
else                dff_a <= 1'b0;
end

always @(posedge out_clk)
begin
shift_rg <= {shift_rg[0], dff_a};
end

assign ena_out_flag = ~shift_rg[1] && shift_rg[0];

endmodule

Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 10 2011, 18:54
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(sazh @ Apr 10 2011, 22:07) *
Код
if(in_flag)            dff_a <= 1'b1;
else                dff_a <= 1'b0;
end


В Верилоге нельзя написать проще?

Код
dff_a <= in_flag;


Кстати, не стоит бездумно доверять даже Т-Ш.
Его схема расширения импульсов с двумя триггерами хороша, но первый триггер тем не менее может порождать переход dff_a с нарушением сетапа выходного триггера, соответственно второй триггер может попасть в метастабильность, о чем Т-Ш забыли упомянуть. Соответственно, чтобы избежать риска метастабильности ena_out_flag, вам нужно добавить в сдвиговый регистр на вход еще один триггер, реализовав нормальный синхронизатор.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 10 2011, 19:17
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(Oldring @ Apr 10 2011, 21:54) *
Код
dff_a <= in_flag;


always @(posedge out_clk or posedge in_flag)


Это описание d триггера с асинхронной установкой в единицу.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 10 2011, 19:28
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(sazh @ Apr 10 2011, 23:17) *
always @(posedge out_clk or posedge in_flag)


Это описание d триггера с асинхронной установкой в единицу.


Я понял. И что, это описание приводит к необходимости писать if?


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 10 2011, 19:41
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(Oldring @ Apr 10 2011, 22:28) *
Я понял. И что, это описание приводит к необходимости писать if?


Да, в верилоге есть некая неистественность при описании асинхронной установки.
Но VHDL еще более неистественнен
process (C, CLR)
begin
if (CLR = ’1’)then
Q <= ’0’;
elsif (C’event and C=’0’)then
Q <= D;
end if;

Тот же if при описании асинхронной установки.
И еще круче if при описании фронта клока, да еще с закрытием end if
Фронт клока - это фронт клока, а не приоритетность в описании
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 10 2011, 19:47
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(sazh @ Apr 10 2011, 23:41) *
Да, в верилоге есть некая неистественность при описании асинхронной установки.
Но VHDL еще более неистественнен
process (C, CLR)
begin
if (CLR = ’1’)then
Q <= ’0’;
elsif (C’event and C=’0’)then
Q <= D;
end if;

Тот же if при описании асинхронной установки.
И еще круче if при описании фронта клока, да еще с закрытием end if
Фронт клока - это фронт клока, а не приоритетность в описании


Еще раз спрощу. в вашем коде if просто копирует один сигнал в другой. Неужели он необходим чтобы синтезатор синтезировал триггер с асинхронным сбросом?

в VHDL есть стандартные функции rising_edge, falling_edge, для приведения описания к "более естественному" if falling_edge( C ) then ... end if;
Необходимость писать end if - это хорошо.

Вы не упустили моё дополнение про ошибку в вашем коде?


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 10 2011, 19:50
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(Oldring @ Apr 10 2011, 22:47) *
в вашем коде просто копирует один сигнал в другой.


Я реализовал схему из учебника. Эта схема отрабатывает импульс любой длительности в импульс длительностью нужного периода. Что и хотел иметь вопрошающий.
Все.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Apr 10 2011, 19:51
Сообщение #26


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(sazh @ Apr 10 2011, 22:41) *
Да, в верилоге есть некая неистественность при описании асинхронной установки.
Но VHDL еще более неистественнен
process (C, CLR)
begin
if (CLR = '1')then
Q <= '0';
elsif (C'event and C='0')then
Q <= D;
end if;

Тот же if при описании асинхронной установки.
И еще круче if при описании фронта клока, да еще с закрытием end if
Фронт клока - это фронт клока, а не приоритетность в описании


Ничего неестественного не вижу... если конечно Вы знаете, что c if... elsif порождаются приоритетные конструкции.
Т.е. получается если активен CLR, то все равно какое значение имеет C
и тригер будет установлен в 0, что и является асинхронным сбросом. А дальше, если CLR не равен 1 смотрится - произошло-ли событие на С.

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

P.S.

Кстати, end if относится ко всей конструкции if... elsif,а не только к elsif.
rolleyes.gif


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 10 2011, 19:57
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(Victor® @ Apr 10 2011, 22:51) *
Все четко и прозрачно, и честно говоря не понятно, что вызывает недоумение.


Да все прозрачно. Мне все равно, на каком языке читать.
Я подумал, что это наезд на верилог со стороны ярого сторонника VHDL.
А это он меня оказывается в ошибке уличил.
Смешно.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 10 2011, 20:01
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(sazh @ Apr 10 2011, 23:50) *
Я реализовал схему из учебника. Эта схема отрабатывает импульс любой длительности в импульс длительность нужного периода.
Все.


С риском метастабильности на выходе. Да, посмотрел еще раз в Т-Ш, и так как эта потенциально метастабильная схема растяжения импульса из двух триггеров описана у них в пункте "синхронизация импульсов" как усовершенствование обычного двухтриггерного синхронизатора, можно прийти к выводу, что Т-Ш не "забыли упомянуть про риск метастабильности", а на самом деле его не заметили.

В общем, еще раз повторю. Не стоит бездумно доверять учебникам.

Цитата(sazh @ Apr 10 2011, 23:57) *
Я подумал, что это наезд на верилог со стороны ярого сторонника VHDL.
А это он меня оказывается в ошибке уличил.
Смешно.


И в ошибке тоже уличил laughing.gif
А наезд был несерьезным. Понятно, что можно написать там и без if, и синтезатор наверняка поймет правильно.
Хотелось узнать причину использования вами такой конструкции.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 10 2011, 20:02
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(Oldring @ Apr 10 2011, 22:58) *
С риском метастабильности на выходе.


Да творчески я к их схеме подошел. О какой метастабильности речь идет, там 3 триггера на одном клоке сидят.
Да плюс к этому клоки порождаются одним модулем.
Эта ничуть не хуже уже предложенным. Вот и все.
Про ошибку не понял.
Пожалуста, приведите свой вариант исполнения. Я постараюсь понять.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 10 2011, 20:08
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(sazh @ Apr 11 2011, 00:02) *
Да творчески я к их схеме подошел. О какой метастабильности речь идет, там 3 триггера на одном клоке сидят.
Да плюс к этому клоки порождаются одним модулем.
Эта ничуть не хуже уже предложенным. Вот и все.


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

Я уже предложил добавить на вход вашего сдвигового регистра еще один триггер, чтобы породить там стандартный синхронизатор.

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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 09:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01514 секунд с 7
ELECTRONIX ©2004-2016