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

 
 
> Синхронизатор, Две тактовые, единичные импульсы
AlphaMil
сообщение Apr 7 2011, 13:19
Сообщение #1


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

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



Гуру, подскажите, как правильно сделать:
есть одиночный импульс синхронный 100МГц, он должен породить одиночный импульс на 50МГц.
Весь проект нет смысла переводить на повышенную частоту.
Go to the top of the page
 
+Quote Post
6 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 82)
Мур
сообщение Apr 7 2011, 13:33
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(AlphaMil @ Apr 7 2011, 17:19) *
Гуру, подскажите, как правильно сделать:
есть одиночный импульс синхронный 100МГц, он должен породить одиночный импульс на 50МГц.
Весь проект нет смысла переводить на повышенную частоту.

На рисунке 8 в статье разгадка
А это базовый синхронизатор оттуда.
CODE

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity syn is
port(
clk : in STD_LOGIC;
in_level : in STD_LOGIC;
reset : in STD_LOGIC;
imp : out STD_LOGIC
);
end syn;
architecture syn_body of syn is
signal qqq : STD_LOGIC;
signal ddd : STD_LOGIC;
begin
tg: process (clk)
begin
if clk'event and clk = '1' then
if reset='1' then
qqq <= '0';
ddd <= '0';
else
qqq <= ddd;
ddd <= in_level;
end if;
end if;
end process;
imp <= ddd xor qqq;
end syn_body;

На входе in_level любая смена уровня порождает импульс привязанный к другой частоте.
На элементе xor (для этого in_level ) сделаете смену уровня на обратный по вновь поступающему импульсу....
В конце рабочего дня бдительность потерял. Тут просто Т-триггер(делитель)! Усталость... Извините!

Сообщение отредактировал Мур - Apr 7 2011, 16:23
Прикрепленные файлы
Прикрепленный файл  2009_02_102.pdf ( 248.04 килобайт ) Кол-во скачиваний: 1524
 
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 7 2011, 14:25
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 AlphaMil
поищите по форуму - тут SM выкладывал как раз такой дизайн который вам нужен - там 3(4?) тригера и 1 лут вроде в минимальной комплектации..
Go to the top of the page
 
+Quote Post
AndrewS6
сообщение Apr 7 2011, 14:35
Сообщение #4


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

Группа: Участник
Сообщений: 125
Регистрация: 9-10-05
Из: С.-Петербург
Пользователь №: 9 418



http://www.fpga4fun.com/CrossClockDomain2.html
Go to the top of the page
 
+Quote Post
AlphaMil
сообщение Apr 7 2011, 14:41
Сообщение #5


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

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



2 AndrewS6 и всем остальным спасибо очень интересное решение.
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 7 2011, 16:25
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Kuzmi4 @ Apr 7 2011, 18:25) *
2 AlphaMil
поищите по форуму - тут SM выкладывал как раз такой дизайн который вам нужен - там 3(4?) тригера и 1 лут вроде в минимальной комплектации..

"Мой" вариант с таким же ресурсом! ...Если глянуть внимательно....
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 7 2011, 17:02
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Мур
Если взглянуть внимательнее ваш HDL модуль вообще один клок имеет biggrin.gif

А если мне не изменяет маразм то минимальная комплектация модуля от SM: 1 тригер на clkA, 3 тригера на clkB и 1 лут
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 7 2011, 17:36
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Kuzmi4 @ Apr 7 2011, 21:02) *
2 Мур
Если взглянуть внимательнее ваш HDL модуль вообще один клок имеет biggrin.gif

А если мне не изменяет маразм то минимальная комплектация модуля от SM: 1 тригер на clkA, 3 тригера на clkB и 1 лут

Вы не внимательны. HDL фрагмент только выходная часть базового синхронизатора. Вход(Т-триггер) на другой частоте. Его тут нет. А что его тут писать,-один триггер на входе?
Ещё раз - Рис 8.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 9 2011, 10:44
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Мур
посмотрел статейку и рисунок - слямзено с EDN, July 24, 2003.
Но суть в другом - не будет эта реализация работать для произвольных клоковых доменов. Там есчё handshake логику нужно добавлять wink.gif чтоб честно работало...
Go to the top of the page
 
+Quote Post
Ethereal
сообщение Apr 9 2011, 11:23
Сообщение #10


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

Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354



Цитата(Kuzmi4 @ Apr 9 2011, 14:44) *
2 Мур
посмотрел статейку и рисунок - слямзено с EDN, July 24, 2003.
Но суть в другом - не будет эта реализация работать для произвольных клоковых доменов. Там есчё handshake логику нужно добавлять wink.gif чтоб честно работало...

Имхо, для произвольных доменов будет. Там единственное условие, что частота запускающих импульсов в первом домене должна быть не больше, чем тактовая в принимающем.


--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 9 2011, 11:32
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Цитата(Ethereal @ Apr 9 2011, 14:23) *
....единственное условие....

Вот вот.. cool.gif
Go to the top of the page
 
+Quote Post
Ethereal
сообщение Apr 9 2011, 11:39
Сообщение #12


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

Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354



Цитата(Kuzmi4 @ Apr 9 2011, 15:32) *
Вот вот.. cool.gif

Ну, с хендшейком в этом случае оно тоже может не работать. Либо из двух импульсов на входе получится один на выходе, либо придется Ack тянуть в генератор.
А дальше зависит от исходной задачи. Можно там задержать генерацию импульса или нет )

Сообщение отредактировал Ethereal - Apr 9 2011, 11:40


--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 9 2011, 11:50
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Ethereal
я собственно это к чему, случался дизайн в которых клоковый домен А мог работать как на большей так и на меньшей скорости чем домен Б (задавалось конфигом). В таких случаях лучше иметь универсальную схему, которая будет передавать 1clk импульс из А в Б, а не исходить из того, что у кого то тактовая меньше а у кого то больше..
Go to the top of the page
 
+Quote Post
Ethereal
сообщение Apr 9 2011, 12:44
Сообщение #14


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

Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354



Цитата(Kuzmi4 @ Apr 9 2011, 15:50) *
2 Ethereal
я собственно это к чему, бывали дизайны в которых клоковый домен А мог работать как на большей так и на меньшей скорости чем домен Б (задавалось конфигом). В таких случаях лучше иметь универсальную схему, которая будет передавать 1clk импульс из А в Б.

Если это про тактовые, то дизайн работает при clkA<clbB, при clkA>clkB, при clkA=clkB. 1 1clk импульс передается в любую сторону.

Сообщение отредактировал Ethereal - Apr 9 2011, 13:04


--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 9 2011, 13:13
Сообщение #15


Гуру
******

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



Цитата(Kuzmi4 @ Apr 9 2011, 14:50) *
В таких случаях лучше иметь универсальную схему


Так у Тицца и Шенка еще 20 лет назад нарисовано.
И входного клока не надо.
Go to the top of the page
 
+Quote Post
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
sazh
сообщение Apr 10 2011, 20:16
Сообщение #31


Гуру
******

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



Цитата(Oldring @ Apr 10 2011, 23:08) *
Я уже предложил добавить на вход вашего сдвигового регистра еще один триггер, чтобы породить там стандартный синхронизатор.


Добавим.
Код
module in_out_flag
(
input  in_flag,
input  out_clk,
output ena_out_flag
);

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

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[1:0], dff_a};
end

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

endmodule
Go to the top of the page
 
+Quote Post
Ethereal
сообщение Apr 10 2011, 20:17
Сообщение #32


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

Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354



Цитата(Oldring @ Apr 11 2011, 00:01) *
Понятно, что можно написать там и без if, и синтезатор наверняка поймет правильно.
Хотелось узнать причину использования вами такой конструкции.

Не поймет. Квартусовский, например, на такие конструкции ругается.

Прикрепленное изображение

Сообщение отредактировал Ethereal - Apr 10 2011, 20:23


--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 10 2011, 20:21
Сообщение #33


Гуру
******

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



Цитата(Ethereal @ Apr 11 2011, 00:17) *
Не поймет. Квартусовский, например, на такие конструкции ругается.


Значит, я был лучшего мнения о вашем кактусе.

И про верилог я могу сказать только "фи". Описание асинхронного сброса через posedge in_flag - это экономия за счет естественности описания. В VHDL, конечно, требуются отдельно описывать списки чувствительности процесса, что иногда напрягает, но необходимо для симуляции, но сама логика с разделенными асинхронными и синхронной ветками if гораздо прозрачнее получается.


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


Гуру
******

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



Цитата(Oldring @ Apr 10 2011, 23:21) *
Значит, я был лучшего мнения о вашем кактусе.


А причем тут квартус. Это конструкция рекомендована xst.pdf. И моделсим не против.
Приведите свой пример. Достойный ваших знаний.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 10 2011, 20:49
Сообщение #35


Гуру
******

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



Цитата(sazh @ Apr 11 2011, 00:25) *
Приведите свой пример. Достойный ваших знаний.


Вот описание этой схемы синхронизатора на VHDL. В VHDL-2008 будут доступны некоторые дополнительные упрощения, но ISE его пока что не синтезирует.

Код
library ieee;
use ieee.numeric_bit.all;

entity in_out_flag is
    port(
        in_flag : in bit;
        
        out_clk : in bit;
        ena_out_flag : out bit
    );
end in_out_flag;

architecture Behavioral of in_out_flag is
    -- На S6 схема получается проще, если начальное состояние триггера с задействованной асинхронной установкой равно 1
    signal shift_reg : bit_vector( 1 to 4 ) := (others => '1');
begin

process( in_flag, out_clk )
begin
    if rising_edge( out_clk ) then
        shift_reg <= shift_reg srl 1;
    end if;
    
    if in_flag = '1' then
        shift_reg( 1 ) <= '1';
    end if;
end process;

ena_out_flag <= shift_reg( 3 ) and not shift_reg( 4 );

end Behavioral;


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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 11 2011, 07:05
Сообщение #36


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Ethereal @ Apr 10 2011, 23:17) *
Не поймет. Квартусовский, например, на такие конструкции ругается.

А на такие (код от Oldring) - нет.
Кто из нас неправ?
Прикрепленное изображение

Надеюсь, честь Quartus'а спасена? sm.gif
Go to the top of the page
 
+Quote Post
Ethereal
сообщение Apr 11 2011, 07:53
Сообщение #37


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

Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354



Цитата(ViKo @ Apr 11 2011, 11:05) *
А на такие (код от Oldring) - нет.
Кто из нас неправ?
Надеюсь, честь Quatus'а спасена? sm.gif

Какая связь между кодом Oldring на VHDL и возможностью проглатывания синтезатором предложенной Oldring'ом же замены в верилоговском описании? o_O

Было
Код
always @(posedge C or posedge R)
begin
  if(R) O<=1;
  else O<=0;
end


Предложено
Код
always @(posedge C or posedge R)
begin
  O<=R;
end


Сообщение отредактировал Ethereal - Apr 11 2011, 07:54


--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 11 2011, 08:43
Сообщение #38


Гуру
******

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



Цитата(Oldring @ Apr 10 2011, 23:49) *
Вот описание этой схемы синхронизатора на VHDL.


Снимаю шляпу. Помню Вашу реализацию Barrel Shifters. Чтобы понять, что Вы написали, мне пришлось задействовать rtl просмотрщик.
И в этом примере Вы все поставили с ног на голову, применив сдвиг вправо.
Вы ведь прекрасно понимаете, что Ваше описание нечитаемо для пользователя среднего уровня развития.
(Два if в одном процессе). И опять я полез в RTL просмотрщик.
А потом гадай, как другие синтезаторы к такому описанию отнесутся.
Интересно, есть у Вас работники, которые в состоянии подхватить Ваши проекты.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 11 2011, 08:47
Сообщение #39


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(sazh @ Apr 11 2011, 11:43) *
Чтобы понять, что Вы написали, мне пришлось задействовать rtl просмотрщик.
А потом гадай, как другие синтезаторы к такому описанию отнесутся.

Вот и я, из любопытства скомпилировал код Oldring и показал картинку.
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 11 2011, 08:47
Сообщение #40


Гуру
******

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



Цитата(ViKo @ Apr 11 2011, 11:47) *
Вот и я, из любопытства скомпилировал код Oldring и показал картинку.


Картинка у него другая. Это не его код.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 11 2011, 08:51
Сообщение #41


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Ethereal @ Apr 11 2011, 10:53) *
Какая связь между кодом Oldring на VHDL и возможностью проглатывания синтезатором предложенной Oldring'ом же замены в верилоговском описании? o_O

Вы показали картинку, и написали, что на такое Quartus ругается. Я показал картинку, на которую Quartus "не ругается". Они что, сильно отличаются? Поясните, что вы хотели сказать в первом случае, и только что.

Цитата(sazh @ Apr 11 2011, 11:47) *
Картинка у него другая. Это не его код.

Как это не его? Скопировал. Создал файл *.vhd. Скомпилировал. Картинку извлек. В сообщение забросил.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 11 2011, 09:06
Сообщение #42


Гуру
******

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



Цитата(sazh @ Apr 11 2011, 12:47) *
Картинка у него другая. Это не его код.


Мой! Сам писал! Мамой клянусь! biggrin.gif


Цитата(sazh @ Apr 11 2011, 12:43) *
Вы ведь прекрасно понимаете, что Ваше описание нечитаемо для пользователя среднего уровня развития.
(Два if в одном процессе). И опять я полез в RTL просмотрщик.


Да, к сожалению "средний уровень развития" желает лучшего.

Тем не менее, этот код не должен быть очень сложным для профессионального программиста, занявшегося HDL и не поленившегося прочитать стандарт языка. Люди "от железа" просто смотрят на HDL как на "описание схемы", от программирования - как на описание поведения. И, кстати, согласитесь, моё описание на VHDL проще и естественнее, когда в нём разобраться - просто сдвиговый регистр на 4 бита, у которого состояние первого регистра асинхронно устанавливается в единицу отдельным асинхронным входом.

Два if - кажется, встречал такое даже в рекомендациях по стилю не помню каких тулзов.


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


Гуру
******

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



Цитата(ViKo @ Apr 11 2011, 11:51) *
Создал файл *.vhd. Скомпилировал. Картинку извлек. В сообщение забросил.


Тогда в догон версия пакета и целевой кристалл.
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 11 2011, 09:55
Сообщение #44


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(ViKo @ Apr 11 2011, 11:05) *
..Кто из нас неправ?

Прямо буря в стакане воды!
Вот что требовалось ...по рис 8!
Код, предложенный мной в начале, описывает два выходных регистра. Первый триггер - делитель. Схема достаточно универсальна для любых частот...

Сообщение отредактировал Мур - Apr 11 2011, 09:56
Прикрепленные файлы
Прикрепленный файл  sch_imp.bmp ( 189.62 килобайт ) Кол-во скачиваний: 31
 
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 11 2011, 09:58
Сообщение #45


Гуру
******

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



Цитата(Oldring @ Apr 11 2011, 12:06) *
Да, к сожалению "средний уровень развития" желает лучшего.


Я бы сказал, золотая середина. Ведь на выходе - качественный продукт, понятный каждому.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 11 2011, 10:04
Сообщение #46


Гуру
******

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



Цитата(Мур @ Apr 11 2011, 13:55) *
Схема достаточно универсальна для любых частот...


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

Цитата(sazh @ Apr 11 2011, 13:58) *
Я бы сказал, золотая середина. Ведь на выходе - качественный продукт, понятный каждому.


До тех пор, пока указанные вами условия не начинают вступать в противоречие друг с другом, вы, безусловно, правы. Поэтому схематики более понятны для "золотой середины", чем любой HDL.

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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 11 2011, 10:15
Сообщение #47


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Oldring @ Apr 11 2011, 14:04) *
Для любых связанных частот без асинхронщины между ними.
Мне toggle тоже больше нравится, но обсуждалась в стакане воды именно схема из Т-Ш, растягивающая и синхронизирующая асинхронные импульсы произвольной длины, то есть без входного клока.

До тех пор, пока указанные вами условия не начинают вступать в противоречие друг с другом, вы, безусловно, правы. Поэтому схематики более понятны для "золотой середины", чем любой HDL.

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

И асинхронных тоже!(его основная функция по статье применяется для переходов между доменами и синхронизациями).
На HDL три триггера описываются легко.
Я в своих проектах разделяю эту схему на два фрагмента. Один я уже привёл(выходной), а второй, в большинстве своём, прячется в моих автоматах. События у меня- просто смена состоояния на противоположный!
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 11 2011, 10:17
Сообщение #48


Гуру
******

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



Цитата(Мур @ Apr 11 2011, 14:15) *
И асинхронных тоже!(его основная функция по статье применяется для переходов между доменами и синхронизациями).


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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 11 2011, 10:26
Сообщение #49


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Oldring @ Apr 11 2011, 14:17) *
Для асинхронных клоков ваша схема подвержена риску сбоев из-за метастабильности второго триггера.

В наших силах держать эту пару рядом друг с другом biggrin.gif , чтобы уйти от проблемы метастабильности.

Мне важен факт события, а не момент...

Сообщение отредактировал Мур - Apr 11 2011, 10:29
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 11 2011, 10:32
Сообщение #50


Гуру
******

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



Цитата(Мур @ Apr 11 2011, 14:26) *
В наших силах держать эту пару рядом друг с другом biggrin.gif , чтобы уйти от проблемы метастабильности.


Эта метастабильность выходит через логику на выход этой схемы.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 11 2011, 10:36
Сообщение #51


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Oldring @ Apr 11 2011, 14:32) *
Эта метастабильность выходит через логику на выход этой схемы.

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

Сообщение отредактировал Мур - Apr 11 2011, 10:37
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 11 2011, 10:41
Сообщение #52


Гуру
******

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



Цитата(Мур @ Apr 11 2011, 14:36) *
Может я чего не понимаю... Можете сформулировать вариант, когда на один входной импульс на выходе не появиться отклик вообще , или их вдруг появится пара?



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


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


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

Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354



Цитата(Мур @ Apr 11 2011, 14:36) *
Может я чего не понимаю... Можете сформулировать вариант, когда на один входной импульс на выходе не появиться отклик вообще , или их вдруг появится пара?

Когда на фронте f2 попадется переключение входного триггера, защелкивающего инверсное состояние f1.


--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 11 2011, 10:53
Сообщение #54


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Oldring @ Apr 11 2011, 14:41) *
А вы не видите сами условие, когда на выходе вашей схемы появится метастабильность, которая может привести к неправильной работе логики в последующих схемах, если не хватит времени на её разрешение? А времени там может не хватить, потому что неизвестно сколько логики подключено к вашей схеме, и каковы задержки в самой этой подключенной логике. Да, можно в принципе попытаться обконстрейнить время распространения сигнала с выхода, если очень хочется, с огромной вероятностью не вписаться в тайминги вблизи максимальной частоты кристалла.

Ну почему же? Даже если возникнет неопределённость при соотношении входного уровня на D-входе и фронта CLK, он уверенно поймается следующим фронтом! Триггер в любом случае в сером уровне не останется (иначе бы это не был триггер!). Мне не важен (ещё раз!) момент. Мне важен факт! Он гарантировано появится! И на выходе будет выдан одноклоковый импульс, но привязанный уже к другой опорной частоте. Что и требуется...
Я постараюсь расширить варианты проблем.. Помогите!
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 11 2011, 10:55
Сообщение #55


Гуру
******

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



Цитата(Oldring @ Apr 11 2011, 13:41) *
может привести к неправильной работе логики в последующих схемах


Если метастабильность - неопределенное состояние на выходе триггера, то ведь конкретно для этой схемы
это состояние или будет отработано последующим триггером как переход из например 0 в 1 или нет.
Что на выходе будет давать формирование импульса или в одном такте или в последующем, что для флага не так уж и важно.
Важно что событие на входе будет отработано однозначно. Нет?
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 11 2011, 11:02
Сообщение #56


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(sazh @ Apr 11 2011, 14:55) *
Если метастабильность - неопределенное состояние на выходе триггера, то ведь конкретно для этой схемы
это состояние или будет отработано последующим триггером как переход из например 0 в 1 или нет.
Что на выходе будет давать формирование импульса или в одном такте или в последующем, что для флага не так уж и важно.
Важно что событие на входе будет отработано однозначно. Нет?

Вот и я о том!
Страшно, когда на один входной импульс на выходе не появиться отклик вообще , или их вдруг появится пара! Вот это есть ошибка! Возможно тут такое?

Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 11 2011, 11:02
Сообщение #57


Гуру
******

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



Цитата(sazh @ Apr 11 2011, 14:55) *
Если метастабильность - неопределенное состояние на выходе триггера, то ведь конкретно для этой схемы
это состояние или будет отработано последующим триггером как переход из например 0 в 1 или нет.
Что на выходе будет давать формирование импульса или в одном такте или в последующем, что для флага не так уж и важно.
Важно что событие на входе будет отработано однозначно. Нет?



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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 11 2011, 12:28
Сообщение #58


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Мур @ Apr 11 2011, 14:02) *
Страшно, когда на один входной импульс на выходе не появиться отклик вообще , или их вдруг появится пара! Вот это есть ошибка! Возможно тут такое?

Про эту картинку речь идет? Пусть висит.
Если на входе Data будет импульс в 3 такта Clock1, на Output появится 2 импульса длительностью Clock2. И без всякой метастабильности.
В метастабильном состоянии триггер может висеть "между небом и землей" сколь угодно долго, в идеальном случае. До следующего такта. А если в следующем такте вход неопределен, то все продолжится.
Если вдруг почему-то Clock1 отстанет от Data, доберется до "желтого" триггера чуть позже, триггер влетит в метастабильное состояние.
Это я не к тому, что схема плохая или неправильная, а к тому, что идеального в мире ничего нет. Нужно смотреть внимательно.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 11 2011, 12:54
Сообщение #59


Гуру
******

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



Цитата(ViKo @ Apr 11 2011, 16:28) *
В метастабильном состоянии триггер может висеть "между небом и землей" сколь угодно долго, в идеальном случае.
...
Если вдруг почему-то Clock1 отстанет от Data, доберется до "желтого" триггера чуть позже, триггер влетит в метастабильное состояние.


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

В вашей схеме 4 триггера, а в обсуждаемой - три. В вашей схеме внутри полноценный голубой синхронизатор, в обсуждаемой его нет. Но предполагается, что Data синхронна по отношению к Clock 1, и поэтому она отстать не может.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 11 2011, 13:27
Сообщение #60


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Oldring @ Apr 11 2011, 15:54) *
Вероятность оставания в метастабильном состоянии экспоненциально уменьшается со временем...

Конечно. Это мы обсуждали год назад sm.gif
Цитата
В вашей схеме 4 триггера, а в обсуждаемой - три. В вашей схеме внутри полноценный голубой синхронизатор, в обсуждаемой его нет.

Это рисунок 8, на который ссылается Мур. Думаю, часть темы стоит посвятить этой картинке.
Цитата
Но предполагается, что Data синхронна по отношению к Clock 1, и поэтому она отстать не может.

Я сейчас смотрю в TimeQuest (пришло время), и прихожу к выводу, что по ПЛИС такты приходят на триггера совсем не одновременно.

P.S. Отстаивая честь Quartus'а, скомпилировал следующий код.
Код
  always @(posedge clkin, posedge din)
    if (din)  dout[4] <= din;
    else dout[4] <= 0;

Для Циклона-2 получил триггер с ADATA и ALOAD, подключенными к din, тактовым сигналом на clkin, и нулем на входе данных. Спасен!
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 11 2011, 13:38
Сообщение #61


Гуру
******

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



Цитата(ViKo @ Apr 11 2011, 17:27) *
Это рисунок 8, на который ссылается Мур. Думаю, часть темы стоит посвятить этой картинке.


Мур совсем недавно опубликовал схему от себя. В общем, журнальная схема Иосифа - правильная, схема Мур потенциально ошибочна.

Цитата(ViKo @ Apr 11 2011, 17:27) *
Я сейчас смотрю в TimeQuest (пришло время), и прихожу к выводу, что по ПЛИС такты приходят на триггера совсем не одновременно.


Разумеется, но все тулзы об этом знают отлично, обеспечивая согласованность прихода к каждому триггеру данных и соответствующего клока без нарушения setup/hold в самых крайних условиях эксплуатации.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 11 2011, 16:22
Сообщение #62


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(ViKo @ Apr 11 2011, 16:28) *
Про эту картинку речь идет? Пусть висит.
Если на входе Data будет импульс в 3 такта Clock1, на Output появится 2 импульса длительностью Clock2. И без всякой метастабильности.
В метастабильном состоянии триггер может висеть "между небом и землей" сколь угодно долго, в идеальном случае.

Спасибо за науку! Для меня это новость. Серый уровень на выходе триггера возможен оказывается...

тогда схема ошибочна............ wacko.gif А я поверил авторитету.

Цитата(Oldring @ Apr 11 2011, 17:38) *
Мур совсем недавно опубликовал схему от себя. В общем, журнальная схема Иосифа - правильная, схема Мур потенциально ошибочна.


Это из-за дополнительного триггера на выходе?
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 11 2011, 16:27
Сообщение #63


Гуру
******

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



Цитата(Мур @ Apr 11 2011, 20:22) *
Это из-за дополнительного триггера на выходе?



Из-за дополнительного триггера в середине, который вместе со следующим триггером образуют нормальный синхронизатор.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 11 2011, 17:15
Сообщение #64


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Oldring @ Apr 11 2011, 20:27) *
Из-за дополнительного триггера в середине, который вместе со следующим триггером образуют нормальный синхронизатор.

Я понял! Проблема в первом =переходном триггере=, который берёт на себя =все грехи= метастабильности. К моей схеме надо добавить тригерок. Правильно?
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 11 2011, 17:44
Сообщение #65


Гуру
******

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



Цитата(Мур @ Apr 11 2011, 21:15) *
Я понял! Проблема в первом =переходном триггере=, который берёт на себя =все грехи= метастабильности. К моей схеме надо добавить тригерок. Правильно?



Примерно там. Можно сказать, что "берет грехи".


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 11 2011, 18:30
Сообщение #66


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Мур @ Apr 11 2011, 19:22) *
Серый уровень на выходе триггера возможен оказывается...

Да, возможен. И именно в триггере. В обычной логике такое невозможно. В момент фронта тактового сигнала, если изменяется сигнал на входе данных, триггер "не знает", что ему защелкивать. И думает до-о-о-о-о-о-лго... если сигнал на входе попадает точно на порог переключения. Если не точно, то думает недо-о-олго...
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 12 2011, 05:47
Сообщение #67


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(ViKo @ Apr 11 2011, 22:30) *
Да, возможен. И именно в триггере. В обычной логике такое невозможно. В момент фронта тактового сигнала, если изменяется сигнал на входе данных, триггер "не знает", что ему защелкивать. И думает до-о-о-о-о-о-лго... если сигнал на входе попадает точно на порог переключения. Если не точно, то думает недо-о-олго...

ОК! Я считал, что проблема для триггера на входе, а не на выходе. В моём представлении триггер не может быть в сером уровне по определению.

Тогда в =моём случае= действительно возможна ситуация отсутствия или удвоенного импульса на выходе. Всё будет зависеть от трактовки серости либо элементом искл-или либо выходным триггером. А дополнительный триггер по Oldring-у, если так случится при асинхронщине, может пребывать в неопределённом состоянии серости(а не чёрно-белом!) до следующего такта.
Вот почему я его =за ненабностью= удалил!....(по сравнению с рис.8)-считал лишним. А он по грехам работает!
Всем огромное спасибо! Усвоил качественно! tort.gif

Сообщение отредактировал Мур - Apr 12 2011, 05:55
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 12 2011, 05:56
Сообщение #68


Гуру
******

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



Цитата(Мур @ Apr 12 2011, 09:47) *
А дополнительный триггер по Oldring-у, если так случится при асинхронщине, может пребывать в неопределённом состоянии серости(а не чёрно-белом!) до следующего такта.


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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 12 2011, 06:12
Сообщение #69


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Oldring @ Apr 12 2011, 09:56) *
Нет, не до следующего.
Выход из метастабильного состояния - это вероятностный процесс. Вероятность остаться в метастабильном состоянии понижается экспоненциально с увеличением премени. Поэтому достаточно несколько десятков постоянных времени выхода из метастабильности, чтобы эта вероятность стала практически нулевой. Но тонкость в том, что если после метастабильного триггера подключен на небольшом расстоянии следующий триггер, то разница между периодом клока и временем распространения сигнала превышает эти несколько постоянных времени, по крайней мере, для триггеров в FPGA. А если там еще несколько слоёв логики, то эти разница может оказаться близка а нулю, и хоть и первый триггер вывалится из метастабильного состояния к следующему фронту клока, сигнал на входах следующих триггеров, после этих слоёв логики, еще останется нелогическим или, скорее, нестабильным, с заметно отличной от нуля вероятностью.

Интересно! И что, долбёжка по входу, при серости на выходе, не решает неопределённости?
...Базовый синхронизатор(в синем цвете)- это пара триггеров. По первому мы определились! А второй, получается, нужен для вероятностного вываливания первого из неопределённости?

Призрак триггера Шмидта стоит передо мной! rolleyes.gif
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 12 2011, 06:27
Сообщение #70


Гуру
******

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



Цитата(Мур @ Apr 12 2011, 10:12) *
Интересно! И что, долбёжка по входу, при серости на выходе, не решает неопределённости?
...Базовый синхронизатор(в синем цвете)- это пара триггеров. По первому мы определились! А второй, получается, нужен для вероятностного вываливания первого из неопределённости?

Призрак триггера Шмидта стоит передо мной! rolleyes.gif


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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 12 2011, 06:59
Сообщение #71


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Oldring @ Apr 12 2011, 10:27) *
Нет, долбежка по входу не поможет - это же триггеры, они переключаются по фронту клока.

Я и имел ввиду фронт клока! Понятие =неопределённо долго= я утрировал на события нескольких фронтов клока...
Цитата(Oldring @ Apr 12 2011, 10:27) *
Второй нужен только для того, чтобы оттянуть логику с выхода первого, дав ему времени на размышления о смысле его бытия. Поэтому, кстати, без отключения ретайминга через него, он бесполезен.
Триггер Шмидта тут ничем помочь не может. Метастабильность принципиально неизбежна при перехода асинхронного сигнала в синхронный домен.

А гистерезис? Уж он-то должен решать неопределённость выхода. Положительная обратная связь всё-таки!...

Цитата(Мур @ Apr 12 2011, 10:12) *
А второй, получается, нужен для вероятностного вываливания первого из неопределённости?

Можно считать второй триггер триггером Шмидта? Образно!
1.За ним последнее слово в оценке(в наихудшем истечении событий) состояния первого триггера.

2.Второй вариант- к следующему фронту клока первый триггер уже будет в норме гарантировано. И это повторит второй! Это черезвычайно важно для одноклоковых сигналов разрешения в синхронных проектах. Там всё строго и вариации длительности недопустимы

Сообщение отредактировал Мур - Apr 12 2011, 07:20
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 12 2011, 07:03
Сообщение #72


Гуру
******

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



Цитата(Мур @ Apr 12 2011, 10:59) *
А гистерезис? Уж он-то должен решать неопределённость выхода. Положительная обратная связь всё-таки!...


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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 12 2011, 07:15
Сообщение #73


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Oldring @ Apr 12 2011, 10:03) *
Нет. Метастабильность и есть неустойчивое равновесие при наличии положительной обратной связи. Гистерезис тоже бесполезен, так как тут важно поведение линеаризованной системы вблизи точки неустойчивого равновесия при малом сигнале.

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

Т.е. если провести аналогию с перевёрнутым маятником. Метастабильность порождается ситуацией попадания маятника в вертикальное положение, откуда он может свалиться в любую сторону и в случайный момент времени. Приход следующего фронта ускорит развязку, а может быть и раньше.... и без него... smile3046.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 12 2011, 07:35
Сообщение #74


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Долбежка тактами поможет. Ведь защелкиваться будет уже новое состояние входов, которое, будем надеяться, в этот момент уже стабильное.
Гистерезис не поможет, потому что в этом случае просто появляется два порога восприятия сигнала как 0 или как 1 - при переходе из 0 в 1, и наоборот. Сами пороги технологически остаются примерно теми же.
Так как метастабильное состояние выхода триггера не обязательно совпадает с порогом восприятия 0 или 1 для следующего триггера, то следующий триггер зашелкнет уже нечто, похожее на 0 или 1. Но и такой сигнал должен увеличить время срабатывания триггера. Вероятность, что напряжение будет вблизи порога, мала. Следующий триггер уменьшает эту вероятнось почти до нуля.

P.S. нужно писать "триггер Шмитта"
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 12 2011, 07:44
Сообщение #75


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Мур @ Apr 7 2011, 16:33) *
CODE

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity syn is
port(
clk : in STD_LOGIC;
in_level : in STD_LOGIC;
reset : in STD_LOGIC;
imp : out STD_LOGIC
);
end syn;
architecture syn_body of syn is
signal jjj : STD_LOGIC;
signal qqq : STD_LOGIC;
signal ddd : STD_LOGIC;
begin
tg: process (clk)
begin
if clk'event and clk = '1' then
if reset='1' then
jjj <= '0';
qqq <= '0';
ddd <= '0';
else
jjj <= ddd;
qqq <= jjj;
ddd <= in_level;
end if;
end if;
end process;
imp <= jjj xor qqq;
end syn_body;

Тогда первый текст должен быть таким!

Цитата(ViKo @ Apr 12 2011, 10:35) *
P.S. нужно писать "триггер Шмитта"


Призрак лейтенанта Штидта парил надо мной!...

Посыпаю голову пеплом! smile3009.gif

Сообщение отредактировал Мур - Apr 12 2011, 07:53
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 12 2011, 08:08
Сообщение #76


Гуру
******

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



Цитата(ViKo @ Apr 12 2011, 11:35) *
Долбежка тактами поможет. Ведь защелкиваться будет уже новое состояние входов, которое, будем надеяться, в этот момент уже стабильное.


Нет. Так как сигнал асинхронный, он может прийти в самый неподходящий момент, именно перед тем фронтом клока, который защелкивает сигнал, далее используемой логикой внутри.

Цитата(ViKo @ Apr 12 2011, 11:35) *
Так как метастабильное состояние выхода триггера не обязательно совпадает с порогом восприятия 0 или 1 для следующего триггера, то следующий триггер зашелкнет уже нечто, похожее на 0 или 1.


Если внутри нелогической зоны нет плато, то это всё не имеет никакого значения.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 12 2011, 09:22
Сообщение #77


Гуру
******

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



Цитата(Мур @ Apr 12 2011, 11:15) *
Т.е. если провести аналогию с перевёрнутым маятником. Метастабильность порождается ситуацией попадания маятника в вертикальное положение, откуда он может свалиться в любую сторону и в случайный момент времени. Приход следующего фронта ускорит развязку, а может быть и раньше.... и без него... smile3046.gif


Почти.

У механического маятника бывает трение покоя, приводящее к появлению на самом верху глобального максимума энергии небольшого локального минимума, приводящего к появлению там немного устойчивого состояния. Поэтому механический маятник может в принципе там находиться бесконечно долго, тем более, если его ось со временем заржавеет. В случае электронных триггеров всё обычно проще.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 12 2011, 09:39
Сообщение #78


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Oldring @ Apr 12 2011, 12:22) *
Почти....У механического маятника бывает трение покоя, приводящее к появлению на самом верху глобального максимума энергии небольшого локального минимума, приводящего к появлению там немного устойчивого состояния. Поэтому механический маятник может в принципе там находиться бесконечно долго, тем более, если его ось со временем заржавеет. В случае электронных триггеров всё обычно проще.

Спасибо! Мне понравилось -> =появления там немного устойчивого состояния=
В электронных триггерах =ось не ржавеет=, и активная зона, вроде массы механического маятника, способна балансировать случайным образом, пока какой-либо фактор не преобладает.
...Помнится, в таком сотоянии возрастает потребление элементов(нет отсечки или насыщения). Это я к тому, что за метастабильные состояния наказывают повышением потребления. Хоть и не значительным. В былые времена дефектные триггеры выгорали от сквозного тока...

Сообщение отредактировал Мур - Apr 12 2011, 10:09
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Apr 12 2011, 17:18
Сообщение #79


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

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



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

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

Если всё сделать правильно, то и метастабильности не будет - а значит, всё будет тривиально (как функционально моделируется - так и работает,.. если, конечно all constraints are met).

Т.к. схематика/описания схемы генерирующей clock 100М и 50М от автора не последовало, то предположу, что он сделал это место "правильно". Тогда для пересаживания импульса, длинной от 1 до 2 периодов CLK_100M на частоту 50М (получится импульс длинной в один период), достаточно такой схемы:
Прикрепленное изображение

ISE разведёт сигнал A с ограничениями как для 100М, и обратная связь (цепь Event_50M) со второго триггера на первый тоже будет разведена с ограничением как для 100М. Цепь Event_50M ко всем остальным синхронным элементам домена Clk_50M будет разведена с ограничениями как для 50М.

Ну вот, как-то так примитивно всё получается,.. если схема генерирующая clock’и сделана правильно.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 18 2011, 13:07
Сообщение #80


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Хочу вернуться к рис.8 (см. сообщение №58).
Возник у меня вопрос о целесообразности мультиплексора в "желтой" части схемы. И подумал я, почему его не заменить на схему И - один вход - Data, другой /Q с триггера.
Что делает мультиплексор в "желтой" части.
Пока на Data 0, это латч, поддерживающий свой 0. Незнамо, зачем.
Пришла "длинная" 1, мультиплексор переключился на вход 1, передает 1 с инверсного выхода триггера на вход D триггера. По такту Clock1 эта 1 записалась в регистр. На инверсном выходе триггера появился 0, и этот 0 пришел через мультиплексор на D. Пришел следующий такт, в триггер записался 0, на входе мультиплексора 1. И т.д., генерация.
Когда Data стала 0, мультиплексор запомнил свое последнее состояние. И триггер записал его, и выдал наружу.
Аналогично ведет себя схема на И. С той разницей, что принудительно подаст 0 на вход D, когда Data станет 0. И выход триггера гарантированно переключится в 0.
При "короткой" 1 на Data, однотактовой, обе схемы работают одинаково.
"Развод" какой-то!? sm.gif

Go to the top of the page
 
+Quote Post
Ethereal
сообщение Apr 18 2011, 14:25
Сообщение #81


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

Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354



Цитата(ViKo @ Apr 18 2011, 17:07) *
Что делает мультиплексор в "желтой" части.
Пока на Data 0, это латч, поддерживающий свой 0. Незнамо, зачем.
Пришла "длинная" 1, мультиплексор переключился на вход 1, передает 1 с инверсного выхода триггера на вход D триггера. По такту Clock1 эта 1 записалась в регистр. На инверсном выходе триггера появился 0, и этот 0 пришел через мультиплексор на D. Пришел следующий такт, в триггер записался 0, на входе мультиплексора 1. И т.д., генерация.
Когда Data стала 0, мультиплексор запомнил свое последнее состояние. И триггер записал его, и выдал наружу.
Аналогично ведет себя схема на И. С той разницей, что принудительно подаст 0 на вход D, когда Data станет 0. И выход триггера гарантированно переключится в 0.
При "короткой" 1 на Data, однотактовой, обе схемы работают одинаково.
"Развод" какой-то!? sm.gif

Там синхронизатор, передающий 1clk импульсы, поэтому "длинная" 1 на входе может быть, только если мы хотим передать много-много импульсов, идущих друг за другом.
А если на входе "короткий" импульс (1clk), то выход желтого каскада переключится в инверсное состояние, после чего смененное состояние зафиксируется. Выходной сигнал будет передан во второй домен, где смена состояния будет отловлена по xor.

А с лэтчем они криво нарисовали, да. На самом деле там что-то вроде:
Код
always @(posedge clkA)
Out<=(En)?~Out:Out;


--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 18 2011, 14:42
Сообщение #82


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Ethereal @ Apr 18 2011, 17:25) *
А если на входе "короткий" импульс (1clk), то выход желтого каскада переключится в инверсное состояние, после чего смененное состояние зафиксируется.

Импульс может и должен быть равен такту. Но даже если он и короче, то он уже отловлен триггером. Зачем его держать? Разве что чтобы выдержать время удержания на входе D?
А если не отловлен - туда ему и дорога! sm.gif

Цитата(Ethereal @ Apr 18 2011, 17:25) *
А с лэтчем они криво нарисовали, да. На самом деле там что-то вроде:

не думаю
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 19 2011, 14:18
Сообщение #83


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Присмотрелся внимательнее к рисунку. Да, есть в нем смысл. Был неправ.

1. Короткие импульсы 1 на Data захватываются защелкой, затем триггер фиксирует это состояние. И находится в нем долго, до следующего импульса на Data. По этому импульсу защелкивается 0, и дальше триггер... Таким образом, состояние триггера по каждому импульсу на Data изменяется на противоположное.
Стоящий после него синхронизатор с исключающим или на конце вылавливает каждое изменение приходящего "желтого" триггера сигнала, формируя импульс в один свой такт по фронту, и по срезу. Так "восстанавливается" удвоенная частота импульсов Data.

2. Если на Data импульс достаточно длительный, так, что в него попадает один фронт Clock1, или в короткий импульс попал фронт Clock1, "желтый" триггер сформирует импульс в один такт. Который может не словиться "синими" триггерами. А если словится, сформируются два подряд идущих импульса. Нехорошо.

3. Если на Data импулься длинный, "желтый" триггер будет генерировать то 0, то 1. Аналогичный сигнал появится на выходе синхронизатора. Тоже не хорошо.

Особо нужно посмотреть, когда импульс на Data равен периоду Clock1. В этом случае выход триггера переключается одновременно со срезом Data. Вот она - потенциальная возможность для метастабильного состояния защелки-мультиплексора. Если защелкнется новое состояние триггера - сформируется одиночный импульс (вариант 2). Если сохранится старое - все нормально (вариант 1). Но, так как при "защелкивании" сигнал с триггера проходит по мультиплексору дважды, сначала по цепи для входа 1, потом по цепи для входа 0, то он гарантированно "защелкнет" старое состояние триггера. Триггер начнет формировать длинный импульс (вариант 1).

Примерно так. sm.gif
Go to the top of the page
 
+Quote Post

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

 


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


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