我正在生成一个分频时钟,如下所示:
logic div_clk;
always_ff @(posedge clk or negedge rstb) begin
if(!rstb) div_clk <= 1'b0;
else div_clk <= !div_clk;
end
然后我在clk
上启动数据并在div_clk
上捕获。像这样:
always_ff @(posedge clk) begin
clk_data <= something;
end
always_ff @(posedge div_clk) begin
div_clk_data <= clk_data;
end
在仿真中,由于clk_data
与div_clk
的更新同时发生,并且div_clk_data
的值错误,因此我遇到了竞争状况。
在综合中,我通过创建一个生成的时钟将这两个时钟定义为同步:
create_clock -name CLK [get_ports clk]
create_generated_clock -name GEN_DIV_CLK -source [get_ports clk] -divide_by 2 [get_pins div_clk]
是否可以在RTL中放入等效项,或者可以告诉模拟器div_clk
与clk
同步并防止发生竞争情况?
答案 0 :(得分:3)
在这种情况下,不应使用NBA。如果希望时钟保持同步,则时钟树中不应包含任何NBA(包括门控时钟)。