|
Как подать сигнал одновременно на несколько триггеров? |
|
|
|
Mar 18 2014, 09:16
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976

|
Всем доброго времени суток!
Подскажите как сделать так чтобы сигнал с ножки ПЛИС или выхода триггера приходил одновременно на D-входы нескольких триггеров, т.е. время распространения сигнала от источника до каждого триггера дожно быть максимально одинаковым.
Пробовал описать нужный сигнал как clock, но оказалась что разница в задержках колеблется до 0.8нс, хочется иметь не более 0.5нс. ПЛИС - Cyclone II.
|
|
|
|
|
Mar 18 2014, 10:01
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498

|
Цитата(Viwon @ Mar 18 2014, 13:16)  Всем доброго времени суток!
Подскажите как сделать так чтобы сигнал с ножки ПЛИС или выхода триггера приходил одновременно на D-входы нескольких триггеров, т.е. время распространения сигнала от источника до каждого триггера дожно быть максимально одинаковым.
Пробовал описать нужный сигнал как clock, но оказалась что разница в задержках колеблется до 0.8нс, хочется иметь не более 0.5нс. ПЛИС - Cyclone II. Можно попробовать использовать пины одного банка. К примеру у Xilinx Spartan есть на каждом банке по 8 глобальных пинов. 16 из которых являются глобальными на всем доменном пространстве, а вторая половина (тоже 16) на левой и правой доменных частях.
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Mar 18 2014, 10:16
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976

|
Цитата(ZASADA @ Mar 18 2014, 13:52)  а смысл? главное чтобы они относительно общего clk выдерживали setup/hold time. Это нужно для того чтобы с высокой точностью определить время прихода сигнала. Схема следующая: Есть 4 триггера, каждый из которых тактуется частотой 250МГц, но смещенной на 0, 90, 180 и 270 градусов, соответственно. На D-входы подается интересующий сигнал. Таким образом, по состоянию триггеров можно определить в какой четверти появился сигнал, имеем разрешающую способность около 1нс.
|
|
|
|
|
Mar 19 2014, 06:37
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976

|
Про DDR режим не совсем понял, как это работает, но если это требует перепайки, то этот вариант отпадает т.к. имею дело с готовым устройством.
А как Quartus'у сказать, чтобы он поместил триггеры в один LAB?
|
|
|
|
|
Mar 20 2014, 05:30
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976

|
to SMСпасибо! Если set_*_delay ни как не повлияло, то set_location_assignment, очень даже помогло. В один LAB все триггеры мне поместить не удалось, видимо в LAB’е не может быть больше 2х тактовых сигналов, но разместив в соседние LAB'ы, удалось добиться разницы в задержке меньше 0.2нс, в зависимости от реализации триггеров.
|
|
|
|
|
Mar 20 2014, 10:12
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(ZASADA @ Mar 20 2014, 11:59)  У второго циклона даже аппаратной поддержки DDR нет, DDR IO регистры он сам пихает в LAB. Каждый LAB имеет два тактовых сигнала, а нам нужно четыре, два прямых и два инверсных. Инверторы клоков общие на весь LAB, так что вместить всё в один LAB никак. На ECP2 у меня в аналогичной ситуации и аналогичным способом получилось skew 0.2-0.5нс в зависимости от везения. Там правда, ещё есть констрейн MAX_SKEW, но на разводку он почти не влияет, только на проверку, так что тоже пришлось руками фиксировать триггеры.
|
|
|
|
|
Mar 27 2014, 09:52
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976

|
Цитата(SM @ Mar 27 2014, 12:40)  То, что пути исключены из временного анализа, как раз и приводит к тому, что оно как развелось, так и развелось, без какой либо оптимизации. Так что, как вариант, второй способ сделать время повторяемым, кроме ручного вставления LUT, может быть, задание жесткого set_max_delay на путь, чтобы он не давал возможностей втыкать эти feeder-ы, или жесткие set_max_delay и set_min_delay одновременно, чтобы он разводку делал в совсем жестких временных рамках... А как правильно все это дело описать? Вот к примеру следующий код: CODE module TRIGGERS(DATA, SIGNALa, CLK); output [3:0] DATA; input SIGNALa; input CLK; reg [3:0] triggers; always @(posedge CLK) triggers <= {4{SIGNALa}}; assign DATA = triggers; endmodule SDC-файл: CODE create_clock -name "CLK" -period 4.000ns [get_ports {CLK}] create_clock -name "SIGNALa" -period 1.000us [get_ports {SIGNALa}]
set_clock_groups -asynchronous -group {SIGNALa}
set_max_delay 7.039ns -from [get_ports {SIGNALa}] -to triggers[*] set_min_delay 7.035ns -from [get_ports {SIGNALa}] -to triggers[*] SIGNALa – внешний асинхронный сигнал, не знаю как его правильно описать, описываю как асинхронный clock. В итоге TimeQuest все проглотил, но вместо требуемых 7.035-7.039нс, Цитата report_path -from {SIGNALa} -to {triggers[*]} -npaths 10 -panel_name {Report Path} выдает 6.900нс. Проект в Quartus 13.0
triggers.zip ( 4.37 килобайт )
Кол-во скачиваний: 59
|
|
|
|
|
Mar 27 2014, 10:05
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Какой же он клок? Не надо его клоком объявлять. Только set_max_delay, и все.
А вилка 7.035...7.039 не реализуема, должен быть либо холд виолейшн, либо сетап, так как min_delay считается для быстрого угла PVT, а max_delay - для медленного угла... Так что вилку min..max надо подбирать эмпирически как-то...
И еще, set_min/max_delay в ква учитывают еще и путь клока, и сетап внутреннего триггера. так что надо внимательно изучать репорт, что он туда навключал... Там много лишнего будет
|
|
|
|
|
Mar 27 2014, 10:19
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976

|
Цитата(SM @ Mar 27 2014, 14:05)  Какой же он клок? Не надо его клоком объявлять. Только set_max_delay, и все. В таком случае выдает "Critical Warning (332148): Timing requirements not met" Не выполняется условие Hold(Launch Clock - n/a) А report_path выдает 9.660нс. Цитата(SM @ Mar 27 2014, 14:05)  А вилка 7.035...7.039 не реализуема, должен быть либо холд виолейшн, либо сетап, так как min_delay считается для быстрого угла PVT, а max_delay - для медленного угла... Так что вилку min..max надо подбирать эмпирически как-то 9.660нс для 3х триггеров и 9.661 для четвертого. Цитата(SM @ Mar 27 2014, 14:05)  Только set_max_delay, и все. Если только set_max_delay без set_min_delay. То предупреждений описаных выше нет, но задерка все равно не та
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|