|
Пересечение сигналом разных клоковых доменов, нужны ли синхронизаторы? |
|
|
|
Dec 10 2014, 13:46
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 18-11-11
Пользователь №: 68 381

|
Доброго времени суток! Есть управляющий автомат работающий на частоте 400 кГц и есть логика обработки данных работающая на частоте 120 МГц. Соответственно автомат управления посылает различные сигналы в остальную логику. Частота 400 кГц формируется из основной частоты 120 МГц (без использования PLL, с помощью обыкновенного счетчика), т.е. клоки в общем-то связанные. Вопросы: 1) Правильно ли я мыслю, что в моем случае можно обойтись без синхронизаторов(тех самых, что используются для борьбы с метастабильностью)? 2) Если так, то что для этого нужно сделать?
Заранее спасибо!
ps Cyclone III
Сообщение отредактировал ig_f - Dec 10 2014, 13:47
|
|
|
|
|
 |
Ответов
|
Dec 12 2014, 16:27
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424

|
Цитата(SM @ Dec 12 2014, 19:23)  Он должен был туда и derive_clocks записать. Видимо, вопрос опций. А Synplify + Diamond все это делают сами молча и по умолчанию. Именно как create_generated_clock создаёт с root=CLK, и с такойже частотой как и root ? Интересно...Quartus вот протупил.... А как оно generated_clock к глобальному клоковому дереву подключает? или не подключает....
|
|
|
|
|
Dec 12 2014, 16:48
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(Torpeda @ Dec 12 2014, 19:27)  Именно как create_generated_clock создаёт с root=CLK, и с такойже частотой как и root ? Интересно...Quartus вот протупил....
А как оно generated_clock к глобальному клоковому дереву подключает? или не подключает.... Вот по порядку: 1) исходный код. CODE module tst (clk, in, out); input clk, in; output reg out;
reg ckff; always @(posedge clk) ckff <= ~ckff;
reg ff_a; always @(posedge clk) ff_a <= in;
always @(posedge ckff) out <= ff_a;
endmodule
Констрейны: Код BLOCK RESETPATHS; BLOCK ASYNCPATHS;
FREQUENCY PORT clk 125 MHZ; Синплифаю запретил clock conversion, иначе он, шибко умный, убьет второй клок и преобразует в работу с сигналом разрешения. Смотрим лог синтеза: CODE #### START OF CLOCK OPTIMIZATION REPORT #####[
Clock optimization not enabled 1 non-gated/non-generated clock tree(s) driving 2 clock pin(s) of sequential element(s) 1 gated/generated clock tree(s) driving 1 clock pin(s) of sequential element(s) 0 instances converted, 1 sequential instance remains driven by gated/generated clocks
=========================== Non-Gated/Non-Generated Clocks ============================ Clock Tree ID Driving Element Drive Element Type Fanout Sample Instance --------------------------------------------------------------------------------------- @K:CKID0002 clk port 2 ckff ================================================================================ ======= ==================================================== Gated/Generated Clocks ==================================================== Clock Tree ID Driving Element Drive Element Type Fanout Sample Instance Explanation -------------------------------------------------------------------------------------------------------------------------------- @K:CKID0001 ckff FD1S3AX 1 out_0io FF-derived clock conversion disabled ================================================================================ ================================================
##### END OF CLOCK OPTIMIZATION REPORT ######]
Ага, он увидел генерацию клока триггером. Дальше PAR: Код WARNING - par: The following clock signals will be routed by using generic routing resource and may suffer from excessive delay and/or skew. Signal=clk_c loads=2 clock_loads=2 Signal=ckff loads=2 clock_loads=1 Ну, логично. Чтобы ОНО его автозапихала в глобальное клокодерево, 1-2 load-ов это крайне мало. Надо 10-15 хотя бы. Но, уверяю, если будет достаточно разветвлений, оно его заведет в глобальное дерево. Дальше. Самое главное!!!! Код Hold time optimization iteration 0: There are 1 hold time violations, the optimization is running ... End of iteration 0 8 successful; 0 unrouted; real time: 10 secs
Hold time optimization iteration 1: All hold time violations have been successfully corrected in speed grade M Это говорит о том, что PAR правильно понял генерацию клока - и ему пришлось исправлять HOLD на междоменном переходе, вставляя туда задержку. Ну и, наконец, САМОЕ ГЛАВНОЕ, STA: CODE Passed: The following path meets requirements by 7.178ns
Logical Details: Cell type Pin type Cell/ASIC name (clock net +/-)
Source: FF Q ff_a_0io (from clk_c +) Destination: FF Data in out_0io (to ckff +)
Delay: 1.929ns (20.3% logic, 79.7% route), 1 logic levels.
Constraint Details:
1.929ns physical path delay in_MGIOL to out_MGIOL meets 8.000ns delay constraint less -1.217ns skew and 0.110ns ONEG0_SET requirement (totaling 9.107ns) by 7.178ns
IOL_B7A attributes: FINE=FDEL0
Physical Path Details:
Data path in_MGIOL to out_MGIOL:
Name Fanout Delay (ns) Site Resource C2OUT_DEL --- 0.391 IOL_B8A.CLK to IOL_B8A.INFF in_MGIOL (from clk_c) ROUTE 1 1.538 IOL_B8A.INFF to IOL_B7A.ONEG0 ff_a (to ckff) -------- 1.929 (20.3% logic, 79.7% route), 1 logic levels.
Clock Skew Details:
Source Clock Path clk to in_MGIOL:
Name Fanout Delay (ns) Site Resource PADI_DEL --- 1.063 36.PAD to 36.PADDI clk ROUTE 2 1.653 36.PADDI to IOL_B8A.CLK clk_c -------- 2.716 (39.1% logic, 60.9% route), 1 logic levels.
Destination Clock Path clk to out_MGIOL:
Name Fanout Delay (ns) Site Resource PADI_DEL --- 1.063 36.PAD to 36.PADDI clk ROUTE 2 1.038 36.PADDI to R25C2C.CLK clk_c REG_DEL --- 0.404 R25C2C.CLK to R25C2C.Q0 SLICE_0 ROUTE 2 1.428 R25C2C.Q0 to IOL_B7A.CLK ckff -------- 3.933 (37.3% logic, 62.7% route), 2 logic levels.
Report: 823.723MHz is the maximum frequency for this preference.
ВНИМАТЕЛЬНО смотрим Source Clock Path clk to in_MGIOL и Destination Clock Path clk to out_MGIOL !!!! Первый идет от пада clk через разводку, и все. Второй - тоже от пада clk, через разводку, регистр (REG_DEL), и опять разводку (ckff). Короче, усё у полном у порядке!
|
|
|
|
|
Dec 12 2014, 17:25
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424

|
Цитата(SM @ Dec 12 2014, 19:48)  PADI_DEL --- 1.063 36.PAD to 36.PADDI clk ROUTE 2 1.038 36.PADDI to R25C2C.CLK clk_c REG_DEL --- 0.404 R25C2C.CLK to R25C2C.Q0 SLICE_0
Короче, усё у полном у порядке! Похоже.... А SDC ваша тулза не пишет? --- У квартуса таки не впорядке.... generated_clock с выхода делителя начинает отсчёт с НУЛЕВОЙ source_latency, если он create_clock Тайминги считает как будто оба на одной частоте. Если задать как положено - create_generated_clock, то в репорте generated_clock тоже с выхода делителя начинает отсчёт но с НЕНУЛЕВОЙ source_latency Ну и тайминги считает как один быстрый а второй медленее. --- Автоматическое распознавание чегото + констрейны по умолчанию = ЗЛО
|
|
|
|
|
Dec 12 2014, 17:45
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(Torpeda @ Dec 12 2014, 20:25)  Похоже.... А SDC ваша тулза не пишет? А хрен ее знает... Вроде, нет. И не моя она, а латисовская. Она наоборот может, взять SDC-констрейны (и то, немного своеобразные, это ж synplify), и экспортировать их в виде для PAR. Но я обычно и SDC-констрейны синтезатору, и констрейны для PAR, пишу сам, я не пользовался этой возможностью. В данном случае синтезатору вообще констрейнов никаких не дал, а для PAR задал входной клок только. Что касается частоты этого generated clock, то да, конечно, если не писать на него констрейн, он будет считаться как клок той же частоты, какая его и генерировала. Но нам-то важна коррекция холдов на перекрестке доменов, то есть анализ задержки между source и destination clock. От частоты это не зависит. Если надо указать другую частоту, то надо писать констрейн руками. Я об этом, кстати, сразу сказал. И еще, добавлю - это ведь пришлось запрещать синтезатору clock conversion - а совсем-совсем по умолчанию он бы синтезировал бы систему с одним клоком и разрешением от ckff. Вдогонку. К тому, что тулза все правильно поняла. Еще вырезка из отчета STA: Код Clock Domains Analysis ------------------------
Found 2 clocks:
Clock Domain: clk_c Source: clk.PAD Loads: 2 Covered under: FREQUENCY PORT "clk" 125.000000 MHz;
Clock Domain: ckff Source: SLICE_0.Q0 Loads: 2 No transfer within this clock domain is found
Data transfers from: Clock Domain: clk_c Source: clk.PAD Covered under: FREQUENCY PORT "clk" 125.000000 MHz; Transfers: 1 PS К хорошему быстро привыкаешь. Я всегда считал квартус самым продвинутым тулом. А оказывается, не во всем.
|
|
|
|
Сообщений в этой теме
ig_f Пересечение сигналом разных клоковых доменов Dec 10 2014, 13:46 Kuzmi4 2 ig_f
вообще то всегда надо ставить переходники, ... Dec 10 2014, 14:09 TRILLER Цитата(ig_f @ Dec 10 2014, 16:46) 1) Прав... Dec 10 2014, 16:08 des00 Цитата(TRILLER @ Dec 11 2014, 00:08) Нет,... Dec 10 2014, 16:30  TRILLER Цитата(des00 @ Dec 10 2014, 19:30) ..Но в... Dec 10 2014, 19:28 SM Цитата(ig_f @ Dec 10 2014, 16:46) т.е. кл... Dec 10 2014, 16:55 Maverick Цитата(ig_f @ Dec 10 2014, 15:46) Доброго... Dec 10 2014, 18:21 ig_f ЦитатаПрошу прощения, если ненароком оскорбил ТС. ... Dec 10 2014, 21:37 Bad0512 Делать клоки низкой частоты без использования PLL ... Dec 11 2014, 05:32 SM Цитата(ig_f @ Dec 11 2014, 00:37) Нет ник... Dec 11 2014, 08:50 ig_f ЦитатаДелать клоки низкой частоты без использовани... Dec 11 2014, 08:36 Bad0512 Цитата(ig_f @ Dec 11 2014, 14:36) А вообщ... Dec 11 2014, 11:53  SM Цитата(Bad0512 @ Dec 11 2014, 14:53) это ... Dec 11 2014, 12:01   Bad0512 Цитата(SM @ Dec 11 2014, 18:01) Может, но... Dec 11 2014, 12:09    SM Цитата(Bad0512 @ Dec 11 2014, 15:09) поэт... Dec 11 2014, 12:37  ig_f Цитата(Bad0512 @ Dec 11 2014, 14:53) Про ... Dec 11 2014, 14:41   blackfin Цитата(ig_f @ Dec 11 2014, 17:41) Что-то ... Dec 11 2014, 14:49 dxp В каком-то альтеровском документе видел описание п... Dec 11 2014, 13:19 SM Цитата(dxp @ Dec 11 2014, 16:19) ну, чтоб... Dec 11 2014, 13:26  des00 Цитата(SM @ Dec 11 2014, 20:26) А вот кст... Dec 11 2014, 13:40   SM Цитата(des00 @ Dec 11 2014, 16:40) CLKCTR... Dec 11 2014, 13:46    des00 Цитата(SM @ Dec 11 2014, 21:46) Хм. А где... Dec 12 2014, 05:53 blackfin Цитата(dxp @ Dec 11 2014, 16:19) В каком-... Dec 11 2014, 13:44 Torpeda Цитата(ig_f @ Dec 10 2014, 17:46) 1) Прав... Dec 12 2014, 10:05 SM Цитата(Torpeda @ Dec 12 2014, 13:05) каки... Dec 12 2014, 10:10  Torpeda Цитата(SM @ Dec 12 2014, 14:10) Где Вы ту... Dec 12 2014, 10:16   SM Цитата(Torpeda @ Dec 12 2014, 13:16) хмм.... Dec 12 2014, 10:54    Torpeda Цитата(SM @ Dec 12 2014, 14:54) 2) в корн... Dec 12 2014, 14:44     SM Цитата(Torpeda @ Dec 12 2014, 17:44) PS. ... Dec 12 2014, 15:34      Torpeda Цитата(SM @ Dec 12 2014, 18:34) Вот именн... Dec 12 2014, 16:13
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|