Forum: FPGA, VHDL & Co. Verilog Instanzierung Frage


von Owen S. (senmeis)


Lesenswert?

Hi,

In einer Verilog Testbench ist eine Instanzierung zu sehen:
1
TX_CRC #(.CRC_INIT(32'b0)) tx_crc_i
2
(
3
  .DATA_DS(loopback_DATA),
4
  ...
5
);
Kann mir jemand erklären, was
1
.CRC_INIT(32'b0)
 bewirkt? Und zwar was bedeutet das Zeichen "#"?

Gruss
Owen

von Walleby (Gast)


Lesenswert?


von 1234 (Gast)


Lesenswert?

Bitte vorigen Beitrag ignorieren.

Bei der Instanzierung wird ein Parameter namens CRC_INIT in das Modul 
übergeben.

mit

modulname #(.PAR1(val1), .PAR2(val2) ...) instanzname ( ports);

können beliebig viele Parameter in die Instanz des Moduls übergeben 
werden.

Im Modul selbst kann (muss?) dieser Parameter noch mit einem 
Default-Wert versehen sein.

hier eine Beispiel für ein generisches Dualport-RAM:
1
  module dpmem 
2
    #(parameter DATA_WIDTH=32, parameter ADDR_WIDTH=9)
3
      (input                       clk,
4
       
5
       input                       wren_a,
6
       input      [ADDR_WIDTH-1:0] addr_a,
7
       input      [DATA_WIDTH-1:0] data_a,
8
       output reg [DATA_WIDTH-1:0] q_a,
9
       
10
       input                       wren_b,
11
       input      [ADDR_WIDTH-1:0] addr_b,
12
       input      [DATA_WIDTH-1:0] data_b,
13
       output reg [DATA_WIDTH-1:0] q_b
14
       );

Instanziert werden kann das dann z.b. mit abweichenden Parametern:
1
   dpmem #(.DATA_WIDTH(32), .ADDR_WIDTH(3)) codemem(.clk(),
2
            .wren_a(),
3
            .addr_a(),
4
            .data_a(),
5
            .q_a(),
6
            
7
            .wren_b(),
8
            .addr_b(),
9
            .data_b(),
10
            .q_b()
11
            );

von Lattice User (Gast)


Lesenswert?

Walleby schrieb:
> Beitrag "# in Verilog?"
>

Was dort beschrieben ist gilt nicht in diesem Context.
1
#(.CRC_INIT(32'b0))

Bedeutet dass dem Module zur Synthesezeit ein konstanter Wert als 
Attribute übergeben wird. Das kann wie hier ein Initialisierungswert 
sein, aber auch Dinge wie Zählerbreiten etc.

Das # dient dazu um diese Attributeliste von der Portliste zu 
unterscheiden. Da zwischen der Attributliste und der Portliste noch der 
Instanzname steht erscheint das überflüssig. Aber bei Funktionsaufrufen 
ist das nicht der Fall.

von Walleby (Gast)


Lesenswert?

Achso das wusste ich nicht, aber danke Lattice für deine Erklärung!

MfG

von Owen S. (senmeis)


Lesenswert?

Vielen Dank.

Owen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.