|
Клоки, Использование нескольких синх. сиг. в пр |
|
|
|
Oct 2 2010, 11:53
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(Guest @ Jul 23 2004, 20:41)  есть такое понятие как синхронизаторы (блок из триггеров) нужен вот для чего: если есть схема в которой есть разные тактовые домены работающие на одной частоте но не факт что фазы совпадают,а надо передавать данные из одного в другой и чтоб голова не болела по поводу проскальзываний или метасостояний, то делаем так: (вых данных, и такты1) -> триггер1 (выход триггер1, такты2) ->триггер2 (выход триггер2, такты2) ->триггер3 с выхода триггера3 уже имеем стабильные данные но нужным нам тактам. Хочется поговорить об этом. В свете используемого симулятора. Моделсим определяет временной интервал (симуляция на gate уровне в терминах Альтеры), где при переходе из одного клокового домена в другой не выполняются времена установки и удержания данных. Но эту неопределенность распространяет на всю цепочку триггеров. В результате по сформированному неопределенному сигналу в нужном временном интервале реакции на входное воздействие не происходит. Получается, в симуляторе нет анализа метастабильности, и все эти ниже перечисленные статьи - дань научному мировозрению?
Эскизы прикрепленных изображений
|
|
|
|
|
Oct 2 2010, 13:22
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(sazh @ Oct 2 2010, 06:53)  Получается, в симуляторе нет анализа метастабильности вскройте модель используемого триггера, там всё написано %) Цитата и все эти ниже перечисленные статьи - дань научному мировозрению? занятный вывод ЗЫ. можете поправить модель триггера добавив туда модель метастабильности, потом незабудьте поделится.
--------------------
|
|
|
|
|
Oct 2 2010, 13:48
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(des00 @ Oct 2 2010, 16:22)  занятный вывод Это случайно вырвалось. Уж слишком много чужих проектов пришлось на своем веку перевидать. Там этим не заморачивались. P. S. Хотелось бы ясных исчерпывающих ответов. Хотя осознаю, что манеры общения на конференциях, проводимых западными партнерами и нашими родными, частенько разнятся.
|
|
|
|
|
Oct 3 2010, 06:38
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 4-03-08
Из: Москва
Пользователь №: 35 621

|
Поясните пожалуйста, какой именно анализ метастабильности Вы имели в виду: Цитата(sazh @ Oct 2 2010, 15:53)  Моделсим определяет временной интервал (симуляция на gate уровне в терминах Альтеры), где при переходе из одного клокового домена в другой не выполняются времена установки и удержания данных. Цитата(sazh @ Oct 2 2010, 15:53)  Получается, в симуляторе нет анализа метастабильности, и все эти ниже перечисленные статьи - дань научному мировозрению? То, что Вы упомянули - и есть анализ метастабильности: при её возникновении выход модели триггера переводится в "x" - а дальше он уже распространяется по логике в соответствии с обычными правилами симуляции.
--------------------
...а Сила, Брат - она - в несиловых решениях.
|
|
|
|
|
Oct 3 2010, 12:28
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 4-03-08
Из: Москва
Пользователь №: 35 621

|
Видимо, голова работает в режиме выходного дня  - никак не могу уразуметь, что же вы ожидаете от симулятора. Цитата(sazh @ Oct 3 2010, 14:22)  Все так. И в результате я не получаю соответствия между функциональным и временным моделировании при использовании в проекте сетки входных клоков. Теперь я понимаю, почему альтерщики при встроенном моделировании пользовали только временное (по умолчанию, по лени), а моделсимщики - только RTL (функциональное). А каким, по-вашему, должно быть в идеале это соответствие? При каждом подозрении на метастабильность делить симуляцию на 2 ветки, соответствующие восприятию состояния "проблемного" триггера как "0" и "1" соответственно, да ещё и рассчитывать вероятности каждого исхода? Точнее даже делить не на 2 ветки, а на 2^n, если выход триггера подключён к n различным цепям. Или Вам нужно просто, чтоб не появлялись x-ы? Так опция, заставляющая игнорировать при симуляции метастабильность и выдавать на выход строго 0 или 1 может быть установлена (по крайней мере у Xilinx) как для любого триггера индивидуально, так и для проекта в целом.
--------------------
...а Сила, Брат - она - в несиловых решениях.
|
|
|
|
|
Nov 9 2010, 08:39
|
Группа: Новичок
Сообщений: 4
Регистрация: 12-09-10
Пользователь №: 59 432

|
Я понимаю, что в основном на этом форуме сидят мастера своего дела, но ,пожалуйста, покажите графически, как выглядит СХЕМА ЭЛАСТИЧНОГО БУФЕРА
|
|
|
|
|
Nov 9 2010, 10:48
|
Участник

Группа: Участник
Сообщений: 71
Регистрация: 14-11-07
Пользователь №: 32 325

|
Цитата(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
|
|
|
|
|
Nov 18 2010, 09:40
|
Группа: Новичок
Сообщений: 4
Регистрация: 12-09-10
Пользователь №: 59 432

|
понимаю, что в основном на этом форуме сидят мастера своего дела, но ,пожалуйста, покажите графически, как выглядит СХЕМА ЭЛАСТИЧНОГО БУФЕРА
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|