реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Опять вопрос по неблокирующим присваиваниям в Verilog
LeonidPr
сообщение Apr 20 2017, 08:09
Сообщение #1





Группа: Участник
Сообщений: 6
Регистрация: 19-03-13
Пользователь №: 76 098



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

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

не смог понять следующее утверждение про self triggering always block.
что если используем неблокирующее присваивание
Код
always @(clk)
    clk <= ~clk;

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

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

Сообщение отредактировал LeonidPr - Apr 20 2017, 08:10
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 20 2017, 08:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 17-02-06
Пользователь №: 14 454



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

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

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


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


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

То есть как бы игра на том в какой момент реально сохраняется значение clk, и видно ли на следующем цикле изменение.
Go to the top of the page
 
+Quote Post
LeonidPr
сообщение Apr 20 2017, 09:06
Сообщение #3





Группа: Участник
Сообщений: 6
Регистрация: 19-03-13
Пользователь №: 76 098



Спасибо, с блокирующим вроде понял.
Во втором варианте мы ждем 10 и потом "планируем", или мы планируем, что через 10 мы должны изменить значение и выходим?
Т.е. always триггерится только если clk поменялся в момент, когда мы не находимся внутри "always"?
Тогда правильно я понимаю, что мой вариант в первом посте не будет работать?
Код
always @(clk)
  begin
      clk <= ~clk;
  end

Т.е. без задержки на 10.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 20 2017, 09:51
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 17-02-06
Пользователь №: 14 454



будет, просто бесконечно быстро, кажется sm.gif

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

А вот если поставить задержку после
Код
always @(clk)
  begin
      clk <= ~clk; #10;
  end

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

сразу после события клок упадет обратно, он даже не поднимется, а потом отработается задержка, и мы опять придем в ожидание изменений с постоянным не меняемым сигналом
Go to the top of the page
 
+Quote Post
iosifk
сообщение Apr 20 2017, 10:19
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 3 529
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(LeonidPr @ Apr 20 2017, 11:09) *
не смог понять следующее утверждение про ...

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
LeonidPr
сообщение Apr 20 2017, 12:48
Сообщение #6





Группа: Участник
Сообщений: 6
Регистрация: 19-03-13
Пользователь №: 76 098



Цитата(Golikov A. @ Apr 20 2017, 12:51) *
будет, просто бесконечно быстро, кажется sm.gif


м-м-м, похоже доходит. Т.е. событие присваивания clk дернет опять always и он опять отработает и так бесконечно. Т.е. мы никогда не перейдем на следующий тайм квант, т.к. всегда будем иметь активные события в этом?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 20 2017, 13:16
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 17-02-06
Пользователь №: 14 454



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

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


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

И не упустите предложение вышеsm.gif
Цитата
Могу помочь в изучении. Пишите в личку...
Go to the top of the page
 
+Quote Post
LeonidPr
сообщение Apr 20 2017, 13:41
Сообщение #8





Группа: Участник
Сообщений: 6
Регистрация: 19-03-13
Пользователь №: 76 098



Цитата(Golikov A. @ Apr 20 2017, 16:16) *
И не упустите предложение вышеsm.gif

Спасибо!

да, уже отписался в личку))
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2017 - 07:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01415 секунд с 7
ELECTRONIX ©2004-2016