Зачем мне создавать сбрасываемый провод, который удерживается на 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
         ...

Что тут происходит? Почему моего сброса "одиночных часов" недостаточно?

0 ответов

Другие вопросы по тегам