Перейти к содержанию
    

Опять вопрос по неблокирующим присваиваниям в Verilog

Доброго времени суток.

 

Читая вот эту статью

Non blocking assignments

 

не смог понять следующее утверждение про self triggering always block.

что если используем неблокирующее присваивание

always @(clk) 
    clk <= ~clk;

что перед присваиванием очеред событий активируется и процесс становится чувствительным к изменениям clk и таким образом получаем self triggering always block.

 

Понимаю что все это справедливо чисто для симуляции, просто никак не могу найти этого в стандарте verilog.

Из описания stratified event queue получается что процесс должен быть чувствителен к изменениям clk в любом случае, вне зависимости от типа присваивания.

Подскажите пожалуйста, где моя ошибка?

Изменено пользователем LeonidPr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ту такая история

 

always @(clk) 
  begin 
      #10; 
      clk = ~clk;
  end

сначала процесс ждет фронта клока, дождавшись проваливается во внутрь, там выжидает паузу 10, потом в клок запихивает обратное значение сохраняет его там, и идет на второй круг. Но так как клок уже в новом значении изменения мы никакого не дождемся и повиснем.

 

 

always @(clk) 
  begin 
      #10; 
      clk <= ~clk;
  end

 

в этом варианте ждем фронта, проваливаемся во внутрь, ждем 10, и "планируем" изменение клока, выходим и ждем изменения, которое параллельно происходит, и соответственно мы его ловим и повторяем процедуру.

 

То есть как бы игра на том в какой момент реально сохраняется значение clk, и видно ли на следующем цикле изменение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, с блокирующим вроде понял.

Во втором варианте мы ждем 10 и потом "планируем", или мы планируем, что через 10 мы должны изменить значение и выходим?

Т.е. always триггерится только если clk поменялся в момент, когда мы не находимся внутри "always"?

Тогда правильно я понимаю, что мой вариант в первом посте не будет работать?

always @(clk) 
  begin 
      clk <= ~clk;
  end

Т.е. без задержки на 10.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

будет, просто бесконечно быстро, кажется :)

 

Ну то есть на самом деле симмуляция не будет идти. Она повиснет на первом алвайсе и не перейдет в следующий цикл.

 

А вот если поставить задержку после

always @(clk) 
  begin 
      clk <= ~clk; #10;
  end

то да, ничего уже не сработает.

 

сразу после события клок упадет обратно, он даже не поднимется, а потом отработается задержка, и мы опять придем в ожидание изменений с постоянным не меняемым сигналом

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не смог понять следующее утверждение про ...

Могу помочь в изучении. Пишите в личку...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

будет, просто бесконечно быстро, кажется :)

 

м-м-м, похоже доходит. Т.е. событие присваивания clk дернет опять always и он опять отработает и так бесконечно. Т.е. мы никогда не перейдем на следующий тайм квант, т.к. всегда будем иметь активные события в этом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да и это не сложно проверить

 

always @(clk) 
  begin 
      clk <= ~clk;
      $stop();
  end

 

И запускаем постоянно, сигнал будет беситься, а время идти не будет. Если есть отображение дельтациклов они будут бешено расти.

 

И не упустите предложение выше:)

Могу помочь в изучении. Пишите в личку...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...