现在,我正在努力实现时钟门控,如下所示。 但是我无法理解为什么以及如何处理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语句的情况下使用吗?
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
答案 0 :(得分:2)
是的,您可以在没有else
的情况下使用(因为它的行为与else
的版本完全相同)。是的,你应该在没有else
的情况下使用(因为否则你看起来像一个业余爱好者而没有人想要那个!)
OutReg
是reg
。 Verilog中的reg
就像任何软件语言中的变量;它的值将是最后分配给它的任何值。在您的电路中,如果OutReg
不是De
,则您不希望更改1'b1
的值,因此您无需为此OutReg
分配任何新值案件。因此,您不需要else
。