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

Тупой вопрос про Verilog

Возник такой тупой вопрос. Есть такой код:

 

reg [7:0] temp = 8'h00;
reg [3:0] n = 4'b0000;
                
always@(posedge CLOCK)
begin
if(n<=3'b111)
    begin
    temp[n] <= 1'b1;
    n<=n+1'b1;
    end
end

 

Что будет содержаться в temp[0] при выполнении такой программы?

Что произойдёт, когда случится первый фронт CLOCK: temp[0] <= 1'b1; или temp[1] <= 1'b1; ?

 

И что будет если код переписать так:

 

reg [7:0] temp = 8'h00;
reg [3:0] n = 4'b0000;
                
always@(posedge CLOCK)
begin
if(n<=3'b111)
    begin
    temp[n] = 1'b1;
    n<=n+1'b1;
    end
end

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

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


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

Чего вы хотели добиться вот этим:

if(n<=3'b111)

Ведь под это условие подпадает любой физически реализуемый код n?

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


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

Чего вы хотели добиться вот этим:

if(n<=3'b111)

Ведь под это условие подпадает любой физически реализуемый код n?

Исправил. Но это и не важно. Меня интересует, что произойдёт, когда случится первый фронт CLOCK: temp[0] <= 1'b1; или temp[1] <= 1'b1; ?

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


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

Приветствую!

 

Возник такой тупой вопрос. Есть такой код:

 

reg [7:0] temp = 8'h00;
reg [3:0] n = 4'b0000;
                
always@(posedge CLOCK)
begin
if(n<=3'b111)
    begin
    temp[n] <= 1'b1;
    n<=n+1'b1;
    end
end

 

Что будет содержаться в temp[0] при выполнении такой программы?

Что произойдёт, когда случится первый фронт CLOCK: temp[0] <= 1'b1; или temp[1] <= 1'b1; ?

...

 

Во общем случае зависит от значения n в момент CLOCK :)

Если предположить что n=0 то temp[0] <= 1'b1

Уже говорилось что неблокирующие присваивания (<=) исполняются в конце дельта цикла симуляции. Если по коду то грубо в точке end (которая от always begin) А точка назначения и значение присваивания вычисляется до этого момента.

 

Блокирующие присваивания (=) исполняются мгновенно в момент присваивания.

Ну а теперь думаю Вы сможете ответить что же будет и во втором случае.

 

Удачи! Rob.

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


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

Во общем случае зависит от значения n в момент CLOCK :)

Если предположить что n=0 то temp[0] <= 1'b1

 

А если учесть что значение n (n<=n+1'b1) и значение temp (temp[n] <= 1'b1;) должны измениться одновременно? Какая переменная изменится раньше? Если n раньше, то temp[0] останется нулём, а если temp раньше, то temp[0] будет равно 1. Как это предугадать?

 

Блокирующие присваивания (=) исполняются мгновенно в момент присваивания.

Ну а теперь думаю Вы сможете ответить что же будет и во втором случае.

Во втором случае, я полагаю temp[0] будет равно 1'b1. Я прав?

 

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


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

Приветствую!

 

...

Уже говорилось что неблокирующие присваивания (<=) исполняются в конце дельта цикла симуляции. Если по коду то грубо в точке end (которая от always begin) А точка назначения и значение присваивания вычисляется ДО этого момента.

....

 

Да. Впрочем как и в первом случае.

 

Удачи! Rob.

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


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

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

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

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

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

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

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

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

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

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