Как работает этот код Verilog? У него есть два отдельных, но одинаковых условия необходимости в одном и том же операторе всегда - PullRequest
0 голосов
/ 22 января 2019

Мне интересно, этот код работает отлично.Я хочу понять, как работают два состояния в пределах блока Always.

#5 clk = ~clk;

always
begin
@(negedge clk) din = 1;
@(negedge clk) din = 0;
end ```


Ответы [ 2 ]

0 голосов
/ 22 января 2019

@(expression) - это конструкция, которая ожидает изменения состояния выражения. posedge квалифицирует изменение от 0 до чего-то еще.

Изменение - это событие, похожее на триггер или квант времени. Ваш код должен ждать изменения выражения, когда оно произойдет. Таким образом, второй @(posedge clk) ожидает следующего представления clk.

Рассмотрим этот код

always @(postage clk)
     begin 
        #11 din = in;
     end

Этот блок всегда выполняется во всех остальных этапах, потому что событие posedge происходит, когда процедура ожидает прохождения единиц времени # 11.

0 голосов
/ 22 января 2019

симуляция сделает следующее:

  1. начать выполнение всегда блока
  2. дождитесь необходимости клика
  3. присвойте 1 дин
  4. ожидание необходимости clk (следующий)
  5. присвоить 0 дину
  6. возобновить выполнение блока Always, перейти к шагу 1.

Итак, значение din будет чередоваться между нуждами clk.

...