en-valb 0 16 декабря, 2022 Опубликовано 16 декабря, 2022 (изменено) · Жалоба Всем доброго дня! Прошу помочь, не могу разобраться, что делаю не так. Имеется: 1. SoCKit 2. AD/DA Data Conversion Card Генерирую ЛЧМ сигнал с помощью NCO. С помощью TimeQuest в GUI задал констрейны: 1. На входную тактовую частоту 50 МГц поступающую на PLL. 2. create_generated_clock на порождаемый с помощью PLL клок 100 МГц от входного клока 50 МГц 3. На выходную тактовую частоту из ПЛИС для DAC которая является дифференциальной. Для каждого порта dac_clk_p и dac_clk_n отдельный create_generated_clock исходя из соображений, что эти клоки порождаемые от выходной из PLL частоты 100 МГц. а) Правильно ли я тут сделал, исходя из того что assign dac_clk_p = clk_100MHz; assign dac_clk_n = ~clk_100MHz; б) Нужно ли мне объединять в эксклюзивную группу dac_clk_p и dac_clk_n? Как я понял в группу объединяются синхронные клоки здесь как раз такой случай. 4. set_output_delay -min и set_output_delay -max на порты поступающие от ПЛИС на ЦАП относительно dac_clk_p. В соответствии с datasheet на ЦАП для -min задал значение th = 3.8 nS, для -max tsu = 2.9 nS. Проблема в том, что если не задавать констрейны set_output_delay сигнал на выходе ЦАП чистый, но если задать сигнал зашумлен (иголки). Предполагаю, что я не верно задаю set_output_delay и ухудшаю параметры по tsu/th сигналов поступающих на ЦАП. dds.out.sdc dds.out_Set_Output_Delay.sdc Изменено 16 декабря, 2022 пользователем en-valb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 16 декабря, 2022 Опубликовано 16 декабря, 2022 · Жалоба Quote Правильно ли Нет. Дифференциальный сигнал это не пара инверсных сигналов. Дифференциальный сигнал формируется либо инстанцированием специального буфера, либо прописыванием специального констрейна. А выходной клок формируется буфером DDR. А формировать клок для ЦАП в ФПЖА очень плохая идея. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
en-valb 0 19 декабря, 2022 Опубликовано 19 декабря, 2022 · Жалоба On 12/16/2022 at 5:15 PM, andrew_b said: Нет. Дифференциальный сигнал это не пара инверсных сигналов. Дифференциальный сигнал формируется либо инстанцированием специального буфера, либо прописыванием специального констрейна. А выходной клок формируется буфером DDR. А формировать клок для ЦАП в ФПЖА очень плохая идея. andrew_b, благодарю за помощь, планировал от внешнего 10 МГц все затактировать, но видимо придется 100 МГц генератор покупать. В pin planer для входной частоты сделал I/O Standart дифференциальный вход. Теперь этот вход 100 МГц (раньше был 50 МГц). Подключил его на PLL. У PLL теперь на входе и выходе 100 МГц. Оставил его(PLL) так как далее скорее всего понадобятся другие частоты. sdc файл полностью переделал, во вложении. Остальное пока не трогал. На AD/DA Data Conversion Card допаял перемычку на R111 чтобы вход CLK сделать униполярным и подал на него с генератора 100 МГц. Все картинки на осциллографе хорошие, но пока не заданы констрейны set_output_delay. Буду разбираться как их описать под новую конфигурацию схемы тактирования ЦАП. dds.out.sdc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
en-valb 0 19 декабря, 2022 Опубликовано 19 декабря, 2022 (изменено) · Жалоба Переключил внутреннюю логику на входную частоту от которой непосредственно ЦАП тактируется, выход PLL сейчас висит не подключенный. Задал констрейны: set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[0]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[0]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[1]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[1]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[2]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[2]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[3]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[3]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[4]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[4]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[5]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[5]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[6]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[6]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[7]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[7]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[8]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[8]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[9]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[9]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[10]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[10]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[11]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[11]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[12]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[12]}] set_output_delay -add_delay -max -clock [get_clocks {refclk}] 2.900 [get_ports {lfm_out[13]}] set_output_delay -add_delay -min -clock [get_clocks {refclk}] 3.800 [get_ports {lfm_out[13]}] Сигнал на осциллографе хороший. На диаграмме выше видно, что запускающий clock задержан на 7.308 ns. Или это можно рассматривать как сдвиг фазы на 7.308 ns? Тогда нужно фазу пододвинуть, с помощью PLL наверное? Изменено 19 декабря, 2022 пользователем en-valb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 19 декабря, 2022 Опубликовано 19 декабря, 2022 · Жалоба Ваш случай описан в Timequest для чайников. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
en-valb 0 19 декабря, 2022 Опубликовано 19 декабря, 2022 · Жалоба 1 hour ago, Flip-fl0p said: Ваш случай описан в Timequest для чайников. Source-Synchronus Output Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 19 декабря, 2022 Опубликовано 19 декабря, 2022 · Жалоба примитив DDIO чайники выдумали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
en-valb 0 19 декабря, 2022 Опубликовано 19 декабря, 2022 (изменено) · Жалоба Вот что получилось: Создал виртуальный клок dac_clk #************************************************************** # Create Clock #************************************************************** create_clock -name {refclk} -period 10.000 -waveform { 0.000 5.000 } [get_ports {refclk}] create_clock -name {dac_clk} -period 10.000 -waveform { 0.000 5.000 } Объединил входной клок refclk и виртуальный клок dac_clk в эксклюзивную группу #************************************************************** # Set Clock Groups #************************************************************** set_clock_groups -exclusive -group [get_clocks {dac_clk refclk}] И переписал set_output_delay #************************************************************** # Set Output Delay #************************************************************** # максимальная задержка клока до ПЛИС (задержка от источника тактовой частоты до плис по печатным проводникам через разъем HSMC) set CLK_bs_delay_max 0.2 # максимальная задержка данных от ПЛИС до ЦАП (задержка данных от портов плис по печатным проводникам через разъем HSMC до ЦАП) set DATA_delay_max 0.5 # минимальная задержка клока до ЦАП (задержка от источника тактовой частоты через мультиплексор 0.7 ns + буфер дифпары минимальная задержка 0.9 ns) set CLK_bd_delay_min 1.6 #(tSU ЦАП по справочнику) set tSU 2.9 # минимальная задержка клока до ПЛИС (задержка от источника тактовой частоты до плис по печатным проводникам через разъем HSMC) set CLK_bs_delay_min 0.2 # минимальная задержка данных от ПЛИС до ЦАП (задержка данных от портов плис по печатным проводникам через разъем HSMC до ЦАП) set DATA_delay_min 0.5 # максимальная задержка клока до ЦАП (задержка от источника тактовой частоты через мультиплексор 0.7 ns + буфер дифпары минимальная задержка 2.5 ns) set CLK_bd_delay_max 3.2 #(tH ЦАП по справочнику) set tH 3.8 set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[0]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[0]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[1]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[1]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[2]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[2]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[3]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[3]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[4]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[4]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[5]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[5]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[6]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[6]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[7]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[7]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[8]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[8]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[9]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[9]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[10]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[10]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[11]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[11]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[12]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[12]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[13]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[13]}] Теперь на диаграмме вижу, что запускающий клок это refclk, а защелкивающий клок это dac_clk Картина поменялась в лучшую сторону, но все еще не достаточно. Теперь как я понимаю необходимо подключить тактирование внутренней логики к выходу PLL и немного пододвинуть запускающий клок? 36 minutes ago, krux said: примитив DDIO чайники выдумали? Вы это имеете ввиду? module ddio( input wire d0, input wire d1, input wire clk, output wire out ); reg r_d0; reg r_d1; always @(posedge clk) begin r_d0 <= d0; r_d1 <= d1; end assign out = clk ? r_d0 : r_d1; endmodule Сейчас у меня вот так Такой вариант хуже? DDIO мне наверное не нужен, мне дифференциальную пару тактового сигнала на ПЛИС завести надо, а на ЦАП идет 14-ти разрядная параллельная шина униполярных сигналов. Изменено 19 декабря, 2022 пользователем en-valb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
en-valb 0 19 декабря, 2022 Опубликовано 19 декабря, 2022 (изменено) · Жалоба 1 hour ago, en-valb said: Вот что получилось: Создал виртуальный клок dac_clk #************************************************************** # Create Clock #************************************************************** create_clock -name {refclk} -period 10.000 -waveform { 0.000 5.000 } [get_ports {refclk}] create_clock -name {dac_clk} -period 10.000 -waveform { 0.000 5.000 } Объединил входной клок refclk и виртуальный клок dac_clk в эксклюзивную группу #************************************************************** # Set Clock Groups #************************************************************** set_clock_groups -exclusive -group [get_clocks {dac_clk refclk}] И переписал set_output_delay #************************************************************** # Set Output Delay #************************************************************** # максимальная задержка клока до ПЛИС (задержка от источника тактовой частоты до плис по печатным проводникам через разъем HSMC) set CLK_bs_delay_max 0.2 # максимальная задержка данных от ПЛИС до ЦАП (задержка данных от портов плис по печатным проводникам через разъем HSMC до ЦАП) set DATA_delay_max 0.5 # минимальная задержка клока до ЦАП (задержка от источника тактовой частоты через мультиплексор 0.7 ns + буфер дифпары минимальная задержка 0.9 ns) set CLK_bd_delay_min 1.6 #(tSU ЦАП по справочнику) set tSU 2.9 # минимальная задержка клока до ПЛИС (задержка от источника тактовой частоты до плис по печатным проводникам через разъем HSMC) set CLK_bs_delay_min 0.2 # минимальная задержка данных от ПЛИС до ЦАП (задержка данных от портов плис по печатным проводникам через разъем HSMC до ЦАП) set DATA_delay_min 0.5 # максимальная задержка клока до ЦАП (задержка от источника тактовой частоты через мультиплексор 0.7 ns + буфер дифпары минимальная задержка 2.5 ns) set CLK_bd_delay_max 3.2 #(tH ЦАП по справочнику) set tH 3.8 set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[0]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[0]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[1]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[1]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[2]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[2]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[3]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[3]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[4]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[4]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[5]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[5]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[6]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[6]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[7]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[7]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[8]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[8]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[9]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[9]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[10]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[10]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[11]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[11]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[12]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[12]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] [get_ports {lfm_out[13]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] [get_ports {lfm_out[13]}] Теперь на диаграмме вижу, что запускающий клок это refclk, а защелкивающий клок это dac_clk Картина поменялась в лучшую сторону, но все еще не достаточно. Теперь как я понимаю необходимо подключить тактирование внутренней логики к выходу PLL и немного пододвинуть запускающий клок? Вы это имеете ввиду? module ddio( input wire d0, input wire d1, input wire clk, output wire out ); reg r_d0; reg r_d1; always @(posedge clk) begin r_d0 <= d0; r_d1 <= d1; end assign out = clk ? r_d0 : r_d1; endmodule Сейчас у меня вот так Такой вариант хуже? DDIO мне наверное не нужен, мне дифференциальную пару тактового сигнала на ПЛИС завести надо, а на ЦАП идет 14-ти разрядная параллельная шина униполярных сигналов. Не выходит каменный цветок! Двинул фазу на +90, Time Ques перестал выдавать ошибки, но сигнал на выходе ЦАП испортился. Изменено 19 декабря, 2022 пользователем en-valb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 декабря, 2022 Опубликовано 19 декабря, 2022 · Жалоба а можно глупый вопрос On 12/16/2022 at 6:57 PM, en-valb said: 2. AD/DA Data Conversion Card По этой ссылке плата от терасиков, в даташите которой указано Quote The D/A converter (U3 for channel A and B) on the Data Conversion HSMC provides 14-bit resolution and produces samples at rates up to 275 MSPS. It is a high-speed TI DAC5672 D/A converter and is set up to drive a differential-to-single output through a transformer. а в даташите на DAC5672-EP указано Quote Timing – Dual-Bus Mode tsu Input setup time 1 ns th Input hold time 1 ns Timing – Single-Bus Interleaved Mode tsu Input setup time 0.5 ns th Input hold time 0.5 ns а вы ставите On 12/16/2022 at 6:57 PM, en-valb said: 4. set_output_delay -min и set_output_delay -max на порты поступающие от ПЛИС на ЦАП относительно dac_clk_p. В соответствии с datasheet на ЦАП для -min задал значение th = 3.8 nS, для -max tsu = 2.9 nS откуда вы взяли эти цифры? задержка по плате 0.1нс максимум. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
en-valb 0 19 декабря, 2022 Опубликовано 19 декабря, 2022 · Жалоба 20 minutes ago, des00 said: а можно глупый вопрос По этой ссылке плата от терасиков, в даташите которой указано а в даташите на DAC5672-EP указано а вы ставите откуда вы взяли эти цифры? задержка по плате 0.1нс максимум. А ведь действительно, видимо глянул в даташит ADC по ошибке, на бумажку выписал tsu и th, и больше не сверялся. Внимательности у меня конечно не занимать. Премного благодарен!!! Сейчас все исправлю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
en-valb 0 19 декабря, 2022 Опубликовано 19 декабря, 2022 · Жалоба На счет задержки по плате, у AD/DA Data Conversion Card между CLK_IN_P куда я генератор подключил и ЦАП стоит две микросхемы, мультиплексор и буфер. На мультиплексор по даташит propagation delay 0.7 ns, а на буфер от 0.9 ns до 2.5 ns дополнительно какая то задержка по плате, пусть 0.1 ns. В сторону ПЛИС тактовая идет напрямую через разъем на выводы AA26, AB27. Соответственно в формулу я должен включить суммарную задержку CLK_bd_delay_min = 0.7+0.9+0.1 и CLK_bd_delay_max = 0.7+2.5+0.1. Я правильно понимаю? Стало значительно лучше! #************************************************************** # Set Output Delay #************************************************************** # максимальная задержка клока до ПЛИС (задержка от источника тактовой частоты до плис по печатным проводникам через разъем HSMC) set CLK_bs_delay_max 0.1 # максимальная задержка данных от ПЛИС до ЦАП (задержка данных от портов плис по печатным проводникам через разъем HSMC до ЦАП) set DATA_delay_max 0.1 # минимальная задержка клока до ЦАП (задержка от источника тактовой частоты через мультиплексор 0.7 ns + буфер дифпары минимальная задержка 0.9 ns) #set CLK_bd_delay_min 3.45 set CLK_bd_delay_min 3.3 #(tSU ЦАП по справочнику) set tSU 1.0 #set tmax [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] set tmax [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max] # минимальная задержка клока до ПЛИС (задержка от источника тактовой частоты до плис по печатным проводникам через разъем HSMC) set CLK_bs_delay_min 0.1 # минимальная задержка данных от ПЛИС до ЦАП (задержка данных от портов плис по печатным проводникам через разъем HSMC до ЦАП) set DATA_delay_min 0.1 # максимальная задержка клока до ЦАП (задержка от источника тактовой частоты через мультиплексор 0.7 ns + буфер дифпары минимальная задержка 2.5 ns) #set CLK_bd_delay_max 5.55 set CLK_bd_delay_max 1.7 #(tH ЦАП по справочнику) set tH 1.0 #set tmin [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] set tmin [expr $CLK_bs_delay_min - $tH + $DATA_delay_min] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[0]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[0]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[1]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[1]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[2]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[2]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[3]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[3]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[4]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[4]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[5]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[5]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[6]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[6]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[7]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[7]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[8]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[8]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[9]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[9]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[10]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[10]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[11]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[11]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[12]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[12]}] set_output_delay -add_delay -max -clock [get_clocks {dac_clk}] $tmax [get_ports {lfm_out[13]}] set_output_delay -add_delay -min -clock [get_clocks {dac_clk}] $tmin [get_ports {lfm_out[13]}] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
en-valb 0 19 декабря, 2022 Опубликовано 19 декабря, 2022 (изменено) · Жалоба Добавил задержку CLK по плате на ЦАП, Time Quest ругаться перестал. #************************************************************** # Set Output Delay #************************************************************** # максимальная задержка клока до ПЛИС (задержка от источника тактовой частоты до плис по печатным проводникам через разъем HSMC) set CLK_bs_delay_max 0.1 # максимальная задержка данных от ПЛИС до ЦАП (задержка данных от портов плис по печатным проводникам через разъем HSMC до ЦАП) set DATA_delay_max 0.1 # минимальная задержка клока до ЦАП (задержка от источника тактовой частоты через мультиплексор 0.7 ns + буфер дифпары минимальная задержка 0.9 ns) #set CLK_bd_delay_min 3.45 set CLK_bd_delay_min 3.3 #(tSU ЦАП по справочнику) set tSU 1.0 set tmax [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] #set tmax [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max] # минимальная задержка клока до ПЛИС (задержка от источника тактовой частоты до плис по печатным проводникам через разъем HSMC) set CLK_bs_delay_min 0.1 # минимальная задержка данных от ПЛИС до ЦАП (задержка данных от портов плис по печатным проводникам через разъем HSMC до ЦАП) set DATA_delay_min 0.1 # максимальная задержка клока до ЦАП (задержка от источника тактовой частоты через мультиплексор 0.7 ns + буфер дифпары минимальная задержка 2.5 ns) #set CLK_bd_delay_max 5.55 set CLK_bd_delay_max 1.7 #(tH ЦАП по справочнику) set tH 1.0 set tmin [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] #set tmin [expr $CLK_bs_delay_min - $tH + $DATA_delay_min] Но теперь по холду подозрительно огромный запас получился. Я видимо с CLK_bd_delay_min и CLK_bd_delay_max перестарался, хотя вроде как по даташиту. Изменено 19 декабря, 2022 пользователем en-valb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 декабря, 2022 Опубликовано 19 декабря, 2022 · Жалоба 34 minutes ago, en-valb said: Я правильно понимаю? Да, TQ же ничего не знает о том, что вы тактируете. Поэтому и тактовая виртуальная, потому что физически ее в ПЛИС нет. Если они идут разными путями, то можно: 1. Задать фазировку приходящей в ПЛИС тактовой и виртуальной, в долях периода или в нс 2. Учесть эту разницу в задержках распространения сигналов. 9 minutes ago, en-valb said: Но теперь по холду подозрительно огромный запас получился. У вас чип способен работать на 250МГц = 4нс, вы его ставите, как я понял, на 100МГц = 10нс. tsu всего 1нс, если вы попадает в первую четверть периода 10нс, естественно у вас запас на холд будет лошадиный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
en-valb 0 19 декабря, 2022 Опубликовано 19 декабря, 2022 · Жалоба Вот теперь правильный и hold и setup!!! Значения перепутал, в min и max. В min вбил значение максимальной задержки, а в max значение минимальной задержки. #************************************************************** # Set Output Delay #************************************************************** # максимальная задержка клока до ПЛИС (задержка от источника тактовой частоты до плис по печатным проводникам через разъем HSMC) set CLK_bs_delay_max 0.1 # максимальная задержка данных от ПЛИС до ЦАП (задержка данных от портов плис по печатным проводникам через разъем HSMC до ЦАП) set DATA_delay_max 0.1 # минимальная задержка клока до ЦАП (задержка от источника тактовой частоты через мультиплексор 0.7 ns + буфер дифпары минимальная задержка 0.9 ns) #set CLK_bd_delay_min 3.45 set CLK_bd_delay_min 1.7 #(tSU ЦАП по справочнику) set tSU 1.0 set tmax [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max - $CLK_bd_delay_min] #set tmax [expr $CLK_bs_delay_max + $tSU + $DATA_delay_max] # минимальная задержка клока до ПЛИС (задержка от источника тактовой частоты до плис по печатным проводникам через разъем HSMC) set CLK_bs_delay_min 0.1 # минимальная задержка данных от ПЛИС до ЦАП (задержка данных от портов плис по печатным проводникам через разъем HSMC до ЦАП) set DATA_delay_min 0.1 # максимальная задержка клока до ЦАП (задержка от источника тактовой частоты через мультиплексор 0.7 ns + буфер дифпары минимальная задержка 2.5 ns) #set CLK_bd_delay_max 5.55 set CLK_bd_delay_max 3.3 #(tH ЦАП по справочнику) set tH 1.0 set tmin [expr $CLK_bs_delay_min - $tH + $DATA_delay_min - $CLK_bd_delay_max] #set tmin [expr $CLK_bs_delay_min - $tH + $DATA_delay_min] Теперь похоже на правду). des00, благодарю за помощь от всей души!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться