new123 0 May 7, 2019 Posted May 7, 2019 · Report post 58 minutes ago, Doka said: страшно представить кейс в котором нужны 38 контроллеров I2C ага, на ChipPlanner большое жирное пятно, которое режет мне глаз Quote Share this post Link to post Share on other sites More sharing options...
Nagisa 0 October 28, 2019 Posted October 28, 2019 · Report post Возник вопрос по использованию двух переменных в конструкции 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 Вопрос - что я делаю не так ? Quote Share this post Link to post Share on other sites More sharing options...
Nick_K 0 October 28, 2019 Posted October 28, 2019 · Report post 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. И проблемы отпадут сами по себе. Quote Share this post Link to post Share on other sites More sharing options...
Nagisa 0 October 28, 2019 Posted October 28, 2019 · Report post 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 и как тут обойтись одной переменной ? собственно вопрос не только как обойти проблему но и как ее решить - те что не так с синтаксисом ? Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 97 October 28, 2019 Posted October 28, 2019 · Report post Приветствую! Увы цикл 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. Quote Share this post Link to post Share on other sites More sharing options...
Nagisa 0 October 28, 2019 Posted October 28, 2019 · Report post Cпасибо! меня сбил Каршенбойм http://iosifk.narod.ru/hdl_coding/hdl_coding_generate.pdf у него написано "не рекомендуется" и я подумал, что значит можно Quote Share this post Link to post Share on other sites More sharing options...