现在我正在努力实现时钟门控,如下所示。但我不明白为什么以及如何处理 De 信号?
module ClockGating(
input wire rst_n,
input wire clk,
input wire De,
input wire InReg,
output reg OutReg
);
always @( posedge clk or negedge rst_n )
begin
if ( !rst_n ) begin
OutReg <= 0;
end
else begin
if ( De ) begin
OutReg <= InReg;
end
else
OutReg <= OutReg;
end
end
endmodule
Run Code Online (Sandbox Code Playgroud)
但我想知道如果我使用不带 else 语句会发生什么?我可以在没有 else 语句的情况下使用吗?
module ClockGating(
input wire rst_n,
input wire clk,
input wire De,
input wire InReg,
output reg OutReg
);
always @( posedge clk or negedge rst_n )
begin
if ( !rst_n ) begin
OutReg <= 0;
end
else begin
if ( De ) begin
OutReg <= InReg;
end
end
endmodule
Run Code Online (Sandbox Code Playgroud)
是的,您可以在没有 的情况下使用else(因为它的行为与带有 的版本相同else)。是的,你应该不使用else(因为否则你看起来像一个业余爱好者,没有人想要这样!)
OutReg是一个reg. Verilog 中的Areg就像任何软件语言中的变量一样;它的值将是最后分配给它的任何值。在您的电路中,您不希望更改OutRegif Deis not的值1'b1,因此在这种情况下您不需要分配任何新值OutReg。因此,您不需要else.