TimeQuest для чайников. Приложение 1 (Внешняя обратная связь по клоку).
- ПЛИС |
- TimeQuest |
- constrains |
- altera
Вопрос возник на форуме electronix.ru и его правильное решение предложили пользователи des333 и SM. Я в этом вопросе целиком и полностью опростоволосился %).
Задача такая, как правильно описать констрены для такой системы
Как видите, клоки 50 и 100 МГц получены в разных местах, но передача данных между клоками есть. Для корректного выравнивания этих клоков нужно прописать между ними временные соотношения. Но тут есть тонкости : время задержки проводников по сигналам 200МГц и 100МГц и временные параметры внешнего делителя частоты. На рисунке видно 3нс, но положим что диапазон задержек делителя 3/5нс.
Для простоты рассмотрения исключим PLL из рассмотрения
module clock_fb (input iclk50MHz, iclk200MHz, iclk100MHz, input idat, output oclk200MHz, odat);
assign oclk200MHz = iclk200MHz;
logic [1 : 0] dat;
always_ff @(posedge iclk100MHz) begin
dat <= (dat << 1) | idat;
end
always_ff @(posedge iclk50MHz) begin
odat <= dat[1];
end
endmodule
правильный sdc файл будет такой
# base clocks
create_clock -name clk50MHz -period 50MHz [get_ports {iclk50MHz}]
create_clock -name clk200MHz -period 200MHz [get_ports {iclk200MHz}]
# output path of feeback
create_generated_clock -name oclk200MHz -source [get_ports {iclk200MHz}] [get_ports {oclk200MHz}]
# input path of feeback
create_generated_clock -name clk100MHz -source oclk200MHz -divide_by 2 -offset 4 [get_ports {iclk100MHz}]
# used uncertanty
set_clock_uncertainty -to [get_clocks clk100MHz] 1
set_clock_uncertainty -from [get_clocks clk100MHz] -to [get_clocks clk50MHz] 1
# synchronus transfers
set_clock_groups -exclusive -group {clk50MHz clk100MHz}
Рассмотрим те места sdc файла, на которые нужно обратить внимание
create_generated_clock -name oclk200MHz -source [get_ports {iclk200MHz}] [get_ports {oclk200MHz}]
Здесь все понятно, описываем клок в 200МГц, который выдаем наружу
create_generated_clock -name clk100MHz -source oclk200MHz -divide_by 2 -offset 4 [get_ports {iclk100MHz}]
А вот этой строкой, мы описываем внешний делитель, со смещением сигнала по времени на 4нс. Почему именно 4нс? Потому что используется среднее время задержки сигнала на внешнем делителе. Как же так скажете вы, у нас же диапазон задержки 3/5нс. А вот и он
set_clock_uncertainty -to [get_clocks clk100MHz] 1
set_clock_uncertainty -from [get_clocks clk100MHz] -to [get_clocks clk50MHz] 1
Мы задали нестабильность клока 100МГц в 1нс. Т.е. задержка клоков может изменяться в пределах 4нс ± 1нс. Всё, остальное выравнивание Квартус должен сделать сам. Собираем, запускаем и видим предупреждение от ТаймКвеста
Warning: No paths exist between clock target "iclk100MHz" of clock "clk100MHz" and its clock source. Assuming zero source clock latency.
Он пишет что не нашел источника частоты 100МГц, но мы то знаем где этот источник и прописали положение клока от него по времени. Поэтому на это предупреждение можно забить.Но теперь посмотрим на вейвформы которые рисует Таймквест. Делаем Report All Core Timings, смотрим передачу сигнала с частоты 100МГц, на частоту 50МГц и видим
А видим мы то, что TimeQuest не учел задержку от порта iclk200MHz до порта oclk200MHz. Очень странно не так ли. Лечиться это строкой
set_clock_latency -source 0 [get_clocks {clk100MHz}]
Смотрим что в итоге
В итоге все встало на свои места. Но вот только не понятно, почему TimeQuest, утверждая
Assuming zero source clock latency
Делает не правильный анализ. Отсюда второе правило TimeQuest.
Доверяй, но проверяй!!!
Будте осторожны %)
- блог пользователя des00
- 20547 просмотров
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика Imprecise Bus Faults в микроконтроллерах Cortex-M3/M4/M4F
- Self-powered камера
- Фоновый модулятор: беспроводная связь из ничего (перевод)
- Texas Instruments Analog Applications Journal SLYT612 "Снижение искажений в аналоговых КМОП ключах" (перевод)
- USB MSD. Часть 6. Команды SCSI (перевод)
- USB MSD. Часть 3. USB класс накопителей данных (перевод)
- Texas Instruments Application Report SBAA042 "Кодовые схемы, используемые в аналогово-цифровых преобразователях" (перевод)
- 10 принципов правильного интерфейса
- Релиз SDK на русский микропроцессор КРОЛИК
Комментарии
Отправить комментарий