Jump to content
    

Verilog: работа с массивами - прошу подсказать как правильно

58 minutes ago, Doka said:

страшно представить кейс в котором нужны 38 контроллеров I2C

ага, на ChipPlanner большое жирное пятно, которое режет мне глаз :biggrin:

Share this post


Link to post
Share on other sites

Возник вопрос по использованию двух переменных в конструкции for

в блоке always - всё нормально

 

		for(int i=0,k=0; i<59; i=i+1,k=k+2)
		   begin : load_data	 
		   data_reg[i][15:0] <=load_reg[k];
			data_reg[i][31:16]<=load_reg[k+1];				 			 
		   end	

 

пытаюсь сделать подобное в блоке generate - посылает

 

genvar i,k;
generate
  for (i=1,k=0; i<30; i=i+3, k=k+6) 
	begin 	
	assign B1_CH[i+0]=shift_reg[k+0][31]; // выход данных
	assign B1_CH[i+1]=shift_reg[k+1][31]; // выход данных
	assign B1_CH[i+2]=shift_reg[k+2][31]; // выход данных
	end
endgenerate

 

Error (10170): Verilog HDL syntax error at L1_stream.v(193) near text ",";  expecting ";"

использую Quartus 13.0.1 x86-64 (тк нужен циклон 2), в опциях - SystemVerlog

 

Вопрос - что я делаю  не так ?

 

Share this post


Link to post
Share on other sites

39 minutes ago, Nagisa said:

Возник вопрос по использованию двух переменных в конструкции for

в блоке always - всё нормально

 


		for(int i=0,k=0; i<59; i=i+1,k=k+2)
		   begin : load_data	 
		   data_reg[i][15:0] <=load_reg[k];
			data_reg[i][31:16]<=load_reg[k+1];				 			 
		   end	

 

пытаюсь сделать подобное в блоке generate - посылает

 


genvar i,k;
generate
  for (i=1,k=0; i<30; i=i+3, k=k+6) 
	begin 	
	assign B1_CH[i+0]=shift_reg[k+0][31]; // выход данных
	assign B1_CH[i+1]=shift_reg[k+1][31]; // выход данных
	assign B1_CH[i+2]=shift_reg[k+2][31]; // выход данных
	end
endgenerate

 

Error (10170): Verilog HDL syntax error at L1_stream.v(193) near text ",";  expecting ";"

использую Quartus 13.0.1 x86-64 (тк нужен циклон 2), в опциях - SystemVerlog

 

Вопрос - что я делаю  не так ?

 

Попробуйте справится только одной переменной. У Вас k=i*2. И проблемы отпадут сами по себе.

Share this post


Link to post
Share on other sites

2 minutes ago, Nick_K said:

Попробуйте справится только одной переменной. У Вас k=i*2. И проблемы отпадут сами по себе.

нет. смотрите на шаг внимательно. он с чередованием

тем более что там 2 блока

genvar i,k;
generate
  for (i=1,k=0; i<30; i=i+3, k=k+6) 
	begin 	
	assign B1_CH[i+0]=shift_reg[k+0][31]; // выход данных
	assign B1_CH[i+1]=shift_reg[k+1][31]; // выход данных
	assign B1_CH[i+2]=shift_reg[k+2][31]; // выход данных
	end
endgenerate

generate
  for (i=1,k=3; i<30; i=i+3, k=k+6) 
	begin 	
	assign B2_CH[i+0]=shift_reg[k+0][31]; // выход данных
	assign B2_CH[i+1]=shift_reg[k+1][31]; // выход данных
	assign B2_CH[i+2]=shift_reg[k+2][31]; // выход данных
	end
endgenerate

и как тут обойтись одной переменной ?

собственно вопрос не только как обойти проблему но и как ее решить - те что не так с синтаксисом ?

Share this post


Link to post
Share on other sites

Приветствую! 

Увы  цикл generate 

generate_region ::= 
generate { generate_item } endgenerate
loop_generate_construct ::=
for ( genvar_initialization ; genvar_expression ; genvar_iteration )
generate_block
genvar_initialization ::=
[ genvar ] genvar_identifier = constant_expression
genvar_iteration ::=
genvar_identifier assignment_operator genvar_expressio
...

отличается от  простого цикла 

loop_statement ::=
...
| for ( [ for_initialization ] ; [ expression ] ; [ for_step ] )
...
for_initialization ::=
list_of_variable_assignments
| for_variable_declaration { , for_variable_declaration }
for_variable_declaration ::=
[ var ] data_type variable_identifier = expression { , variable_identifier = expression }14
...

Так что в for для generate может быть только одна переменная цикла. А другие надо вычислять в зависимости от основной переменной в теле цикла (непосредственно в выражениях или в функциях).

В случае TC все просто 

assign B1_CH[i+0]=shift_reg[(i-1)*2+0+0][31];
...
assign B2_CH[i+0]=shift_reg[(i-1)*2+3+0][31];
...

Удачи! Rob.

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