Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Клоки
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
DimaV
Ситуация: В большом проекте нужно использовать несколько клоков (не кратных). Есть компоненты которые работают синхронно от разных клоков.
Вопрос: Как грамотно соеденить эти компоненты между собой?
Esquire
Смотря какая связь компонентов требуется. Если обмен данными, то помогает буферирование (двухпортовая память, FIFO и т. д. в зависимости от конкретной задачи).
LeonY
Цитата(DimaV @ Jul 21 2004, 05:07 PM)
Есть компоненты которые работают синхронно от разных клоков.

А чего бы это значило??? Поподробнее можно...
DimaV
Цитата(LeonY @ Jul 22 2004, 12:10 AM)
А чего бы это значило??? Поподробнее можно...

Поясняю. Есть уже отлаженные компоненты которые работают синхронно. Компоненты коммутируются шинами (адрес, данные, энейблы). Нужно обмениваться данными как можно быстрее. Я тут слышал про эластичный буфер, кто нибудь может сказать подробнее как он работает, хотя двупортовая память это тоже выход, но её может и нехватить :-))))
Hadgehog
Наверное самое лучшее писать проект сверху вниз, для начала определить основные принципы работы всего устройства - распределение тактовых частот и их фазы для работы конкретных устройств нижнего уровня, а уже затем проектировать частные куски.
Если не хочется терять старые наработки, то связь отлаженых модулей вполне возможна через FIFO, но если в начале не разработана общая идеология работы, то может получиться, что работа будет называться "подпорки под костыли".
Подобные "грабли" уже неоднократно встречались в моем личном опыте.
DimaV
Цитата(Hadgehog @ Jul 22 2004, 02:49 PM)
Наверное самое лучшее писать проект сверху вниз, для начала определить основные принципы работы всего устройства - распределение тактовых частот и их фазы для работы конкретных устройств нижнего уровня, а уже затем проектировать частные куски.

Я конечно же согласен, что начиная делать большой проект надо сначала разобраться с глобальными вещами (т.е. структурой, связями между компонентами и т.д.), но тем не менее большие проекты пишуться по частям, да и отлаживать отдельно компоненты намного продуктивнее. Так что такое эластичный буфер.
Hadgehog
Извини про эластичный буфер не слышал, если кто проявится с разяснениями, очень интересная тема - "граблей" старых почти как блох. Проблема сихронизации изначально несинхронных источников данных с минимальными временными потерями почти, что основная моя работа в различных системах.
DimaV
Если у кого есть полезные ссыски где можно посмотреть статьи про сопряжение компонетов работающих от различных клоков, пожалуйста сообщите.
vladz
есть статья Каммингса Synthesis and Scripting Techniques for Designing Multi-Asynchronous Clock Designs скачать можно с http://www.sunburst-design.com/papers/Cumm...cClk_rev1_1.pdf

на сайте http://www.sunburst-design.com/papers/
много еще чего интересного есть.
Guest
есть такое понятие как синхронизаторы (блок из триггеров) нужен вот для чего: если есть схема в которой есть разные тактовые домены работающие на одной частоте но не факт что фазы совпадают,а надо передавать данные из одного в другой и чтоб голова не болела по поводу проскальзываний или метасостояний, то делаем так:
(вых данных, и такты1) -> триггер1
(выход триггер1, такты2) ->триггер2
(выход триггер2, такты2) ->триггер3
с выхода триггера3 уже имеем стабильные данные но нужным нам тактам.

Не помню где читал, пдфка какая-то была...
udofun
gab
Цитата(DimaV @ Jul 21 2004, 05:07 PM)
Ситуация: В большом проекте нужно использовать несколько клоков (не кратных). Есть компоненты которые работают синхронно от разных клоков.
Вопрос: Как грамотно соеденить эти компоненты между собой?

FIFO. Глубину можно посчитать исходя из синхросигналов. Если нельзя -- переделывать проект. Лучше это сделать сейчас, чем после месяца безуспешной отладки.
У Xilinx на эту тему есть XAPP. Номер, к глубокому сожалению, не помню. На мой взгляд, клоков в схеме должно быть как можно меньше.
zov
Эластичный буфер - это просто FIFO со специальной логикой и решает оно вполне конкретную задачу. Есть синхронный источник сигналов, есть схема, которая восстанавливает из входного сигнала клок и на нем принимает входной сигнал. Эта схема должна пересадить принятый сигнал на мастер-клок всего устройства и частота этой пересадки равняется частоте входного сигнала, но в среднем! А в реальности из-за джиттера и входных помех эта частота плавает вокруг среднего значения. чтобы в результате не возникала ситуация, когда очередные данные не приходят к очередному клоку или наоборот, старые данные еще не передана а поступили новые, используется FIFO, которое в этом случае называется эластичным буфером. Глобально алгоритм работы этого буфера достаточно прост (детали могут сильно отличаться в зависимости от характеристик всей системы и ее реализации) - FIFO заполняется и опустошается таким образом, чтобы поддерживать его заполненость примерно на половину(номинально). Из всего вышесказанного следует, что эластичный буфер вряд ли подойдет для решения указанной задачи.
Что касается проблемы сопряжения передачи данных из доменов с разными клоками, то ее решение сильно зависит от вида пересылок данных на исходных шинах. Два крайних случая:
1. Исходные данные на шинах поступают блочно (PCI в режиме блочного обмена и т.д.) - в этом случае поможет только 2-х портовое ОЗУ с разными частотами записи/чтения.
2. Исходно данные передаются одиночными словами. В этом случае достаточно из одного домена в другой передать строб сопровождения данных, защитив его от возможной метастабильности, причем этот строб должен сбрасываться из приемного домена, где также следует учесть возможную метастабильность.
В промежутке лежит все многообразие практических задач, которые решаются комбинацией вышеописанных приемов.

Успехов!
zov
judge47
Вы можете представить схему и обьяснить, каков принцип построения и действия эластичного буфера???
Artem_Petrik
Цитата(judge47 @ Sep 19 2010, 06:56) *
Вы можете представить схему и обьяснить, каков принцип построения и действия эластичного буфера???

Как уже сказано в посте, предшествующем вашему (эта информация не устарела smile.gif ) эластичный буфер==Фифо. А дальше - в гугль, пепрепечатывать сюда азбуку как-то неинтересно.

По поводу ньюансов реализации полезно почитать статьи Клиффорда Каммингса (Clifford Cummings), но это уже не для новичков. Новичкам дорога в Megawizard Plugin menager, или в корегенератор (или как оно там у XILINX называется)
wolfman
Цитата(judge47 @ Sep 19 2010, 13:26) *
Вы можете представить схему и обьяснить, каков принцип построения и действия эластичного буфера???


Некоторое подобие можете посмотреть в книге Сухмана "Синхронизация в телекоммуникационных системах. Анализ инженерных решений". Есть на месном ftp, или легко находится с помощью того же яндекса.
sazh
Цитата(Guest @ Jul 23 2004, 20:41) *
есть такое понятие как синхронизаторы (блок из триггеров) нужен вот для чего: если есть схема в которой есть разные тактовые домены работающие на одной частоте но не факт что фазы совпадают,а надо передавать данные из одного в другой и чтоб голова не болела по поводу проскальзываний или метасостояний, то делаем так:
(вых данных, и такты1) -> триггер1
(выход триггер1, такты2) ->триггер2
(выход триггер2, такты2) ->триггер3
с выхода триггера3 уже имеем стабильные данные но нужным нам тактам.


Хочется поговорить об этом. В свете используемого симулятора.
Моделсим определяет временной интервал (симуляция на gate уровне в терминах Альтеры), где при переходе из одного клокового домена в другой не выполняются времена установки и удержания данных. Но эту неопределенность распространяет на всю цепочку триггеров.
В результате по сформированному неопределенному сигналу в нужном временном интервале реакции на входное воздействие не происходит.
Получается, в симуляторе нет анализа метастабильности, и все эти ниже перечисленные статьи - дань научному мировозрению?
vadimuzzz
а пользовался ли кто-нибудь этим:
http://www.mentor.com/products/fv/0-in-cdc/ ?
тут про нее рассказывали:
http://mentor1.na5.acrobat.com/p87035116/?...p;pbMode=normal
des00
Цитата(sazh @ Oct 2 2010, 06:53) *
Получается, в симуляторе нет анализа метастабильности

вскройте модель используемого триггера, там всё написано %)
Цитата
и все эти ниже перечисленные статьи - дань научному мировозрению?

занятный вывод biggrin.gif

ЗЫ. можете поправить модель триггера добавив туда модель метастабильности, потом незабудьте поделится.
sazh
Цитата(des00 @ Oct 2 2010, 16:22) *
занятный вывод


Это случайно вырвалось. Уж слишком много чужих проектов пришлось на своем веку перевидать.
Там этим не заморачивались.
P. S. Хотелось бы ясных исчерпывающих ответов.
Хотя осознаю, что манеры общения на конференциях, проводимых западными партнерами и нашими родными, частенько разнятся.
des00
Цитата(sazh @ Oct 2 2010, 07:48) *
P. S. Хотелось бы ясных исчерпывающих ответов.

если мне память не изменяет нет там модели метастабильности. контроль временного нарушения есть, а выхода из него нет. Для этого менторовцы предлагают использовать софт, который привел vadimuzzz.
DmitryR
Модель метастабильности нет смысла делать, потому что давно известно, как делать схему, толерантную к метастабильности. А чтобы первый триггер в цепочке синхронизаторов не гадил иксами в модели - ему генерацию иксов отключают (в моделях это обычно указывается параметром, что делать при нарушении setup/hold: выдавать X или какое-то значение, старое/новое/случайное).
des00
Цитата(DmitryR @ Oct 2 2010, 11:48) *
Модель метастабильности нет смысла делать....

вспомнил, где то читал имено про это biggrin.gif статья заканчивалась фразой типа "чего проверять гарантированно рабочие участки, отключите их что бы не гадили"
Intekus
Поясните пожалуйста, какой именно анализ метастабильности Вы имели в виду:
Цитата(sazh @ Oct 2 2010, 15:53) *
Моделсим определяет временной интервал (симуляция на gate уровне в терминах Альтеры), где при переходе из одного клокового домена в другой не выполняются времена установки и удержания данных.

Цитата(sazh @ Oct 2 2010, 15:53) *
Получается, в симуляторе нет анализа метастабильности, и все эти ниже перечисленные статьи - дань научному мировозрению?

То, что Вы упомянули - и есть анализ метастабильности: при её возникновении выход модели триггера переводится в "x" - а дальше он уже распространяется по логике в соответствии с обычными правилами симуляции.
sazh
Цитата(Intekus @ Oct 3 2010, 09:38) *
дальше он уже распространяется по логике в соответствии с обычными правилами симуляции.


Все так. И в результате я не получаю соответствия между функциональным и временным моделировании при использовании в проекте сетки входных клоков.
Теперь я понимаю, почему альтерщики при встроенном моделировании пользовали только временное (по умолчанию, по лени), а моделсимщики - только RTL (функциональное).
Intekus
Видимо, голова работает в режиме выходного дня smile.gif - никак не могу уразуметь, что же вы ожидаете от симулятора.
Цитата(sazh @ Oct 3 2010, 14:22) *
Все так. И в результате я не получаю соответствия между функциональным и временным моделировании при использовании в проекте сетки входных клоков.
Теперь я понимаю, почему альтерщики при встроенном моделировании пользовали только временное (по умолчанию, по лени), а моделсимщики - только RTL (функциональное).

А каким, по-вашему, должно быть в идеале это соответствие? При каждом подозрении на метастабильность делить симуляцию на 2 ветки, соответствующие восприятию состояния "проблемного" триггера как "0" и "1" соответственно, да ещё и рассчитывать вероятности каждого исхода? Точнее даже делить не на 2 ветки, а на 2^n, если выход триггера подключён к n различным цепям.
Или Вам нужно просто, чтоб не появлялись x-ы? Так опция, заставляющая игнорировать при симуляции метастабильность и выдавать на выход строго 0 или 1 может быть установлена (по крайней мере у Xilinx) как для любого триггера индивидуально, так и для проекта в целом.
DmitryR
Цитата(sazh @ Oct 3 2010, 14:22) *
Все так. И в результате я не получаю соответствия между функциональным и временным моделировании при использовании в проекте сетки входных клоков.

Разумеется, потому что если бы на функциональная модель была бы аналогом временной - то в последней не было бы смысла. Как подсказывает нам К.О., функциональная модель нужна для того, чтобы проверить функционал. Она часто бывает платформенно-независима (если не использованы мегафункции) и работает очень быстро. Временная модель полностью аппаратно-зависима и ставит целью проверку времянки, и работает на порядок-другой-третий медленнее функциональной. Назначения этих моделей практически не пересекаются.
judge47
Я понимаю, что в основном на этом форуме сидят мастера своего дела, но ,пожалуйста, покажите графически, как выглядит СХЕМА ЭЛАСТИЧНОГО БУФЕРА
FAE_SKV
Цитата(DimaV @ Jul 21 2004, 17:07) *
Ситуация: В большом проекте нужно использовать несколько клоков (не кратных). Есть компоненты которые работают синхронно от разных клоков.
Вопрос: Как грамотно соеденить эти компоненты между собой?

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

Цитата(DimaV @ Jul 21 2004, 17:07) *
Ситуация: В большом проекте нужно использовать несколько клоков (не кратных). Есть компоненты которые работают синхронно от разных клоков.
Вопрос: Как грамотно соеденить эти компоненты между собой?


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

CODE
module ClockBridge_BusOut(
Data_IN,
wr_in,
clk_out,
reset,
clk_in,
Data_in_rdy,
Data_Out,
Data_out_rdy
);


// synopsys template
parameter DATA_WIDTH = 16,
T = 1;

// IO port Declarations

input [DATA_WIDTH-1:0] Data_IN;
input wr_in;
input clk_out;
input reset;
input clk_in;
output Data_in_rdy;
output [DATA_WIDTH-1:0] Data_Out;
output Data_out_rdy;

//Internal Declarations


wire [DATA_WIDTH-1:0] #T Data_IN;
wire #T wr_in;
wire clk_out;
wire reset;
wire clk_in;
wire #T o_bsy;
wire [DATA_WIDTH-1:0] #T Data_Out;
wire #T Data_out_rdy;

// Local declarations

// Internal signal declarations

reg reg_rdy_data_in;
reg data_reg_in_rdy;
reg [DATA_WIDTH-1:0] reg_data_in;
reg [DATA_WIDTH-1:0] reg_data_out;
reg data_reg_in_rdy_1;

//---------------------------------------------------------

//Тактовый домен со сторы данных на запись

//Записываем данные во входной регистр

always @(posedge clk_in or posedge reset)
if (reset)
reg_data_in[DATA_WIDTH-1:0] <= #T 0;
else
if (wr_in)
reg_data_in[DATA_WIDTH-1:0] <= #T Data_IN[DATA_WIDTH-1:0];

// Сигнал готовности данных во входном регистре
// Выставляем стробом записи в регистр
//Сбрасывается по сигналу готовности в выходном регистре

always @(posedge clk_in or posedge reset)
if (reset)
reg_rdy_data_in <= #T 1'b0;
else
reg_rdy_data_in <= #T (reg_rdy_data_in | wr_in) & ~data_reg_in_rdy_1;

assign Data_in_rdy = reg_rdy_data_in;

//--------------------------------------------------------

//Тактовый домен со сторы данных на чтение

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

always @(posedge clk_out or posedge reset)
if (reset)
data_reg_in_rdy <= #T 1'b0;
else
data_reg_in_rdy <= #T reg_rdy_data_in;


//По сигналу готовности данные со входного регистра записываются в выходной

always @(posedge clk_out or posedge reset)
if (reset)
reg_data_out[DATA_WIDTH-1:0] <= #T 0;
else
if (data_reg_in_rdy)
reg_data_out[DATA_WIDTH-1:0] <= #T reg_data_in[DATA_WIDTH-1:0];

assign Data_Out[DATA_WIDTH-1:0] = reg_data_out[DATA_WIDTH-1:0];

//Сигнал готовности данных в выходном регистре

always @(posedge clk_out or posedge reset)
if (reset)
data_reg_in_rdy_1 <= #T 1'b1;
else
data_reg_in_rdy_1 <= #T data_reg_in_rdy;


assign Data_out_rdy = data_reg_in_rdy_1;

endmodule // ClockBridge_BusOut


judge47
понимаю, что в основном на этом форуме сидят мастера своего дела, но ,пожалуйста, покажите графически, как выглядит СХЕМА ЭЛАСТИЧНОГО БУФЕРА
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.