现在我要实现时钟门控,如下所示。
但我不明白为什么以及如何处理 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
但我想知道如果我不使用 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
最佳答案
是的,您可以在没有 else
的情况下使用(因为它的行为与带有 else
的版本相同)。是的,您应该在没有 else
的情况下使用(否则你看起来像个业余爱好者,没人想要!)OutReg
是 reg
.一个 reg
在 Verilog 中就像任何软件语言中的变量一样;它的值将是最后分配给它的任何值。在您的电路中,您不希望更改 OutReg
的值。如果 De
不是 1'b1
,因此您无需为 OutReg
分配任何新值在这种情况下。因此,您不需要 else
.
关于verilog - 我是否需要在顺序的 always block 中使用 else 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42503059/