我是否需要在顺序始终块中使用else语句?

时间:2017-02-28 07:52:53

标签: verilog

现在,我正在努力实现时钟门控,如下所示。 但是我无法理解为什么以及如何处理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

1 个答案:

答案 0 :(得分:2)

是的,您可以在没有else的情况下使用(因为它的行为与else的版本完全相同)。是的,你应该在没有else的情况下使用(因为否则你看起来像一个业余爱好者而没有人想要那个!)

OutRegreg。 Verilog中的reg就像任何软件语言中的变量;它的值将是最后分配给它的任何值。在您的电路中,如果OutReg不是De,则您不希望更改1'b1的值,因此您无需为此OutReg分配任何新值案件。因此,您不需要else