Dootch 0 28 апреля, 2017 Опубликовано 28 апреля, 2017 · Жалоба Добрый день, решил разобраться с заданием временных ограничений. Допустим есть простой проект: на входную ногу ПЛИС поступает частота 50 МГц (имя пина 50_MHz_5B_1), внутри одна делится счетчиком Джонсона на выходе которого сигнал Q1, синхронный с входной частотой. Частота 50 Мгц выводится на ногу GPIO1, сигнал Q1 на ногу GPIO2. Создаю .sdc файл, где прописываю параметры клока create_clock -name top_clk -period 20.000 [get_ports {50_MHz_5B_1}] Компилирую проект и смотрю осциллографом задержку между фронтом клока и фронтом сигнала Q1 на ногах ПЛИС. Задержка составляет 3,5 нс. Теперь вопросы: Могу я прописыванием констрейнов менять эту задержку? Я прописывал в sdc фале следующие строки: set_output_delay -clock top_clk 5.5 [get_ports {GPIO2}] - после компиляции ничего не меняется set_output_delay -clock clk -reference_pin [get_ports clkout] 5.5 [get_ports myout*] - - после компиляции ничего не меняется Что я делаю не так? ПЛИС Cyclone V E, Quartus 15.0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 28 апреля, 2017 Опубликовано 28 апреля, 2017 · Жалоба еще бы -max и -min атрибутики бы выставить в то какой вы путь определяете. Задержка составляет 3,5 нс. set_output_delay -clock top_clk 5.5 ну собственно ничего и не должно, :) задержка не может быть точной, она может быть в воротах. Потому что от температуры и питания плавает. так что ограничивайте ее сверху или снизу, но не задавайте точно, это невозможно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dootch 0 28 апреля, 2017 Опубликовано 28 апреля, 2017 · Жалоба еще бы -max и -min атрибутики бы выставить в то какой вы путь определяете. ну собственно ничего и не должно, :) задержка не может быть точной, она может быть в воротах. Потому что от температуры и питания плавает. так что ограничивайте ее сверху или снизу, но не задавайте точно, это невозможно. В описании команды set_output_delay написано -reference_pin <name> Specifies a port in the design to which the output delay is relative то есть если я напишу так: set_output_delay -clock top_clk -min 1.2 -reference_pin [get_ports {GPIO1}] [get_ports {GPIO2}] set_output_delay -clock top_clk -max 2.2 -reference_pin [get_ports {GPIO1}] [get_ports {GPIO2}] то задержка между сигналами на ножках будет в диапазоне 1,2-2,2 нс? а если напишу: set_output_delay -clock top_clk -min 1.2 [get_ports {GPIO2}] set_output_delay -clock top_clk -max 2.2 [get_ports {GPIO2}] то сигнал будет задержан относительно клока где-то внутри схемы, а на пины они выведутся с непредсказуемой задержкой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dootch 0 11 мая, 2017 Опубликовано 11 мая, 2017 · Жалоба В процессе изучения возникли дополнительные вопросы: проект такой же как ранее на входную ногу ПЛИС поступает частота 50 МГц (имя пина 50_MHz_5B_1), внутри одна делится счетчиком Джонсона на выходе которого сигнал Q1, синхронный с входной частотой. Частота 50 МГц выводится на ногу GPIO1, сигнал Q1 на ногу GPIO2. в .sdc файле прописываю параметры клока create_clock -name top_clk -period 20.000 [get_ports {50_MHz_5B_1}] и затем set_net_delay -min 4.0 -from [get_nets {50_MHz_5B_1~inputCLKENA0}] set_net_delay -max 6.0 -from [get_nets {50_MHz_5B_1~inputCLKENA0}] как я понимаю этими констрейнами я ограничил сверху и снизу значение задержки от входа частоты до всех мест куда эта частота поступает. В моем случае это 32 clk входа D-триггеров счетчика Джонсона. После компиляции открываю TimeQuest и выполняю report_net_delay. Как видно в отчете TimeQuest прописывает разные Actual значения задержек для констрейна min и max. На графике я привел графики значений задержек для min и max. Далее я выполнил команду report_net_timing, где указал в target get_nets {50_MHz_5B_1~inputCLKENA0}, в консоль вывелась другая таблица задержек: ======================================================================= ====== # : RR , FR , RF , FF : Destination Pin Name (Location) ============================================================================= Node 50_MHz_5B_1~inputCLKENA0|outclk has fanout = 33 --> 1 : 3.131, -----, -----, 2.899 : UART_RX~output|i ( IOOBUF_X10_Y0_N53 ) --> 2 : 2.430, -----, -----, 2.139 : inst13|\delay_line:0:zuzu|clk ( FF_X10_Y1_N55 ) --> 3 : 2.430, -----, -----, 2.139 : inst13|\delay_line:1:zuzu|clk ( FF_X10_Y1_N34 ) --> 4 : 2.430, -----, -----, 2.139 : inst13|\delay_line:2:zuzu|clk ( FF_X10_Y1_N59 ) --> 5 : 2.430, -----, -----, 2.139 : inst13|\delay_line:3:zuzu|clk ( FF_X10_Y1_N17 ) --> 6 : 2.430, -----, -----, 2.139 : inst13|\delay_line:4:zuzu|clk ( FF_X10_Y1_N23 ) --> 7 : 2.430, -----, -----, 2.139 : inst13|\delay_line:5:zuzu|clk ( FF_X10_Y1_N20 ) --> 8 : 2.430, -----, -----, 2.139 : inst13|\delay_line:6:zuzu|clk ( FF_X10_Y1_N7 ) --> 9 : 2.430, -----, -----, 2.139 : inst13|\delay_line:7:zuzu|clk ( FF_X10_Y1_N38 ) --> 10 : 2.430, -----, -----, 2.139 : inst13|\delay_line:8:zuzu|clk ( FF_X10_Y1_N47 ) --> 11 : 2.430, -----, -----, 2.139 : inst13|\delay_line:9:zuzu|clk ( FF_X10_Y1_N10 ) --> 12 : 2.430, -----, -----, 2.139 : inst13|\delay_line:10:zuzu|clk ( FF_X10_Y1_N4 ) --> 13 : 2.430, -----, -----, 2.139 : inst13|\delay_line:11:zuzu|clk ( FF_X10_Y1_N49 ) --> 14 : 2.431, -----, -----, 2.141 : inst13|\delay_line:12:zuzu|clk ( FF_X9_Y1_N35 ) --> 15 : 2.431, -----, -----, 2.141 : inst13|\delay_line:13:zuzu|clk ( FF_X9_Y1_N10 ) --> 16 : 2.431, -----, -----, 2.141 : inst13|\delay_line:14:zuzu|clk ( FF_X9_Y1_N4 ) --> 17 : 2.431, -----, -----, 2.141 : inst13|\delay_line:15:zuzu|clk ( FF_X9_Y1_N41 ) --> 18 : 2.431, -----, -----, 2.141 : inst13|\delay_line:16:zuzu|clk ( FF_X9_Y1_N14 ) --> 19 : 2.431, -----, -----, 2.141 : inst13|\delay_line:17:zuzu|clk ( FF_X9_Y1_N43 ) --> 20 : 2.431, -----, -----, 2.141 : inst13|\delay_line:18:zuzu|clk ( FF_X9_Y1_N50 ) --> 21 : 2.431, -----, -----, 2.141 : inst13|\delay_line:19:zuzu|clk ( FF_X9_Y1_N31 ) --> 22 : 2.431, -----, -----, 2.141 : inst13|\delay_line:20:zuzu|clk ( FF_X9_Y1_N29 ) --> 23 : 2.431, -----, -----, 2.141 : inst13|\delay_line:21:zuzu|clk ( FF_X9_Y1_N25 ) --> 24 : 2.431, -----, -----, 2.141 : inst13|\delay_line:22:zuzu|clk ( FF_X9_Y1_N56 ) --> 25 : 2.431, -----, -----, 2.141 : inst13|\delay_line:23:zuzu|clk ( FF_X9_Y1_N58 ) --> 26 : 2.431, -----, -----, 2.141 : inst13|\delay_line:24:zuzu|clk ( FF_X9_Y1_N37 ) --> 27 : 2.431, -----, -----, 2.141 : inst13|\delay_line:25:zuzu|clk ( FF_X9_Y1_N8 ) --> 28 : 2.431, -----, -----, 2.141 : inst13|\delay_line:26:zuzu|clk ( FF_X9_Y1_N17 ) --> 29 : 2.430, -----, -----, 2.139 : inst13|\delay_line:27:zuzu|clk ( FF_X10_Y1_N43 ) --> 30 : 2.430, -----, -----, 2.139 : inst13|\delay_line:28:zuzu|clk ( FF_X10_Y1_N53 ) --> 31 : 2.430, -----, -----, 2.139 : inst13|\delay_line:29:zuzu|clk ( FF_X10_Y1_N26 ) --> 32 : 2.430, -----, -----, 2.139 : inst13|\delay_line:30:zuzu|clk ( FF_X10_Y1_N32 ) --> 33 : 2.430, -----, -----, 2.139 : inst13|\delay_line:31:zuzu|clk ( FF_X10_Y1_N28 ) ============================================================================= На график я также вывел значения задержек в полях RR и FF. Как видно из графика все значения разные. Вопросы в том почему отличаются результаты report_net_delay и report_net_timing? И что все-таки обозначают задержки min и max? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 11 мая, 2017 Опубликовано 11 мая, 2017 · Жалоба там можно открыть и посмотреть из чего складывается время. Подозреваю что одно из них это только путь от выхода триггера до входа включая логику. А другое от выхода до выхода, с учетом времени защелки и разбежки клоков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться