Jump to content
    

Так последний пример и

обеспечивает генерацию кода методом повторения (как бы тупого копирования текста) сколько-то раз какого-то куска кода с подстановкой изменяющегося параметра.

Share this post


Link to post
Share on other sites

я же не спорю, просто заметил что никогда не думал о такой механике его работы... так его смысл гораздо проще объяснить. Он же не только в цикле может быть. Им можно делать константы разной длинны в зависимости от условий, без варнингов про нулевую или отрицательную длину вектора и так далее...

Share this post


Link to post
Share on other sites

получается любой конечный цикл может быть записан через generate? Ведь циклы тоже по сути сокращение записи...

 

В общем, да. Например, в AHDL, имеется только цикл GENERATE, и вариантов нет, и все отлично записывалось, что надо. Разница лишь в удобстве - внутри цикла for, который внутри always, можно (и нужно) для части переменных использовать блокирующие присваивания, тем самым используя одну переменную на каждой итерации цикла для сохранения своего значения и модификации его на следующей итерации. А внутри цикла GENERATE, при реализации того же, придется использовать "массив проводов (или регистров)" для хранения значения на каждой итерации. Собственно, вот и вся разница. Таким образом обычный цикл экономит запись за счет использования блокирующих присваиваний для промежуточных значений, устраняя необходимость в массивах промежуточных значений.

Share this post


Link to post
Share on other sites

да вот тупо сумма пачки значений:

 

обычный цикл:

always @*

begin

sum=0;

for (i=0...)

sum = sum + addend;

end

 

результат - в sum

 

для generate:

 

always @*

sum[0] <= addend[0];

 

generate

for (i=1...)

always @*

sum <= sum[i-1] + addend;

 

результат - в sum[N-1]

Share this post


Link to post
Share on other sites

понял генерайт под always запихать нельзя... потому нужны как бы дополнительные сигналы которые прокинуть данные из одного алвиса в другой...

 

 

 

 

Share this post


Link to post
Share on other sites

получается любой конечный цикл может быть записан через generate? Ведь циклы тоже по сути сокращение записи...

 

никогда generate так не использовал, забавно... я всегда думал что generate (название) образовано от начального создания, а не от генерации кода, забавно....

Современный Verilog (aka SystemVerilog) позволяет при генерации логики по циклическому описанию во многих случаях обходиться без явного указания generate. Явное указание всегда требуется, когда, например, делается инстанцирование модулей или производится генерация модпортов (modport) в интерфейсах.

 

 

Как-то не представляю применение for вне generate?

Сплошь и рядом, простейший пример - функция clog2:

 

function integer clog2 (input integer num); // calculates ceil(log2(num))
begin
    num = num - 1;                          
    for (clog2 = 0; num > 0; clog2 = clog2 + 1)
        num = num >> 1;
end
endfunction

Share this post


Link to post
Share on other sites

Современный Verilog (aka SystemVerilog) позволяет при генерации логики по циклическому описанию во многих случаях обходиться без явного указания generate.

 

Да и несовременный, общепринятый и привычный v-2001, тоже.

Share this post


Link to post
Share on other sites

Да и несовременный, общепринятый и привычный v-2001, тоже.

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

 

P.S. Имхо, общепринятым уже давно стал v-2009 (а то и 2011). :)

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...