Перейти к содержанию
    

LVDS передатчик

Приветствую.

На ПЛИС 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[*]}]

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

image.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как Вы определяете то, что передатчик не работает ?

Какого типа приемник center-aligned или edge-aligned

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как Вы определяете то, что передатчик не работает ?

Какого типа приемник center-aligned или edge-aligned

center-aligned

tsetup и thold 0.2 нс

Я принимаю данные на приемнике и они не совпадают с ожидаемым. Начинаю двигать фазу и данные появляются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

center-aligned

tsetup и thold 0.2 нс

Я принимаю данные на приемнике и они не совпадают с ожидаемым. Начинаю двигать фазу и данные появляются.

Ну все правильно. Вы констрейните будто у Вас приёмник edge-aligned. А вам нужно center-aligned. Попробуйте проинвертировать клок. (более подробно почитайте статьях des00 timequest для чайников).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто у меня сложилось впечатление, что задержки min max не начто не влияют. Какие бы цифры я не пробывал ставить, предупреждений нет. У внешнего приемника нет тербований как должен быть расположен клок - center-aligned или edge-aligned. Есть только тербование tsetup и thold 0.2 нс.

Если я ставлю клок без инверсии, и приведенные выше задержки -0.25 0.25, что должно соответствовать edge-aligned, то не работает, точнее может работать или нет в зависимости от компиляции. Например, если добавить или убрать signaltap. Если поменять фазу на 180, то работает, вне зависимости от констрейтов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Вы откуда эту схему взяли? Попробуйте проверенную - выходной клок пропускается через DDR-регистр, в качестве клока подается выход pll, на один из входов данных 1, на второй 0. Таким образом, задержки до DDR-регистров по умолчанию компилятор выровняет согласно общим ограничениям, а от выхода DDR до пина разброс будет минимальным между клоком и данными.

Вы привели описание временных ограничений, но никак не прокомментировали отчет TQ - применились они или нет, были ошибки (если да, то пути и что квартус попытался сделать). Для того, чтобы комментировать описанную Вами ситуацию, не хватает данных. Для начала откройте отчет и убедитесь, что в списке ignored_constraints отсутствуют описанные выше сигналы.

ЗЫ. Еще один момент - для DDR же вроде описываются ограничения и для фронта и для спада отдельно с ключами -rise/fall.

ЗЫЫ. Меня одного смутило, что у ТС max отрицательное значение имеет, а min положительное? Вроде как в данном случае описывается нестабильность клока относительно нулевой точки анализа - минимальная задержка слева от нуля, максимальная задержка справа, а тут у меня что-то заклинило...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ошибся когда переносил 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. линии данных и клока в каждом канале выровнены относительно друг друга.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все нужные мне пути добавляются в 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 для этих путей, то видны все нужные пути.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...