Приведение нескольких глаголов в верологическом выражении
Я пытаюсь создать многоэтапный компаратор в verilog, и я не могу понять, как увеличить несколько генов в одном цикле генерации. Я пытаюсь сделать следующее:
genvar i,j;
//Level 1
generate
j=0;
for (i=0;i<128;i=i+1)
begin: level1Comp
assign ci1[i] = minw(tc[j],tc[j+1]);
j = j+2;
end
endgenerate
И получив следующую ошибку:
Error-[SE] Syntax error
Following verilog source has syntax error :
"encoder.v", 322: token is '='
j=0;
Кто-нибудь знает, как увеличить несколько генов в одном выражении сгенерирования? Или, по крайней мере, получить эквивалентную функциональность?
Ответы
Ответ 1
Предполагая, что ci1
имеет половину глубины tc
, и вы хотите, скажем ci1[0] = min(tc[0], tc[1])
, ci[1] = min(tc[2], tc[3])
и т.д., должно работать следующее:
module st_genvar();
int ci1 [0:127];
int tc [0:255];
function int minw(int i1, int i2);
if(i1 < i2 )
minw = i1;
else
minw = i2;
endfunction
genvar i;
//Level 1
generate
for (i=0;i<128;i=i+1)
begin: level1Comp
assign ci1[i] = minw(tc[i*2],tc[i*2+1]);
end
endgenerate
endmodule
Ответ 2
Кто-нибудь знает, как увеличивать несколько генов в одном и том же генерации утверждение?
Это недопустимо, поскольку цикл generate for создает неявный оператор localparam для переменной цикла и разрабатывает элементы в цикле, основанные только на этом локальном параметре. Это означает, что любые элементы внутри цикла должны быть действительны вне цикла, если genvar был объявлен как локальный параметр.
genvar i,j;
//Level 1
generate
j=0;
for (i=0;i<128;i=i+1)
begin: level1Comp
assign ci1[i] = minw(tc[j],tc[j+1]);
j = j+2;
end
endgenerate
становится
//Done for each value of i
genvar j;
localparam integer i = i_for_each_iteration;
j=0; //Not valid outside a procedural context so modelsim complains
assign ci1[i] = minw(tc[j],tc[j+1]);
j = j+2; //Also not valid outside a procedural context
В этом случае вы можете создать "постоянное" значение, зависящее от genvar, используя явный параметр внутри цикла.
genvar i;
//Level 1
generate
for (i=0;i<128;i=i+1)
begin: level1Comp
localparam integer j = i*2;
assign ci1[i] = minw(tc[j],tc[j+1]);
end
endgenerate