dsp85 0 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба подскажите, пожалуйста, как сделать так, чтобы вычислялось выражение cur_buf_length=base+tail? (questa зависает в этом месте) base = констатнта, tail - в процессе работы изменяется (для примера в данном случае пусть будет = 0) module tb; const int base = 5; int cur_buf_length; int tail=0; always cur_buf_length = base + tail; /* initial $display("cur_buf_length = %0d",cur_buf_length); */ endmodule судя по всему проблема в блоке always. исходя из описания every always starts executing automatically at the start of simulation, and continues executing throughout simulation as specified by any timing controls, как я понял, все что внутри блока, исполняется в течение всего времени симуляции, но у меня квеста зависает в начальный момент. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба Попробуйте always_comb или assign Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба судя по всему проблема в блоке always. исходя из описания , как я понял, все что внутри блока, исполняется в течение всего времени симуляции, но у меня квеста зависает в начальный момент. вы вот по-англицки читаете, значит знаете, что означает "always". так что ничего у вас не зависает, а что ни на есть исполняется... всегда, т.е. бесконечно. ну а то что у вас модельное время не двигается, то это ваш недочёт - сами же чёрную дыру создали - удивляться не приходится. собственно об этом напрямую даже в стандарте сказано на 152-ой странице (1800-2009) The general purpose always procedure, because of its looping nature, is only useful when used in conjunction with some form of timing control. If an always procedure has no control for simulation time to advance, it will create a simulation deadlock condition. The following code, for example, creates a zero-delay infinite loop: always areg = ~areg; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsp85 0 21 октября, 2010 Опубликовано 21 октября, 2010 · Жалоба The general purpose always procedure, because of its looping nature, is only useful when used in conjunction with some form of timing control. If an always procedure has no control for simulation time to advance, it will create a simulation deadlock condition. The following code, for example, creates a zero-delay infinite loop: always areg = ~areg; понял. в след раз буду знать. спасибо. проблему решил always_comb'ом Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 21 октября, 2010 Опубликовано 21 октября, 2010 · Жалоба Для прояснения - always нужно задать список чувствительности, т.е. по какому событию будут выполняться операторы в блоке. Например, always @(posedge clk) срабатывает по фронту тактовой частоты. В блоке always_comb эта чувствительность подразумевается ко всем входящим в блок сигналам. Можно было написать always @*. От always_comb есть отличия, в стандарте описаны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться