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

 
 
> 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
сообщение Jun 29 2018, 10:08
Сообщение #2


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

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



RobFPGA и alexadmin, спасибо большое за ответы! Тогда подскажите, пожалуйста, какую штуку надо использовать, чтобы не прописывать "в лоб", как показано ниже

Код
always@(posedge clk)
                  if (rst)
                      st=SUM_step0;
                         else
                             case(st)
                                 SUM_step0:
                                   begin
                                                                          gnrt2[0].add_dataa=gnrt[0].mult_res;
                                                                          gnrt2[0].add_datab=gnrt[1].mult_res;

                                                                          gnrt2[1].add_dataa=gnrt[2].mult_res;
                                                                          gnrt2[1].add_datab=gnrt[3].mult_res;

                                                                          gnrt2[2].add_dataa=gnrt[4].mult_res;
                                                                          gnrt2[2].add_datab=gnrt[5].mult_res;
                                                                        default: st=SUM_step0;
                                                                      end
                              endcase


, а через некую k, что-то типа такого:
Код
gnrt2[k].add_dataa=gnrt[2*k].mult_res;
gnrt2[k].add_datab=gnrt[2*k+1].mult_res;


Если использовать цикл for, то это не будет выполнять в одном такте

Сообщение отредактировал Faton_11 - Jun 29 2018, 10:09
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jun 29 2018, 10:57
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(Faton_11 @ Jun 29 2018, 13:08) *
..
Если использовать цикл for, то это не будет выполнять в одном такте
С чего это Вы взяли что не будет?
Если for сидит внутри always то весь цикл будет проходить полностью за одно событие запускающее этот always.
Поэтому так и пишите как обычно ...
Код
...
  SUM_step0: begin
    for (int k=0;k<MAX_K; ++k) begin
      gnrt2[k].add_dataa=gnrt[2*k].mult_res;
      gnrt2[k].add_datab=gnrt[2*k+1].mult_res;
    end
  end


Удачи! Rob
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 14:07
Рейтинг@Mail.ru


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