Verilog 更好的D触发器编码方法
最近,我在verilog中看到一些D触发器RTL代码,如下所示:Verilog 更好的D触发器编码方法,verilog,Verilog,最近,我在verilog中看到一些D触发器RTL代码,如下所示: module d_ff( input d, input clk, input reset, input we, output q ); always @(posedge clk) begin if (~reset) begin
module d_ff(
input d,
input clk,
input reset,
input we,
output q
);
always @(posedge clk) begin
if (~reset) begin
q <= 1'b0;
end
else if (we) begin
q <= d;
end
else begin
q <= q;
end
end
endmodule
模块d\u ff(
输入d,
输入时钟,
输入复位,
输入我们,
输出q
);
始终@(posedge clk)开始
如果(~reset)开始
q就模拟而言,删除该语句不应该改变任何东西,因为q应该是reg类型(或SystemVerilog中的逻辑),并且应该保持其值
此外,大多数合成工具应在两种情况下生成相同的电路,因为q是使用非阻塞分配更新的。也许更好的代码是使用always\u ff而不是always(如果您的工具支持的话)。通过这种方式,编译器将检查始终使用非阻塞分配更新q,并生成顺序逻辑
语句q看起来像是synth对任何一段代码进行的优化,因为其行为与时钟选通相同。它可能会导致故障。
always @(posedge CLK or negedge RESET)
if(~RESET)
COUNT <= 0;
else if(INC)
COUNT <= COUNT + 1;
else
COUNT <= COUNT;
always @(posedge CLK or negedge RESET)
if(~RESET)
COUNT <= 0;
else if(INC)
COUNT <= COUNT + 1;