为什么我需要创建一个在几个周期内保持为0的复位线?

时间:2016-10-13 02:05:53

标签: verilog fpga ice40

我尝试在我的Lattice ICE40开发板(ICEblink)上创建类似于此的重置代码:

reg done;        // initialized as 0
reg [7:0] magic; // same

always @(posedge CLOCK) begin
    if (!done) begin
        magic <= 8'h aa;
        done <= 1'b1;
    end else begin
        // reset done, normal operation code here...
    end
end

...

然而,尽管许多资源声称所有reg将始终重置为0,但重置似乎永远不会发生。 magicdone两者显然都保持为0(尽管我还没弄清楚到底发生了什么)。

如果我使用此代码,我的设计可以完美运行:

   wire resetn;
   reg [3:0] rststate = 0;

   assign resetn = &rststate;
   always @(posedge CLOCK) rststate <= rststate + !resetn;

   always @(posedge CLOCK) begin
      if (!resetn) begin
         magic <= 8'h aa;
      end else begin
         ...

这里发生了什么?为什么我的&#34;单时钟&#34;重置不够?

0 个答案:

没有答案