Клоки мультиплексируемые внутри
Иногда требуется сделать мультиплексор клоков внутри ПЛИС. В этом случае при разводке квартус должен учесть задержку тактовой частоты на мультиплексоре и обеспечить выполнение времянки триггеров, которые работают на мультиплексированном клоке. Рассмотрим пример простого мультиплексора. Положим, что глитч при переключении не важен.
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
Рекомендую ознакомиться, особенно с первой
- « первая
- ‹ предыдущая
- of 3
Комментарии
Отправить комментарий