Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Десериализатор для LVDS данных АЦП на Stratix3
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Костян
Итак кристалл Stratix3 С-2. Симулятор Modelsim 6.5d SE
Делаю десериализатор для потока LVDS данных с АЦП, который представляет собой сдвиговый регистр (не использую аппаратные serdes ).
Исходник десериализатора в аттаче.

SDC файл следующего вида
CODE
create_clock -name {clk} -period 20.020 -waveform { 0.000 10.01 } [get_ports {clk}]
create_clock -name {adc_clk0} -period 2.860 -waveform { 0.540 1.970 } [get_ports { adc_clk0 }]
create_clock -name {adc_frame} -period 20.020 -waveform { 2.700 12.710 } [get_ports {adc_frame}]



сигнал adc_clk180 также описан выше как (и констрейн для него автоматически определен)
CODE
assign adc_clk180 = ~adc_clk0;


RTL симуляция проходит успехно, timequest дает положительные слаки (минимальный для adc_clk0 состовляет порядка 0.3 нс ). Но Post fir симуляция проходит не корректно (хотя моделсим не ругается на setup/hold), выходные данные идут с произвольным сдвигом.


Подскажите, где возможная ошибка и как ее найти ?


з.ы
поясню
adc_clk0 есть сигнал DCO c АЦП
adc_frame - FCO
DmitryR
Для начала стоит убедиться, что всем входам назначен Fast Input Register. Далее, сигнал строба также имеет смысл сначала защелкивать, а потом использовать. После этих проверок можно брать post-fit модель и смотреть внутри, где же конкретно все раскосячивается. Блок небольшой - разобраться будет нетрудно, я думаю.
Костян
QUOTE (DmitryR @ Dec 27 2010, 14:38) *
Для начала стоит убедиться, что всем входам назначен Fast Input Register.

Было указано.

QUOTE
Далее, сигнал строба также имеет смысл сначала защелкивать, а потом использовать.

Спасибо, делаю след образом


CODE
    reg adc_frame_d;
    always @(posedge adc_clk0)
                adc_frame_d <= adc_frame;

где adc_frame - строб FCO

соответственно контрейн
CODE
create_generated_clock -name {adc_deser_small:adc_mod1|adc_frame_d} -source [get_ports {adc_frame}] -divide_by 1 -multiply_by 1 [get_registers {adc_deser_small:adc_mod1|adc_frame_d}]


Слаки положительные, но timequest дает варнинг.

QUOTE
Warning: No paths exist between clock target "adc_deser_small:adc_mod1|adc_frame_d" of clock "adc_deser_small:adc_mod1|adc_frame_d" and its clock source. Assuming zero source clock latency.

Что бы это значило ?


Modelsim по прежнему выдает не корректные результат post fir simulate
sazh
Цитата(Костян @ Dec 27 2010, 17:34) *
adc_frame - FCO


Этот сигнал у Вас и клоком и данными одновременно выступает. Есть регистры, ena - сформированы из adc_frame, наверно к клоку не привязан.
Может сначала 1 канал отладить.
Костян
QUOTE (sazh @ Dec 28 2010, 12:11) *
Может сначала 1 канал отладить.

Этим уже сейчас и занимаюсь.

Просматривая Technology Map Viewer заметил, что первый триггер сдвигового регистра положительных данных data_ch_shift_p располагается в pad-e , тогда как триггер негативных данных data_ch_shift_n уже в ячейках.
Т.к констрейна на входные данные нет, то по всей видимости timequest не ругается на сие, а моделсим же показывать стал при упрощении проекта некорректный setup для первого триггера data_ch_shift_n.

Убрать атрибут Fast Input Register со входа данных. Но встает тогда вопрос, какой констрейн задать на входные данные, чтобы timequest их просчитывал (ошибок нету, а моделсим ругается на $setup time)?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.