Fynjisx 0 24 мая, 2013 Опубликовано 24 мая, 2013 · Жалоба Привет Всем! НАчал разбираться с интерфейсами наSystemVerilog и откровенно говоря не понял, как мне сделать вот это: Есть модуль, содержащий сигналы, из которых я хочу сделать интерфейс. 1.Как внедрить эти сигналы в интерфейс и разместить его в качестве порта этого модуля? 2.Модуль с интерфейсом инстанцируется в количестве N экземпляров в другом модуле, как все N интерфейсов также вынести в качестве порта этого модуля??? Заранее спасибо... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doc17 0 25 мая, 2013 Опубликовано 25 мая, 2013 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 27 мая, 2013 Опубликовано 27 мая, 2013 · Жалоба Классный пример. Но для начинающего, имхо, сложноват. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться