Jump to content
    

Первый раз попробовал все сделать task-ами и generate-ами. В целом удобно и даже необходимо иногда. Но иногда не работает и хрен поймешь почему, тонкости, которые не заметишь сразу.

 

если содержимое второй задачи запихать в первую, то работает некорректно, словно компилятор оптимизировал valid. Почему так, мне непонятно.

1. Приведите весь нерабочий код.

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

 

Share this post


Link to post
Share on other sites

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

Правильно я понимаю:

always @(posedge clk)
begin
   a <= b;
   a <= c;
end
always @(posedge clk)
begin
   a = b;
   a = c;
end

В первом случае a= c, а во втором a = b? Раньше я никогда не использовал блокирущее присваивание, т.к. не понимал (и не понимаю) его сути.

 

Что касается "приведите весь нерабочий код", что тут приводить:

always @(posedge clk)
begin
   s_obj_read(...)
end
always @(posedge clk)
begin
   s_obj_read_reg(...)
end

Это работает

 

always @(posedge clk)
begin
   s_obj_read(...)
   s_obj_read_reg(...)
end

Это не работает.

 

Share this post


Link to post
Share on other sites

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

Вы ошибались :)

 

Правильно я понимаю:

always @(posedge clk)
begin
   a <= b;
   a <= c;
end
always @(posedge clk)
begin
   a = b;
   a = c;
end

В первом случае a= c, а во втором a = b? Раньше я никогда не использовал блокирущее присваивание, т.к. не понимал (и не понимаю) его сути.

В обоих случаях a == c в результате. Этот пример не показателен. Показателен другой пример

int a = 5, b = 10; 
always @(posedge clk)
begin
   a <= b;
   b <= a;
end
always @(posedge clk)
begin
   a = b;
   b = a;
end

в первом случае поведение по тактам будет такое

a == 10, b == 5
a == 5,  b == 10
a == 10, b == 5

во втором случае поведение по тактам будет такое

a == 10, b == 10
a == 10, b == 10
a == 10, b == 10

над вторым вопросом надо подумать чуток ;)

 

над вторым вопросом надо подумать чуток ;)

у меня вызывает подозрение строки вот такого типа s.valid[5:0] = {s.valid[4:0], 1'b0}; посмотрите, скорее всего этого флага после синтеза нет и поэтому (s.valid[1] && s.on) не выполняется.

 

 

Share this post


Link to post
Share on other sites

у меня вызывает подозрение строки вот такого типа s.valid[5:0] = {s.valid[4:0], 1'b0}; посмотрите, скорее всего этого флага после синтеза нет и поэтому (s.valid[1] && s.on) не выполняется.

 

это правда так. А почему?

 

Насчет блокирующего присваивания нихрена не понял - кто кого блокирует?

Share this post


Link to post
Share on other sites

это правда так. А почему?

сдается мне что это глюк синтезатора, а именно чую что при присвоении он рассматривает не весь вектор сразу,а побитно начиная с младшего. И в этом случае. там действительно будет вечный 0

 

Насчет блокирующего присваивания нихрена не понял - кто кого блокирует?

Как-то мне даже стыдно отправлять вас учить матчасть ;) но вообще, если на пальцах, то считайте что блокирующее присвоение блокирует поток исполнения, до того момента, когда результат будет готов, тогда как неблокирующее идет дальше :)

Share this post


Link to post
Share on other sites

эвона как. Т.е. пример с блокирующим присваиванием как бы выполнится за два такта? и поэтому к моменту присвоения б=а, а уже равно 10

Share this post


Link to post
Share on other sites

Т.е. пример с блокирующим присваиванием как бы выполнится за два такта?

так говорить не корректно. должно быть что-то вроде этого по фронту тактовой все будет выполнено сверху вниз, с учетом типа присваивания :)

Кстати что бы "добить вас танцем", если в моем примере, поменяете строки a = b и b = a местами, то будет тоже что и в первом коде :) В общем вам лучше с этим разобраться, иначе рано еще уходить на таски и функции, с сигналами.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...