2017-06-09 3 views
2

Verilog Anfängerfrage: Gibt es eine Möglichkeit, wie ein Modul seine statische/konstante Eigenschaft veröffentlichen kann, wie die Breite des Adressbussegments oder die Anzahl der internen Register? Es ist kein Parameter, sondern Informationen, die dem zu instanziierenden Modul inhärent sind. Weder ist es Modul Ausgabe Daten.Wie veröffentliche ich eine Moduleigenschaft in Verilog?

So etwas wie die (falsche) .addr (Adr [amod.AMOD_ADDR_W -1: 0]) unter

module top_mod #(parameter ADDR_W = 32) 
       (input [ADDR_W-1:0] addr); 
    amod amod(.addr(addr[amod.AMOD_ADDR_W-1:0])); 
endmodule 
// --- 
module amod( 
    input [AMOD_ADDR_W-1:0] addr 
    ); 
    // AMOD_ADDR_W is amod's intrinsic property 
    localparam AMOD_ADDR_W = 2; 
endmodule 

Globale definiert scheint nicht den Weg zu uns zu gehen.

Ich würde auch Links zu einigen nützlichen Verilog-Codierungshinweise schätzen.

Vielen Dank.

Antwort

3

Der Verarbeitungsprozess von Verilog verhindert, dass Parameterwerte in der Hierarchie nach oben fließen. In diesem Fall muss die Portbreite nicht angepasst werden. Verilog wird die Verbindung nach Bedarf abschneiden oder auffüllen. Du brauchst das also nicht.

In SystemVerilog ist eine package die Möglichkeit, Parameterwerte zwischen module s zu teilen.

package amod_pkg; 
    parameter ADDR_W=2; 
endpackage 
module amod import amod_pkg::*; ( 
    input [ADDR_W-1:0] addr 
    ); 
    // ADDR_W is amod's intrinsic property 

endmodule 

// --- 
module top_mod #(parameter ADDR_W = 32) 
       (input [ADDR_W-1:0] addr); 
    amod amod(.addr(addr[amod_pkg::ADDR_W-1:0])); 
endmodule 
+0

Danke trotz der Antwort ist nicht so ermutigend, wie ich gehofft :) –

+0

(Oh, Timeout auf Bearbeiten :() Während die Portbreite nicht ein Problem sein kann, ich bin auch in einer Lösung von dem interessiert anderes Beispiel (eine Zahl) Ich frage mich, wie man eine Reihe von Instanzen einer fast-schwarzen Box erzeugen kann ("sag mir, wie viele Regs drin sind, um die Basisadressen richtig dekodieren zu können") :) –

+0

Wenn Sie den Namen des Moduls, das Sie instanziieren müssen, kennen, sollten Sie _noch_ den localparam-Wert darin kennen. Ja, es ist schwieriger zu warten, aber das ist Verilog. Wechseln Sie zu SystemVerilog und verwenden Sie ein "Paket". –

Verwandte Themen