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

Профессия RTL Designer не имеет будущего?

IcarusVerilog выдает a=0 b=1

 

Согласно стандарту это вроде корректный результат. По факту евента "*" произошло следующее: вычисление RHS a<=b; тут результат 0, затем присваивание b=0, затем присваивание b=1, затем апдейт a вычисленным вначале RHS, нулем, затем печать результата a=0 и b=1

 

а потом уже следующий евент, который даст a=1 и b=1. Но это будет следующий...

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


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

У меня в тексте стандарта написан такой пример:

 

// The assigned value of the reg is determinate

 

У меня, вообще то, такой же, как и у Вас. Это видимо какие-то шутники стандарт поковыряли и выложили :)

 

2 Leka.

 

В первом примере Вы там по ходу "гонки" (race condition) сделали, между олвейсом и инициализатором. IUS шутрее проинитил нулем, чем занес единичку из олвейса, тем самым облегчив себе жизнь, и выдав два нуля :)

 

а во втором примере IUS тоже выдает два нуля.... Хм...

 

убрал оба инициализатора, выдал a=x и b=x... Значит предположение верное - не было ни одно апдейт-евента, вот и always ни разу не исполнялся ни в одном из случаев. Хотя мне это не совсем понятно, по идее инициализатор должден был сделать апдейт-евент.

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


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

У меня, вообще то, такой же, как и у Вас. Это видимо какие-то шутники стандарт поковыряли и выложили :)

Или, возможно, у Viko редакция 1995 года. :)

 

 

Да, точно. Нашел стандарт 1995 года, скачал, проверил - там по-другому. :)

 

 

 

 

Несколько страниц назад был переход с V в SV, а теперь, наоборот, откатились назад. :biggrin:

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


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

А синтез выдает a=1 b=1, и в ISE, и в Квартусе.

"initial #1 $finish;" --> Все случаи @* д/б выведены, те тогда надо ожидать:

a=0 b=1

a=1 b=1

а этого нет...

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

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


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

"initial #1 $finish;" --> Все входы @* д/б выведены, те тогда надо ожидать:

a=0 b=1

a=1 b=1

а этого нет...

 

А я никак не могу найти правила работы инициализатора при объявлении переменной. Сейчас... Ван момент.

 

переделал инициализацию на initial - IUS все равно, хоть треснись, выдает a=0 b=0 и все. always не исполняет. Не понимаю. А круче него симулятора быть просто не может, самый сигноффнный из всех сигноффных...

 

разобрался кажется. Точно разобрался.

 

b=1, сделанное внутри always, делает активным этот же евент (вычисление блока begin..end), который и так сейчас активен. Поэтому он еще раз и не перезапускается. Поэтому вывод получается a=0 b=1.

 

IUS по ходу немного глючный. Чтобы заставить его считать always пришлось удлинить время симуляции до 2 и инициализаторы поставить с #1. Если инициализаторы оставить с нулевым временем, то блок always не запускается вообще

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


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

Стандарт у меня 1995 года. Оттуда, откуда у всех :)

Quartus скомпилировал, повесил на a и b по 1.

Вот и гадайте теперь вместе с этим ...ным стандартом :)

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


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

Да, точно. Нашел стандарт 1995 года, скачал, проверил - там по-другому. :)

 

И это там причем явная банальная опечатка, исправленная в 2001. Потому как 5.4.1 пункт есть и в 1995-ом, и утверждает то же, что и в 2001, что есть гарантия последовательности. Можете в этом убедиться сами.

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


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

Стандарт у меня 1995 года. Оттуда, откуда у всех :)

Вам пора обновиться.  :biggrin:

 

 

И это там причем явная банальная опечатка, исправленная в 2001. Потому как 5.4.1 пункт есть и в 1995-ом, и утверждает то же, что и в 2001, что есть гарантия последовательности. Можете в этом убедиться сами.

 

Верю на слово.  :)

 

 

Тем более ориентироваться на стандарт 1995 года, все равно, не стоит.

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


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

Вам пора обновиться.  :biggrin:

Обновился :)

Только как объяснить результат компиляции?

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


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

Обновился :)

Только как объяснить результат компиляции?

А что Вы конкретно компилили?

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


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

Обновился :)

Только как объяснить результат компиляции?

 

synthesis/simulation mismatch - обычное дело. Потому как одно дело моделирование описанного устройства под управлением программы-моделировщика, а другое - синтез. В 1364.1 - 2002 не один такой случай описан.

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


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

Если Вы компили это:

module tst( a, b );
output reg a=0; 
output reg b=0; 
always@* begin
  a <= b;
  b <= 0; 
  b <= 1;
end
endmodule

 

и получили обе единицы, то что Вас удивляет?

Что Вы хотители получить?

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


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

always@* begin
  a <= b; 
  b <= 0;
  b <= 1;
  $display("a=%b b=%b", a, b);
end

Виден вечный цикл симулятора.

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

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


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

Виден вечный цикл симулятора.

Что вполне логично - отложенная на время после окончания evaluation event-а для блока begin..end (из-за неблокирующего присваивания) запись в b вызывает активацию вычисления всего блока заново, так как он чувствителен к записи в b, так как b использован как один из аргументов в RHS и евент описан "@*". А в блоке делается новая запись в b. ну и так до потери пульса. А Вы чего хотели? Поставив внутри блока запись в то, к чему чувствителен весь блок? Причем мгновенную запись, без "#1" хотя бы

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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