Какая разница в задержке до и после неблокирующих операторов внутри цикла? - PullRequest
1 голос
/ 06 сентября 2011

В чем разница между этими двумя фрагментами кода?

    always @(posedge clk) begin
            r3 <= @(posedge clk) 1;
            r2 <= @(posedge clk) 1;
            ready = 0;
            while (r2 <= n) begin
                r2 <= @(posedge clk) r2 + 1;     <--- never stops executing
            end
    end


    always @(posedge clk) begin
            r3 <= @(posedge clk) 1;
            r2 <= @(posedge clk) 1;
            ready = 0;
            while (r2 <= n) begin
                @(posedge clk) r2 <= r2 + 1;     <--- normally executes
            end
    end

1 Ответ

3 голосов
/ 06 сентября 2011

Когда симулятор выполняет r2 <= @(posedge clk) r2 + 1, он выполняет следующие шаги:

  • Оценка r2 + 1
  • запланировать событие обновления неблокирующего назначения (NBA), которое будет выполнено на следующем этапе clk

Когда симулятор выполняет @(posedge clk) r2 <= r2 + 1, он выполняет следующие шаги:

  • приостановить процесс always и запланировать его возобновление на следующем этапе clk
  • когда процесс возобновится, выполните r2 <= r2 + 1 NBA, выполнив следующие действия:
    • оценка r2 + 1
    • запланировать событие обновления NBA на текущее время

Первая форма анализируется как неблокирующее присвоение и выполняется в нулевое время. Задержка применяется только к событию обновления, генерируемому при выполнении NBA. Вторая форма анализируется как элемент управления задержкой операторов, за которым следует NBA. Он не выполняется в нулевое время, поскольку задержка применяется к выполнению оператора, а не только к событию обновления.

Первая форма представляет собой бесконечный цикл, поскольку тело цикла while выполняется за нулевое время, а события, которые будут увеличивать r2, запланированы на будущее время.

Со второй формой вы все равно захотите быть осторожнее с граничными условиями, когда цикл завершается. После планирования обновления, в котором для r2 установлено значение n + 1, условие будет оцениваться как истинное еще раз до применения этого обновления.

...