Перейти к содержанию
    

Вопрос по интерфейсам на SystemVerilog

Привет Всем! НАчал разбираться с интерфейсами наSystemVerilog и откровенно говоря не понял, как мне сделать вот это:

 

Есть модуль, содержащий сигналы, из которых я хочу сделать интерфейс.

1.Как внедрить эти сигналы в интерфейс и разместить его в качестве порта этого модуля?

2.Модуль с интерфейсом инстанцируется в количестве N экземпляров в другом модуле, как все N интерфейсов также вынести в качестве порта этого модуля???

Заранее спасибо...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 interface boobs_intf #(
         parameter BoobSize = 6
     )(
         input logic CLK,
         input logic RESETn
     );

     logic [BoobSize-1:0] LEFT_BOOBIE;
     logic [BoobSize-1:0] RIGHT_BOOBIE;

     modport woman (
         input CLK, RESETn,
         output LEFT_BOOBIE, RIGHT_BOOBIE
     );

     modport man (
         input CLK, RESETn,
         input LEFT_BOOBIE, RIGHT_BOOBIE
     );

endinterface // boobs_intf


module oh_pretty_woman #(
         parameter BoobSize = 6
     )(
         boobs_intf.woman boobs
     );
     
     wire [BoobSize-1:0] pleasure = 100;
     
     always_ff@(posedge boobs.CLK, negedge boobs.RESETn)
         if(!boobs.RESETn) begin
             boobs.LEFT_BOOBIE <= 'b0;
             boobs.RIGHT_BOOBIE <= 'b0;            
         end
         else begin
             boobs.LEFT_BOOBIE <= pleasure;
             boobs.RIGHT_BOOBIE <= pleasure;
         end

endmodule // oh_pretty_woman


module flower_garden #(
         parameter CollegeSize = 128,
         parameter BoobSize = 6
     )(
         boobs_intf.woman boobs[CollegeSize+3-1:0]
     );
     
     // Girls-next-door
     oh_pretty_woman #(.BoobSize(BoobSize)) girl1(.boobs(boobs[0]));
     oh_pretty_woman #(.BoobSize(BoobSize)) girl2(.boobs(boobs[1]));
     oh_pretty_woman #(.BoobSize(BoobSize)) girl3(.boobs(boobs[2]));
     
     // City college
     generate
         genvar i;
         for(i = 0; i < CollegeSize; i++) begin
             oh_pretty_woman #(.BoobSize(BoobSize)) student(.boobs(boobs[i+3]));
         end
     endgenerate

endmodule // flower_garden


module user #(
         parameter GirlAmount = 128+3,
         parameter BoobSize = 0
     )(
         boobs_intf.man boobs[GirlAmount-1:0]
     );

     reg [GirlAmount*BoobSize*2-1:0] fun;

     generate
         genvar i;
         for(i = 0; i < GirlAmount; i++) begin
             always_ff@(posedge boobs[i].CLK, negedge boobs[i].RESETn)
                 if(!boobs[i].RESETn) begin
                     fun[i*BoobSize*2 +: BoobSize*2] <= 'b0;
                 end
                 else begin
                     fun[i*BoobSize*2 +: BoobSize] <= boobs[i].LEFT_BOOBIE;
                     fun[(i*2+1)*BoobSize +: BoobSize] <= boobs[i].RIGHT_BOOBIE;
                 end
         end
     endgenerate

endmodule // user


module night_party();
     
     localparam CollegeSize = 128;
     localparam GirlsNextDoor = 3;
     localparam BoobSize = 6;
     
     wire CLK, RESETn;

     boobs_intf boobs[CollegeSize+GirlsNextDoor-1:0](.CLK(CLK), .RESETn(RESETn));
         
     flower_garden #(.CollegeSize(CollegeSize), .BoobSize(BoobSize)) garden(.*);
     user #(.GirlAmount(CollegeSize+GirlsNextDoor), .BoobSize(BoobSize)) usr(.*);

endmodule // night_party

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...