alexadmin 0 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба /me порвал себе мозг чтением этой темы и уполз обратно в свое болото (vhdl). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба /me порвал себе мозг чтением этой темы и уполз обратно в свое болото (vhdl). Велкам! Переходите к нам, Верилог - интуитивно понятный язык! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба Велкам! Переходите к нам, Верилог - интуитивно понятный язык! :) Здесь, кажется, упоминалась книга Полякова. Мне она дала одно - сравнивая примеры на VHDL и Verilog, я выбрал Verilog. И не жалею! Все на Verilog!! SystemVerilog!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба Здесь, кажется, упоминалась книга Полякова. Мне она дала одно - сравнивая примеры на VHDL и Verilog, я выбрал Verilog. И не жалею! Все на Verilog!! SystemVerilog!!! Я, вроде как, шутил. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба Я, вроде как, шутил. :) ... ... ... "- Извините, погорячился" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба По второму - там как раз сначала идут блокирующие присваивания, а потом неблокирующие. Приведите пример обратного. Вы каким местом читаете? Я именно это и сказал. "неблокирующие апдейтят переменные после блокирующих " Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба "неблокирующие апдейтят переменные после блокирующих " По-моему, все уже все поняли? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 26 марта, 2010 Опубликовано 26 марта, 2010 (изменено) · Жалоба 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 синтезируется, если убрать "@*" . Изменено 26 марта, 2010 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба IUS (ncvlog/ncelab/ncsim) обругал, что модуль tst без `timescale, я его переставил вначало, после чего все в ажуре. Да и не видать тут никаких подводных камней. Монитор намониторил a=0 и b=0. Что и логично, так как always не исполнялся ни разу в виду отсутсвия хоть одного эвента в "@*" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба Modelsim Altera Starter Edition 6.5b (другого под рукой нет) выдал: Error: (vsim-3601) Iteration limit reached at time 0 ns. Работает, если output reg b=0; изменить на: output reg b; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 марта, 2010 Опубликовано 26 марта, 2010 (изменено) · Жалоба to Leka попробую ваш модуль to all Хочу внести ясность в неблокирующие присваивания. Две картинки из стандарта, говорящие о том, что результат нескольких <= для одной переменной непредсказуем и неопределен. Раздел 9.2.2. Может, об этом уже говорили. Но у меня сложилось мнение, что SM говорил обратное. В посте #282. Изменено 26 марта, 2010 пользователем ViKo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба Но у меня сложилось мнение, что 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 если в разных - или просто в разных местах без блоков, то да, ничего не определено. Но этот как бы совсем кривой случай, одну переменную в разных параллельных блоках присваивать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба output reg b=0; Вызывает выполнение блока always, в котором вновь изменяется b, что вновь вызывает выполнение блока always и т.д. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба Синтез в ISE дает a=1 b=1. И это согласуется с моими представлениями. Если изменить: always@* begin a <= b; b = 0; b = 1; end Синтез в ISE так-же выдает a=1 b=1, а вот IcarusVerilog выдает a=0 b=1 - ошибка, имхо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 26 марта, 2010 Опубликовано 26 марта, 2010 · Жалоба 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 Забавно, оказывается у нас еще и стандарты разные Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться