我尝试在我的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,但重置似乎永远不会发生。 magic
和done
两者显然都保持为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;重置不够?