реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> ADC DDR and setup slacks
andrew_b
сообщение Sep 28 2015, 10:55
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 972
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Имееется ADC AD6649, выдающая 14-разрядные данные в DDR-режиме на частоте до 250 МГц. Приёмником выступает Cyclone V.

Не получается разводка без ошибок в STA. Причём ошибки в одном и том же месте: на пути от выхода ddio до ближайшего триггера. Там небегает какое-то дикая задержка по данным, что никак не укладывается в 4-нс тактовую. Что с этим делать, я уже не знаю. LogicLock ситуацию не спасает. Задержки меньше, чем без него (естественно), но слаки не уходят.

Приложен минимальный проект: ddio->регистры->выход. Буду признателен, если кто-то взглянет.

Прикрепленные файлы
Прикрепленный файл  slacks.qar.txt ( 3.38 килобайт ) Кол-во скачиваний: 50
 
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Sep 28 2015, 11:32
Сообщение #2


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 645
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(andrew_b @ Sep 28 2015, 13:55) *
Имееется ADC AD6649, выдающая 14-разрядные данные в DDR-режиме на частоте до 250 МГц. Приёмником выступает Cyclone V.

Не получается разводка без ошибок в STA. Причём ошибки в одном и том же месте: на пути от выхода ddio до ближайшего триггера. Там небегает какое-то дикая задержка по данным, что никак не укладывается в 4-нс тактовую. Что с этим делать, я уже не знаю. LogicLock ситуацию не спасает. Задержки меньше, чем без него (естественно), но слаки не уходят.

Приложен минимальный проект: ddio->регистры->выход. Буду признателен, если кто-то взглянет.

Если в первом процессе заменить falling на rising то отрицательные слеки уходят.
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 28 2015, 11:45
Сообщение #3


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 245
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(andrew_b @ Sep 28 2015, 17:55) *
Приложен минимальный проект: 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 клок семплирования подвинуть ?


--------------------
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Sep 28 2015, 11:52
Сообщение #4


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 645
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Вот пример для 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 "**********************************************************"
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 28 2015, 12:03
Сообщение #5


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 245
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(_Anatoliy @ Sep 28 2015, 18:52) *
Вот пример для AD9634.

брррр.

Так. Еще раз. Как у вас сделано :
1. АЦП тактируется от генератора который заходит на CLK ADC. Этот же генератор заходит на ПЛИС. DCO остался висеть в воздухе.
2. АЦП тактируется от генератора который заходит на CLK ADC. На плис заходит DCO.

Какой именно вариант у вас ?


--------------------
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Sep 28 2015, 12:14
Сообщение #6


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 645
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(des00 @ Sep 28 2015, 15:03) *
брррр.

Так. Еще раз. Как у вас сделано :
1. АЦП тактируется от генератора который заходит на CLK ADC. Этот же генератор заходит на ПЛИС. DCO остался висеть в воздухе.
2. АЦП тактируется от генератора который заходит на CLK ADC. На плис заходит DCO.

Какой именно вариант у вас ?

А это к кому вопрос,ко мне или к ТС? У меня в плис заходит сигнал DCO. Ведь времянки в даташите на АЦП приведены относительно его.
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 28 2015, 12:21
Сообщение #7


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 245
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(_Anatoliy @ Sep 28 2015, 19:14) *
А это к кому вопрос,ко мне или к ТС?

Хмм, обчитался. получается вопрос к обоим sm.gif
Цитата
У меня в плис заходит сигнал DCO.

Если заходит то почему он у вас виртуальный?
Цитата
Ведь времянки в даташите на АЦП приведены относительно его.

может я даташиты читаю по другому. В атаче все относительно CLK. И для схемы с использованием DCO актуальны времена tskew
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Sep 28 2015, 12:37
Сообщение #8


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 645
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(des00 @ Sep 28 2015, 15:21) *
может я даташиты читаю по другому. В атаче все относительно CLK. И для схемы с использованием DCO актуальны времена tskew

Зная Tdco времянки легко пересчитать. Одного tskew недостаточно для задания сетапа и холда.
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 28 2015, 12:47
Сообщение #9


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 245
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(_Anatoliy @ Sep 28 2015, 19:37) *
Зная Tdco времянки легко пересчитать. Одного tskew недостаточно для задания сетапа и холда.

На плис приходит поток данных и клок выровненный с ними, внутри ацп уже с учетом tdco, до небольшого перекоса. Если не сложно, расскажите как вы считаете, что считаете и самое главное зачем?


--------------------
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Sep 28 2015, 13:03
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 972
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(des00 @ Sep 28 2015, 15:45) *
Всё странно :
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.
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Sep 28 2015, 13:57
Сообщение #11


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 645
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(des00 @ Sep 28 2015, 15:47) *
Если не сложно, расскажите как вы считаете, что считаете и самое главное зачем?

А зачем? У меня как раз вопросов нет, всё работает с хорошими слэками, просто хотел помочь ТС.
Go to the top of the page
 
+Quote Post
Anton1990
сообщение Sep 28 2015, 15:36
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 148
Регистрация: 26-04-12
Пользователь №: 71 584



Цитата(andrew_b @ Sep 28 2015, 13:55) *
Имееется ADC AD6649, выдающая 14-разрядные данные в DDR-режиме на частоте до 250 МГц. Приёмником выступает Cyclone V.

Не получается разводка без ошибок в STA. Причём ошибки в одном и том же месте: на пути от выхода ddio до ближайшего триггера. Там небегает какое-то дикая задержка по данным, что никак не укладывается в 4-нс тактовую. Что с этим делать, я уже не знаю. LogicLock ситуацию не спасает. Задержки меньше, чем без него (естественно), но слаки не уходят.

Приложен минимальный проект: ddio->регистры->выход. Буду признателен, если кто-то взглянет.


Я использую примерно такуюже микросхему от TexasInstr. Были аналогичные проблемы. Так вот очень советую использовать не сигнал DCO rjnjhsq bltn bp АЦП а завести сигнал тактирования АЦП прямо с генератора на другую ножку ПЛИС ею и защелкивать регистры. Результат стал стабильный и хороший.
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 29 2015, 05:02
Сообщение #13


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 245
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(_Anatoliy @ Sep 28 2015, 21:57) *
А зачем? У меня как раз вопросов нет, всё работает с хорошими слэками, просто хотел помочь ТС.

Помочь мне решить противоречие с моей логикой здравого смысла. TQ вещь предельно тупая, манипуляцией задаваемых цифр я могу выполнить любые констрейны. Смотрю на ваш sdc, вижу что вместо реального, настоящего DCO клока, приходящего на ПЛИС, который может быть адекватно посчитан, вы используете сферического коня в вакууме (виртуальный клок). И вот тут мой принцип физической обоснованности и логики здравого смысла дает сбой.

Думаю в любом случае климатическая камера нас рассудит.

Цитата(andrew_b @ Sep 28 2015, 21:03) *
Использую. Clk он и есть.

теперь стало яснее, покручу вашу болванку


--------------------
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Sep 29 2015, 06:00
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 972
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Anton1990 @ Sep 28 2015, 19:36) *
Так вот очень советую использовать не сигнал DCO rjnjhsq bltn bp АЦП а завести сигнал тактирования АЦП прямо с генератора на другую ножку ПЛИС ею и защелкивать регистры. Результат стал стабильный и хороший.
К сожалению, плата у же есть. Во-вторых, DCO будет меняться в зависимости от режима работы всего устройства. 250 МГц -- это его максимальное значение, но может быть и меньше.

Upd. Пара скриншотов.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 29 2015, 07:04
Сообщение #15


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 245
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Мне удобнее с верилогом работать. Поправил код :
Код
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ке
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th September 2018 - 08:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.00952 секунд с 7
ELECTRONIX ©2004-2016