TimeQuest для чайников. Часть 4 (Как много интерфейсов разных)
- altera |
- constrains |
- TimeQuest |
- ПЛИС
Source-Synchronus Input
Вот мы и подходим к последнему типу рассматриваемых интерфейсов. Как мы уже рассматривали в таких интерфейсах тактовая частота идет от отдельного генератора или источника. И в данном случае описание констрейнов идет через виртуальный клок. Рассмотрим опять наш АЦП
module adc (input clk, input [9 : 0] adc_dat, output logic [9 : 0] data);
logic [9 : 0] adc_io_reg;
logic [9 : 0] adc_reg;
always_ff @(posedge clk) begin
{adc_reg, adc_io_reg} <= {adc_io_reg, adc_dat};
end
always_ff @(posedge clk) begin
data <= adc_reg;
end
endmodule
sdc файл в этом случае будет следующий
set_time_format -unit ns -decimal_places 3
derive_clock_uncertainty
create_clock -period 100MHz -name {clk} [get_ports {clk}]
create_clock -period 100MHz -name {virt_clk}
set_clock_groups -exclusive -group {clk virt_clk}
set CLK_as_delay_max [expr 30.0*0.007]
set CLK_as_delay_min [expr 30.0*0.007]
set CLK_ad_delay_max [expr 30.0*0.007]
set CLK_ad_delay_min [expr 30.0*0.007]
set ADC_DATA_delay_max [expr 20.0*0.007]
set ADC_DATA_delay_min [expr 20.0*0.007]
set ADC_Tco_max 6.5
set ADC_Tco_min 2.5
set_input_delay -clock {virt_clk} -max [expr $CLK_as_delay_max + $ADC_Tco_max + $ADC_DATA_delay_max - $CLK_ad_delay_max] [get_ports {adc_dat[*]}]
set_input_delay -clock {virt_clk} -min [expr $CLK_as_delay_min + $ADC_Tco_min + $ADC_DATA_delay_min - $CLK_ad_delay_min] [get_ports {adc_dat[*]}]
Как вы видите sdc файл аналогичен тому что использовался для Source Synchronus Output и построен по тем же правилам. Собираем, запускаем анализ и
Как видите все в шоколаде %)
Вот мы с вами и закончили рассмотрение самой большой и требующей тонкой настройки и шаманства область приложения TimeQuest. Некоторые могут сказать "зачем нам что-то констрейнить и так сойдет", что ж это их право. Я же думаю, что знать, что твое устройство будет работать во всех Worst Case без ошибок по времянке лучше, чем сидеть и ждать пока где-то эта ошибка выстрелит %)
- блог пользователя des00
- 65433 просмотра
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика 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 на русский микропроцессор КРОЛИК
Комментарии
Спасибо Автору! Всё очень
Спасибо, поправил
Спасибо, поправил
Самоя первая картинка не
Самоя первая картинка не соответствует превью.(я так понимаю превью правильнее)
(уточнение) Самая первая
(уточнение)
Самая первая картинка на 3й странице не соответствует превью.(я так понимаю превью правильнее)
set_output_delay -clock
set_output_delay -clock [get_clocks {oclk}] -min -5.0 [get_ports {data[*]}]
как получается что мин делай отрицательная, как понять это физически????
я понимаю она вычислялась по формуле OmD = min tD (EXT) – tH (EXT) – max tCS (EXT),
Физически это понимается
Отправить комментарий