Зачем мне создавать сбрасываемый провод, который удерживается на 0 в течение нескольких циклов?
Я попытался создать код сброса, похожий на этот, на моей плате разработчика 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
Значение s всегда будет сброшено до 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
...
Что тут происходит? Почему моего сброса "одиночных часов" недостаточно?