Ошибка с localparam внутри цикла for для Verilog - PullRequest
0 голосов
/ 23 ноября 2018
parameter N = 4, FOO = { N { 4'd1 } };
//And then in the generate loop
genvar i;
for( i = 0; i < N; i = i + 1 )
    begin : gen_loop
       localparam THIS_FOO = FOO[ i * 4 +: 4 ];
   end
wire [1:0] rr = THIS_FOO[1:0];
wire [1:0] rt = THIS_FOO[3:2];

Я получаю эту ошибку, но не понимаю, почему?:

Line 344: <THIS_FOO> is not declared. 
Line 345: <THIS_FOO> is not declared.
Module <TCL_vec> ignored due to previous errors.

Скажите, пожалуйста, где я был не прав?

1 Ответ

0 голосов
/ 23 ноября 2018

Ваш localparam объявлен внутри begin:gen_loop..end области.Более того, ваш цикл создания for создал несколько версий блока с именами

gen_loop[0]
gen_loop[1]
...

. Таким образом, у вас также есть несколько версий THIS_FOO. Чтобы получить к ним доступ, используйте нотацию перекрестных ссылок.

wire [1:0] rr = gen_loop[0].THIS_FOO[1:0];
wire [1:0] rt = gen_loop[1].THIS_FOO[3:2];
...

и да, вы должны знать, к какой итерации цикла обращаться.

Итак, в вашем случае он жаловался, потому что вы не объявили THIS_FOO в той области, которую хотелидоступ к нему.

...