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

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

/me порвал себе мозг чтением этой темы и уполз обратно в свое болото (vhdl).

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


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

/me порвал себе мозг чтением этой темы и уполз обратно в свое болото (vhdl).

 

Велкам! Переходите к нам, Верилог - интуитивно понятный язык!  :)

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


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

Велкам! Переходите к нам, Верилог - интуитивно понятный язык!  :)

Здесь, кажется, упоминалась книга Полякова. Мне она дала одно - сравнивая примеры на VHDL и Verilog, я выбрал Verilog. И не жалею! Все на Verilog!! SystemVerilog!!!

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


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

Здесь, кажется, упоминалась книга Полякова. Мне она дала одно - сравнивая примеры на VHDL и Verilog, я выбрал Verilog. И не жалею! Все на Verilog!! SystemVerilog!!!

 

Я, вроде как, шутил.  :)

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


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

Я, вроде как, шутил.  :)

... ... ... "- Извините, погорячился" :)

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


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

По второму - там как раз сначала идут блокирующие присваивания, а потом неблокирующие. Приведите пример обратного.

Вы каким местом читаете? Я именно это и сказал. "неблокирующие апдейтят переменные после блокирующих "

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


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

"неблокирующие апдейтят переменные после блокирующих "

По-моему, все уже все поняли?

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


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

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

`timescale 1ns/1ns
module tb;
wire a; 
wire b;
tst _1( a, b ); 
initial $monitor( "a=%b b=%b", a, b );
initial #1 $finish;
endmodule

У кого-нибудь это симулируется ? В ISE и IcarusVerilog зависает...

 

В ISE синтезируется, если убрать "@*" .

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

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


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

IUS (ncvlog/ncelab/ncsim) обругал, что модуль tst без `timescale, я его переставил вначало, после чего все в ажуре. Да и не видать тут никаких подводных камней. Монитор намониторил a=0 и b=0. Что и логично, так как always не исполнялся ни разу в виду отсутсвия хоть одного эвента в "@*"

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


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

Modelsim Altera Starter Edition 6.5b (другого под рукой нет) выдал:

Error: (vsim-3601) Iteration limit reached at time 0 ns.

 

 

 

Работает, если

output reg b=0;

 

изменить на:

output reg b;

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


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

to Leka

попробую ваш модуль

 

to all

Хочу внести ясность в неблокирующие присваивания. Две картинки из стандарта, говорящие о том, что результат нескольких <= для одной переменной непредсказуем и неопределен. Раздел 9.2.2. Может, об этом уже говорили. Но у меня сложилось мнение, что SM говорил обратное. В посте #282.

post-10362-1269627583_thumb.jpg

post-10362-1269627658_thumb.jpg

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

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


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

Но у меня сложилось мнение, что SM говорил обратное.

 

Да говорил. Только не я это говорил, а стандарт это говорит. Я даже на пункт сослался - 5.4.1 часть 2.

 

Я уже заколебался его цитировать в стопятый раз....

 

Non blocking assignments shall be performed in the order the statements were executed. Consider
the following example:

initial begin
  a <= 0;
  a <= 1;
end

When this block is executed, there will be two events added to the non blocking assign update
queue. The previous rule requires that they be entered on the queue in source order; this rule requires
that they be taken from the queue and performed in source order as well. Hence, at the end of time
step 1, the variable a will be assigned 0 and then 1.

 

по моему разжовано так, что просто никаких сомнений не может быть

 

Но это если они в одном блоке begin...end

 

если в разных - или просто в разных местах без блоков, то да, ничего не определено. Но этот как бы совсем кривой случай, одну переменную в разных параллельных блоках присваивать.

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


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

output reg b=0;

 

Вызывает выполнение блока always, в котором вновь изменяется b, что вновь вызывает выполнение блока always и т.д. :)

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


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

Синтез в ISE дает a=1 b=1. И это согласуется с моими представлениями.

Если изменить:

always@* begin
  a <= b;
  b = 0; 
  b = 1;
end

Синтез в ISE так-же выдает a=1 b=1, а вот IcarusVerilog выдает a=0 b=1 - ошибка, имхо.

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


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

ViKo:

 

А откуда у Вас такой текст примера?

 

 

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

 

Example 4:
module multiple2;
reg a;
initial a = 1;
// The assigned value of the reg is determinate
initial begin
a <= #4 0; // schedules a = 0 at time 4
a <= #4 1; // schedules a = 1 at time 4
end // At time 4, a = 1
endmodule

 

Забавно, оказывается у нас еще и стандарты разные :biggrin:

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


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

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

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

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

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

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

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

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

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

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