2016-07-13 3 views
0

Was ist der beste Weg, um die folgende Logik zu erstellen?SystemVerilog: Wie erstellt man eine Schnittstelle, die ein Array von einfacheren Schnittstellen mit verschiedenen Eingängen ist?

interface top_if(input rst_n[NUM_OF_modules], 
       input clk[NUM_OF_modules]); 

simple_if i_simple_if[NUM_OF_modules](.reset_n(rst_n[?]), .clock(clk[?])); 

Ich brauche die rst_n[x] und clk[x] zu entsprechenden i_simple_if[x] schicken? Was ist der beste Weg, das zu tun? Die reset_n und clock sind 1-Bit-Eingangssignale von simple_if.

ENDINTERFACE

Antwort

1

Wie über eine generate loop:

interface top_if #(parameter NUM_OF_modules = 1) 
        (input rst_n[NUM_OF_modules], 
        input clk[NUM_OF_modules]); 

    generate 
    genvar i; 
    for (i=0; i<NUM_OF_modules; i++) 
     begin : NAME 
     simple_if i_simple_if(.reset_n(rst_n[i]), .clock(clk[i])); 
     end 
    endgenerate 

endinterface 

http://www.edaplayground.com/x/3ALC

+0

Danke für die Beantwortung. Ich habe versucht, dies zu tun, Aber ich bin mit dem Problem konfrontiert, wenn ich die Schnittstelle übergeben: i_top_if.NAME [i] .i_simple_if zu einem Modul das VCS wirft einen Fehler sagen: nicht aufgelöster oder generierter Instanzname 'i_top_if. NAME [0] .i_simple_if 'wird verwendet. – Vivek

1

I zwei verschiedene Methoden ausprobiert: 1) erzeugen Schleife für die Schnittstelle: simple_if innerhalb des top_if.The VCS ist nicht glücklich darüber und werfen Illegally Connected Interface Port, wenn ich die generierte Schnittstelle an ein Modul übergeben. 2) Also musste ich die folgende Methode ausprobieren.

interface top_if #(parameter NUM_OF_modules = 1) 
       (input rst_n[NUM_OF_modules],clk[NUM_OF_modules]); 

    simple_if i_simple_if[NUM_OF_modules](); 
endinterface 
top_if i_top_if(); 
generate 
for (genvar i=0; i<NUM_OF_modules; i++) begin 
assign i_top_if.i_simple_if[i].rst_n = xxx; 
assign i_top_if.i_simple_if[i].clk = yyy; 
end 
endgenerate 
Verwandte Themen