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

 
 
 
Reply to this topicStart new topic
> LVDS передатчик, sdc constraints для LVDS
Denisnovel
сообщение Dec 19 2017, 18:11
Сообщение #1


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

Группа: Свой
Сообщений: 101
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Приветствую.
На ПЛИС Arria V сделал LVDS SerDes с внешней PLL, как показано на рисунке. Кроме данных на внешний выход подается тактовая частота с этой же PLL с отдельного выхода(c0-c2 для передатчика и c3 на внешный выход).
Как мне описать задержки клока? Сейчас описываю примерно так
Код
#Делаем новый клок на выходе.
create_clock -period 8.0 -name fpga_clk [get_ports fpga_clk]
derive_pll_clocks
create_generated_clock -source [get_pins {inst1|altpll_component|auto_generated|pll1|clk[1]}] -name ssync_tx_clk_ext [get_ports {ssync_tx_clk}]
set_output_delay -clock ssync_tx_clk_ext -max -0.25 [get_ports {ssync_tx_data[*]}]
set_output_delay -clock ssync_tx_clk_ext -min 0.25 [get_ports {ssync_tx_data[*]}]

Но данный констрейт не влияет на работу схемы. Как бы я не задавал задержки, анализатор пишет что все хорошо, хотя схема при этом не работает.

Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Dec 19 2017, 18:55
Сообщение #2


В поисках себя...
****

Группа: Свой
Сообщений: 595
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



А как Вы определяете то, что передатчик не работает ?
Какого типа приемник center-aligned или edge-aligned
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Dec 19 2017, 21:34
Сообщение #3


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

Группа: Свой
Сообщений: 101
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Цитата(Flip-fl0p @ Dec 19 2017, 21:55) *
А как Вы определяете то, что передатчик не работает ?
Какого типа приемник center-aligned или edge-aligned

center-aligned
tsetup и thold 0.2 нс
Я принимаю данные на приемнике и они не совпадают с ожидаемым. Начинаю двигать фазу и данные появляются.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Dec 20 2017, 05:30
Сообщение #4


В поисках себя...
****

Группа: Свой
Сообщений: 595
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(Denisnovel @ Dec 20 2017, 00:34) *
center-aligned
tsetup и thold 0.2 нс
Я принимаю данные на приемнике и они не совпадают с ожидаемым. Начинаю двигать фазу и данные появляются.

Ну все правильно. Вы констрейните будто у Вас приёмник edge-aligned. А вам нужно center-aligned. Попробуйте проинвертировать клок. (более подробно почитайте статьях des00 timequest для чайников).
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Dec 20 2017, 06:35
Сообщение #5


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

Группа: Свой
Сообщений: 101
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Просто у меня сложилось впечатление, что задержки min max не начто не влияют. Какие бы цифры я не пробывал ставить, предупреждений нет. У внешнего приемника нет тербований как должен быть расположен клок - center-aligned или edge-aligned. Есть только тербование tsetup и thold 0.2 нс.
Если я ставлю клок без инверсии, и приведенные выше задержки -0.25 0.25, что должно соответствовать edge-aligned, то не работает, точнее может работать или нет в зависимости от компиляции. Например, если добавить или убрать signaltap. Если поменять фазу на 180, то работает, вне зависимости от констрейтов.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Dec 20 2017, 08:12
Сообщение #6


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

Группа: Свой
Сообщений: 1 078
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(Denisnovel @ Dec 19 2017, 21:11) *
Но данный констрейт не влияет на работу схемы. Как бы я не задавал задержки, анализатор пишет что все хорошо, хотя схема при этом не работает.

Вы откуда эту схему взяли? Попробуйте проверенную - выходной клок пропускается через DDR-регистр, в качестве клока подается выход pll, на один из входов данных 1, на второй 0. Таким образом, задержки до DDR-регистров по умолчанию компилятор выровняет согласно общим ограничениям, а от выхода DDR до пина разброс будет минимальным между клоком и данными.
Вы привели описание временных ограничений, но никак не прокомментировали отчет TQ - применились они или нет, были ошибки (если да, то пути и что квартус попытался сделать). Для того, чтобы комментировать описанную Вами ситуацию, не хватает данных. Для начала откройте отчет и убедитесь, что в списке ignored_constraints отсутствуют описанные выше сигналы.
ЗЫ. Еще один момент - для DDR же вроде описываются ограничения и для фронта и для спада отдельно с ключами -rise/fall.
ЗЫЫ. Меня одного смутило, что у ТС max отрицательное значение имеет, а min положительное? Вроде как в данном случае описывается нестабильность клока относительно нулевой точки анализа - минимальная задержка слева от нуля, максимальная задержка справа, а тут у меня что-то заклинило...
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Dec 20 2017, 13:21
Сообщение #7


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

Группа: Свой
Сообщений: 101
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Ошибся когда переносил min max. Сейчас попробовал сделать с использованием ALTDDIO_OUT. При этом c0_cl - клок, которым тактируется tx_inclock. Какие то каналы работают с инверсией, какие-то без. Результат зависит от компиляции. Все клоки видны в отчете. Сейчас есть только ошибка minimum pulse width на входе регистров, на которые подаются datain_h datain_l.
Код
ddr_clk ddr_clk_cl
            (
              .datain_h  (1'b1),
              .datain_l  (1'b0),
              .outclock  (c0_cl),
              .dataout   (ClientTxClk)
            );
Либо  приходится делать так:
ddr_clk ddr_clk_cl
            (
              .datain_h  (1'b0),
              .datain_l  (1'b1),
              .outclock  (c0_cl),
              .dataout   (ClientTxClk)
            );



Код
create_generated_clock -name lvds_clk0 -source [get_pins {*lvds_ln_gen[0]*ddr_clk*|ALTDDIO_OUT_component|auto_generated|ddio_outa[0]|muxsel}] -invert [get_ports {LvdsTxClk[0]}]
create_generated_clock -name lvds_clk1 -source [get_pins {*lvds_ln_gen[1]*ddr_clk*|ALTDDIO_OUT_component|auto_generated|ddio_outa[0]|muxsel}]  [get_ports {LvdsTxClk[1]}]
create_generated_clock -name lvds_clk2 -source [get_pins {nam1.ddr_clk_cl|ALTDDIO_OUT_component|auto_generated|ddio_outa[0]|muxsel}]   [get_ports {ClientTxClk}]
#Tsu Th 0.25 +0.025 extra
set_output_delay  -clock [get_clocks lvds_clk0] -min -0.275ns  [get_ports *LvdsTxData[0][*]* ]
set_output_delay  -clock [get_clocks lvds_clk0] -max  0.275ns  [get_ports *LvdsTxData[0][*]* ]
set_output_delay  -clock [get_clocks lvds_clk1] -min -0.275ns  [get_ports *LvdsTxData[1][*]* ]
set_output_delay  -clock [get_clocks lvds_clk1] -max  0.275ns  [get_ports *LvdsTxData[1][*]* ]
set_output_delay  -clock [get_clocks lvds_clk2] -min -0.275ns  [ get_ports *ClientTxData[*]* ]
set_output_delay  -clock [get_clocks lvds_clk2] -max  0.275ns  [ get_ports *ClientTxData[*]* ]

p.s. линии данных и клока в каждом канале выровнены относительно друг друга.
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Dec 21 2017, 09:35
Сообщение #8


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

Группа: Свой
Сообщений: 101
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Все нужные мне пути добавляются в set_false_path. Причем добавляются автоматически.
Цитата
The TimeQuest Timing Analyzer automatically adds the required multicycle path, false
path, and clock uncertainty constraints to analyze timing for the dedicated SERDES if
you add derive_pll_clocks to your Synopsys Design Constraints (.sdc) file.

Если сделать report_timing -false_path для этих путей, то видны все нужные пути.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th May 2018 - 02:10
Рейтинг@Mail.ru


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