TimeQuest для чайников. Часть 3 (Клоки как вас много)
- ПЛИС |
- TimeQuest |
- constrains |
- altera
Клоки мультиплексируемые внутри
Иногда требуется сделать мультиплексор клоков внутри ПЛИС. В этом случае при разводке квартус должен учесть задержку тактовой частоты на мультиплексоре и обеспечить выполнение времянки триггеров, которые работают на мультиплексированном клоке. Рассмотрим пример простого мультиплексора. Положим, что глитч при переключении не важен.
module mux (input sel, clk1, clk2, dat1, dat2, output oclk, output logic odat) ;
assign mux_clk = sel ? clk1 : clk2;
assign mux_dat = sel ? dat1 : dat2;
always_ff @(posedge mux_clk) begin
odat <= mux_dat;
end
assign oclk = mux_clk;
endmodule
sdc файл для такого проекта выглядит очень просто
derive_clock_uncertainty
create_clock -period 100MHz -name {clk1} [get_ports {clk1}]
create_clock -period 100MHz -name {clk2} [get_ports {clk2}]
set_clock_groups -exclusive -group {clk1} -group {clk2}
Как видите командой описания отношения клоков, мы говорим, что клоки clk1 и clk2 представляют собой эксклюзивные группы, т.е. цепь mux_clk рассматривается либо нагруженная клоком clk1, либо клоком clk2. Всё, больше ничего не нужно описывать. Остальное Quartus и TimeQuest определит и сделает сам.
Клоки мультиплексируемые снаружи
Есть системы, когда на один и тот же тактовый вход ПЛИС могут подаваться разные тактовые частоты. В этом случае надо создать несколько логических клоков на одном физическим пине
create_clock -period 100MHz -name {clk_100MHz} [get_ports {clk}]
create_clock -period 50MHz -name {clk_50MHz} [get_ports {clk}] -add
create_clock -period 10MHz -name {clk_10MHz} [get_ports {clk}] -add
Всё, анализ времянок на выполнение будет произведен по всем этим клокам автоматически.
Итого
Как видите алгоритм действия многочастотных проектах везде один :
1. Описать все клоки, идушие снаружи ПЛИС (create_clock)
2. Описать все клоки, генерируемые внутри ПЛИС (create_generated_clock/derive_pll_clocks)
3. Описать их соотношения, определив группы связанных клоков (set_clock_groups)
Алгоритм простой и понятный как автомат Калашникова. Как и обещал, ничего сложного %)
PS. Нашел в сети заметки об особенностях комманды set_closk_groups от Альтера Гуру
Using the set_clock_groups command without hiding domain-crossing signals
Рекомендую ознакомиться, особенно с первой
- блог пользователя des00
- 35548 просмотров
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика 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 на русский микропроцессор КРОЛИК
Комментарии
Отправить комментарий