System verilog 在RTL仿真中将生成的时钟定义为同步
我正在生成一个分割时钟,类似这样:System verilog 在RTL仿真中将生成的时钟定义为同步,system-verilog,System Verilog,我正在生成一个分割时钟,类似这样: logic div_clk; always_ff @(posedge clk or negedge rstb) begin if(!rstb) div_clk <= 1'b0; else div_clk <= !div_clk; end always_ff @(posedge clk) begin clk_data <= something; end always_ff @(posedge div_clk) begi
logic div_clk;
always_ff @(posedge clk or negedge rstb) begin
if(!rstb) div_clk <= 1'b0;
else div_clk <= !div_clk;
end
always_ff @(posedge clk) begin
clk_data <= something;
end
always_ff @(posedge div_clk) begin
div_clk_data <= clk_data;
end
在我的模拟中,我得到了一个竞争条件,因为clk\u data
更新与div\u clk
一致,并且div\u clk\u 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
是同步的,并防止竞争条件发生 在这种情况下,不应使用NBA。如果希望时钟保持同步,则时钟树(包括门控时钟)中不应包含任何NBA 在这种情况下,不应使用NBA。如果希望时钟保持同步,则时钟树(包括门控时钟)中不应包含任何NBA