andrew_b 14 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба Имееется ADC AD6649, выдающая 14-разрядные данные в DDR-режиме на частоте до 250 МГц. Приёмником выступает Cyclone V. Не получается разводка без ошибок в STA. Причём ошибки в одном и том же месте: на пути от выхода ddio до ближайшего триггера. Там небегает какое-то дикая задержка по данным, что никак не укладывается в 4-нс тактовую. Что с этим делать, я уже не знаю. LogicLock ситуацию не спасает. Задержки меньше, чем без него (естественно), но слаки не уходят. Приложен минимальный проект: ddio->регистры->выход. Буду признателен, если кто-то взглянет. slacks.qar.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба Имееется ADC AD6649, выдающая 14-разрядные данные в DDR-режиме на частоте до 250 МГц. Приёмником выступает Cyclone V. Не получается разводка без ошибок в STA. Причём ошибки в одном и том же месте: на пути от выхода ddio до ближайшего триггера. Там небегает какое-то дикая задержка по данным, что никак не укладывается в 4-нс тактовую. Что с этим делать, я уже не знаю. LogicLock ситуацию не спасает. Задержки меньше, чем без него (естественно), но слаки не уходят. Приложен минимальный проект: ddio->регистры->выход. Буду признателен, если кто-то взглянет. Если в первом процессе заменить falling на rising то отрицательные слеки уходят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба Приложен минимальный проект: ddio->регистры->выход. Всё странно : 1. В этом АЦП есть специальный пин DCO (digital clock output), выровненный к данным, как раз что бы не иметь проблем с захватом сигнала с АЦП. Вы его не используете. 2. В ячейке ввода вывода сыклона 5, есть специальный, дополнительный триггер, для инверсного канала. Специально что бы выравнивать данные. Как _Anatoliy указал, полярность тактовой бы сменить. 3.1 Если вы не используете DCO, то неясно соотношение сдвига тактовых на АЦП и ПЛИС. При этом не понятно как учитывается tdco = 6.7нс для этого чипа. 3.2 Если ваш клок это и есть DCO, то вы должны были учитывать обе границы tskew [0.4:1.0]нс. 3.3 Что мешает на PLL клок семплирования подвинуть ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба Вот пример для AD9634. #************************************************************** # Set Input Delay #************************************************************** create_clock -period $tDCO -name {virt_clk_in} set_clock_groups -asynchronous -group {virt_clk_in} -group {ClkAdc} # clock source to source clock pin delay set clkAs_delay_max 0.0 #[expr 30.0*0.010] set clkAs_delay_min 0.0 #[expr 30.0*0.005] # clock source to destination clock pin delay # 30mm 0.010 ns/mm set clkAd_delay_max [expr 30.0*0.010] set clkAd_delay_min [expr 30.0*0.005] # source to destination data pins delay set bdA_delay_max [expr 30.0*0.010] set bdA_delay_min [expr 30.0*0.005] #ADC parameters AD9634 set tPD_min 4.1 set tPD_max 5.2 set tDCO_min 4.7 set tDCO_max 5.8 set tCLK 9.3 set Tco_max [expr $tCLK/2 - $tDCO_min + $tPD_max] set Tco_min [expr $tCLK/2 - $tDCO_max + $tPD_min] #set Tco_max 6.5 #set Tco_min 2.5 set usedTsu [expr $clkAs_delay_max + $Tco_max + $bdA_delay_max - $clkAd_delay_min] set usedTh [expr $clkAs_delay_min + $Tco_min + $bdA_delay_min - $clkAd_delay_max] set_input_delay -clock {virt_clk_in} -max $usedTsu [get_ports {InAdc[*]}] set_input_delay -clock {virt_clk_in} -min $usedTh [get_ports {InAdc[*]}] post_message "**********************************************************" post_message "***Tco_max = $Tco_max ns" post_message "***Tco_min = $Tco_min ns" post_message "***usedTsu = $usedTsu ns" post_message "***usedTh = $usedTh ns" post_message "**********************************************************" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба Вот пример для AD9634. брррр. Так. Еще раз. Как у вас сделано : 1. АЦП тактируется от генератора который заходит на CLK ADC. Этот же генератор заходит на ПЛИС. DCO остался висеть в воздухе. 2. АЦП тактируется от генератора который заходит на CLK ADC. На плис заходит DCO. Какой именно вариант у вас ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба брррр. Так. Еще раз. Как у вас сделано : 1. АЦП тактируется от генератора который заходит на CLK ADC. Этот же генератор заходит на ПЛИС. DCO остался висеть в воздухе. 2. АЦП тактируется от генератора который заходит на CLK ADC. На плис заходит DCO. Какой именно вариант у вас ? А это к кому вопрос,ко мне или к ТС? У меня в плис заходит сигнал DCO. Ведь времянки в даташите на АЦП приведены относительно его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба А это к кому вопрос,ко мне или к ТС? Хмм, обчитался. получается вопрос к обоим :) У меня в плис заходит сигнал DCO. Если заходит то почему он у вас виртуальный? Ведь времянки в даташите на АЦП приведены относительно его. может я даташиты читаю по другому. В атаче все относительно CLK. И для схемы с использованием DCO актуальны времена tskew Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба может я даташиты читаю по другому. В атаче все относительно CLK. И для схемы с использованием DCO актуальны времена tskew Зная Tdco времянки легко пересчитать. Одного tskew недостаточно для задания сетапа и холда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба Зная Tdco времянки легко пересчитать. Одного tskew недостаточно для задания сетапа и холда. На плис приходит поток данных и клок выровненный с ними, внутри ацп уже с учетом tdco, до небольшого перекоса. Если не сложно, расскажите как вы считаете, что считаете и самое главное зачем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба Всё странно : 1. В этом АЦП есть специальный пин DCO (digital clock output), выровненный к данным, как раз что бы не иметь проблем с захватом сигнала с АЦП. Вы его не используете. Использую. Clk он и есть. 2. В ячейке ввода вывода сыклона 5, есть специальный, дополнительный триггер, для инверсного канала.Ну так в ddio три триггера и используются. Специально что бы выравнивать данные. Как _Anatoliy указал, полярность тактовой бы сменить.Я пробовал по-разному. Слаки были во всех случаях, но были разные. 3.2 Если ваш клок это и есть DCO, то вы должны были учитывать обе границы tskew [0.4:1.0]нс.В самих IO слаков нет. Я вижу слаки у DinHi_f и DinLo_f, то есть не в IO, а в ALM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба Если не сложно, расскажите как вы считаете, что считаете и самое главное зачем? А зачем? У меня как раз вопросов нет, всё работает с хорошими слэками, просто хотел помочь ТС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anton1990 0 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба Имееется ADC AD6649, выдающая 14-разрядные данные в DDR-режиме на частоте до 250 МГц. Приёмником выступает Cyclone V. Не получается разводка без ошибок в STA. Причём ошибки в одном и том же месте: на пути от выхода ddio до ближайшего триггера. Там небегает какое-то дикая задержка по данным, что никак не укладывается в 4-нс тактовую. Что с этим делать, я уже не знаю. LogicLock ситуацию не спасает. Задержки меньше, чем без него (естественно), но слаки не уходят. Приложен минимальный проект: ddio->регистры->выход. Буду признателен, если кто-то взглянет. Я использую примерно такуюже микросхему от TexasInstr. Были аналогичные проблемы. Так вот очень советую использовать не сигнал DCO rjnjhsq bltn bp АЦП а завести сигнал тактирования АЦП прямо с генератора на другую ножку ПЛИС ею и защелкивать регистры. Результат стал стабильный и хороший. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба А зачем? У меня как раз вопросов нет, всё работает с хорошими слэками, просто хотел помочь ТС. Помочь мне решить противоречие с моей логикой здравого смысла. TQ вещь предельно тупая, манипуляцией задаваемых цифр я могу выполнить любые констрейны. Смотрю на ваш sdc, вижу что вместо реального, настоящего DCO клока, приходящего на ПЛИС, который может быть адекватно посчитан, вы используете сферического коня в вакууме (виртуальный клок). И вот тут мой принцип физической обоснованности и логики здравого смысла дает сбой. Думаю в любом случае климатическая камера нас рассудит. Использую. Clk он и есть. теперь стало яснее, покручу вашу болванку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба Так вот очень советую использовать не сигнал DCO rjnjhsq bltn bp АЦП а завести сигнал тактирования АЦП прямо с генератора на другую ножку ПЛИС ею и защелкивать регистры. Результат стал стабильный и хороший.К сожалению, плата у же есть. Во-вторых, DCO будет меняться в зависимости от режима работы всего устройства. 250 МГц -- это его максимальное значение, но может быть и меньше. Upd. Пара скриншотов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба Мне удобнее с верилогом работать. Поправил код : module slacks #(parameter pDAT_W = 14) (input Clk, input [pDAT_W-1 : 0] Din, output logic [pDAT_W-1 : 0] dout_re, dout_im); logic [pDAT_W-1 : 0] ddio__dataout_h; logic [pDAT_W-1 : 0] ddio__dataout_l; logic [pDAT_W-1 : 0] dat_re [2]; logic [pDAT_W-1 : 0] dat_im [2]; altddio_in #( .intended_device_family ( "Cyclone V" ) , .invert_input_clocks ( "OFF" ) , .lpm_hint ( "UNUSED" ) , .lpm_type ( "altddio_in" ) , .power_up_high ( "OFF" ) , .width ( pDAT_W ) ) ddio ( .datain ( Din ), .inclock ( Clk ), .dataout_h ( ddio__dataout_h ), .dataout_l ( ddio__dataout_l ), .aclr (1'b0), .aset (1'b0), .inclocken (1'b1), .sclr (1'b0), .sset (1'b0) ); always_ff @(posedge Clk) begin {dat_re[1], dat_re[0]} <= {dat_re[0], ddio__dataout_h}; {dat_im[1], dat_im[0]} <= {dat_im[0], ddio__dataout_l}; // dout_re <= dat_re[1]; dout_im <= dat_im[1]; end endmodule Сделал, адекватный, по моему мнению, sdc set_time_format -unit ns -decimal_places 3 set CLK_PERIOD 4.0 create_clock -name {Clk} -period $CLK_PERIOD [get_ports {Clk}] set tskew_min 0.4 set tskew_max 1.0 # setup set_input_delay -clock {Clk} -rise -max 1.0 [get_ports {Din[*]}] -add_delay set_input_delay -clock {Clk} -clock_fall -fall -max 1.0 [get_ports {Din[*]}] -add_delay # hold set_input_delay -clock {Clk} -rise -min -0.4 [get_ports {Din[*]}] -add_delay set_input_delay -clock {Clk} -clock_fall -fall -min -0.4 [get_ports {Din[*]}] -add_delay # remove incorrect from-to paths set_false_path -rise_from [get_clocks {Clk}] -through [get_pins -compatibility_mode ddio*\|datain] -fall_to [get_clocks {Clk}] set_false_path -fall_from [get_clocks {Clk}] -through [get_pins -compatibility_mode ddio*\|datain] -rise_to [get_clocks {Clk}] И вот дальше не понимаю чем занимается квартус. Пути до регистров, одного вектора, отличаются на 2 нс (см. скрин). Картинка в чип эдиторе и просмотрщике ресурсов, вызывает подозрение на багу софта. Я не понимаю как так происходит. из вариантов вижу подвинуть клок на PLLке или на lcell. Либо сделать все на PLLке Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться