реклама на сайте
подробности

 
 
> generate внутри case
Faton_11
сообщение Jun 28 2018, 14:44
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 10-06-13
Пользователь №: 77 128



Добрый день!
Скажите, пожалуйста, можно ли использовать generate внутри конструкции case? Квартус ругается, говорит, что end-а нет, но если закомментировать код от "generate" до "endgenerate" включительно, все нормально.
Ниже приведен пример куска подобного кода.
gnrt2[k].add_dataa, gnrt2[k].add_datab - входы сумматоров (использовалась мегафункция сумматора); gnrt[k].mult_res- выходы умножителей (использовалась мегафункция умножителя)
Код
    
   parameter SUM_step0=0;
   genvar k;
   reg [2:0]st;      
                                
                                 always@(posedge clk)
                                      if (rst)
                                          st=SUM_step0;
                                        else
                                             case(st)
                                              SUM_step0:
                                                 begin
                                                            generate
                                                                for(k=0; k<(ORDER/2); k=k+1)
                                                                    begin:gnrt3
                                                                                gnrt2[k].add_dataa=gnrt[2*k].mult_res;
                                                                                gnrt2[k].add_datab=gnrt[2*k+1].mult_res;
                                                                     end
                                                            endgenerate
                                                            st=SUM_step0;
                                                    end
                                                      default: st=SUM_step0;
                                             endcase


Заранее спасибо за ответ!

Сообщение отредактировал Faton_11 - Jun 28 2018, 14:47
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Faton_11
сообщение Jul 6 2018, 12:22
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 10-06-13
Пользователь №: 77 128



Прошу прощения за долгий ответ. В итоге пришлось сделать в лоб, т.к. в цикле for к экземплярам модулей, созданных в generate, нельзя обращаться через переменную, объявленную как integer.
Код
    genvar j;
                 generate
                     for( j=0; j<(ORDER/2+1); j=j+1)
                       begin:gnrt2    
                                      reg  [39:0] add_dataa;
                                          reg  [39:0] add_datab;
                                      wire [39:0] add_res;
                                        
                                         Adder addr (add_dataa,add_datab,add_res);
                             end
                      endgenerate
//________________________________________________________________________________

genvar j;
                 generate
                     for( j=0; j<(ORDER+1); j=j+1)
                       begin:gnrt2    
                                      reg  [10:0] mult_dataa;
                                          reg  [10:0] mult_datab;
                                      wire [39:0] mult_res;
                                        
                                         Mult mlt ( mult_dataa, mult_datab, mult_res);
                             end
                      endgenerate
//________________________________________________________________________________


integer k;

always@(posedge clk)
                                      
                        case(st)
                                SUM_step0:
                                         begin
                                            for(k=0; k<26; k=k+1)
                                                                                                                                            
                                                                                                  begin
                                                     gnrt2[k].add_dataa=gnrt[2*k].mult_res;
                                                     gnrt2[k].add_datab=gnrt[2*k+1].mult_res;
                                                                                                                                            
                                                                                                   end
                                                            
                                            st=SUM_step0;
                                        end
                                    default: st=SUM_step0;
                                endcase


Но было бы очень интересно знать на будущее, как это обойти

Сообщение отредактировал Faton_11 - Jul 6 2018, 12:24
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st August 2025 - 21:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016