Использование assign внутри цикла for - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь назначить векторы ввода / вывода внутри цикла for для экономии места.Я не уверен, если это невозможно, или я столкнулся с проблемой синтаксиса.

Я пытался использовать generate и все еще сталкиваюсь с проблемами

Мой текущий код выглядит следующим образом:

module Test_IO
(
     output [7:0] led,  
     input  [7:0] sw 
);

genvar i;
generate
for(i = 0;i < 8; i = i + 1)
{
     assign led<i> = sw<i>;
}
endgenerate

endmodule

Я надеялся сэкономить место вместо того, чтобы использовать8 назначить операторы, но я получаю следующую ошибку:

ERROR:HDLCompiler:806 - 
"C:/Users/Danie/Desktop/Digilent/Projects/Test_IO/Test_IO.v" Line 31: 
Syntax error near "{".

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Ваша проблема в синтаксисе. В verilog используйте начало и конец , а не { и }

genvar i;
generate
for(i = 0;i < 8; i = i + 1)
{
     assign led<i> = sw<i>;
}
endgenerate

становится

genvar i;
generate
for(i = 0;i < 8; i = i + 1) begin
    assign led[i] = sw[i];
end
endgenerate

иногда компиляторы требуют, чтобы цикл генерации был назван с использованием : NAME после начала

genvar i;
generate
for(i = 0;i < 8; i = i + 1) begin : ASSIGN_GEN
    assign led[i] = sw[i];
end
endgenerate
0 голосов
/ 28 июня 2019

Я предполагаю, что вы используете verilog.Попробуйте приведенный ниже код.Вы действительно не нуждаетесь в genvar для выполнения задания, которое вы выполняете.

module Test_IO
 (
 output [7:0] led,  
 input  [7:0] sw 
 );

 genvar i;
 generate
 for(i = 0;i < 8; i = i + 1)
    assign led[i] = sw[i];
 endgenerate

 endmodule

В качестве альтернативы вы также можете попробовать следующее ниже

module Test_IO
 (
 output reg [7:0] led,  
 input  [7:0] sw 
 );

 integer i;

 always@(*)
 begin
   for(i=0;i<8;i=i+1)
     led[i] = sw[i];
 end

 endmodule
...