geht sowas? (Präprozessor, Verilog)

Gast #3185655
Lesenswert?

Ich hab grade keinen Zugriff zum Entwicklungssystem und knoble sozusagen 
"mit Papier und Bleistift" an einem Problem.

Dabei bin ich auf das Problem gestoßen, wie ich Instanzen eines Moduls 
flexibel parametrisieren kann. Hat sowas wie im Beispiel eine Chance zu 
funktionieren?
1
... irgendwo im Top-Level-Modul:
2
`define MUXwidth 8
3
busmux Mux8 (sel,D1,D2,D3);
4
`define MUXwidth 16
5
busmux Mux16 (sel,A1,A2,A3);
6
...
7

8
// ausserhalb des Top-Level-Moduls vorhanden:
9
module busmux(
10
 input sel,
11
 input [`MUXwidth-1:0] InpA,
12
 input [`MUXwidth-1:0] InpB,
13
 output reg [`MUXwidth-1:0] Out    
14
);
15

16
 always @ (sel, InpA, InpB)
17
  if (sel) Out = InpB;
18
  else Out = InpA;
19

20
endmodule
Gast #3185904
Lesenswert?

busmux #(8) Mux8 (sel,D1,D2,D3);
busmux #(16) Mux16 (sel,A1,A2,A3);

module busmux #(parameter MUXwidth) (
 input sel,
 input [MUXwidth-1:0] InpA,
 input [MUXwidth-1:0] InpB,
 output reg [MUXwidth-1:0] Out
);

 always @ (sel, InpA, InpB)
  if (sel) Out = InpB;
  else Out = InpA;

endmodule

_

Ist aber teilweise schon SystemVerilog, zumindest kein UR-Verilog, bin 
nicht sicher.
Gast #3185937
Lesenswert?

Dogbert schrieb:
>
> Ist aber teilweise schon SystemVerilog, zumindest kein UR-Verilog, bin
> nicht sicher.


Ist Verilog 2001, ich würde es aber so schreiben, funktioniert auch wenn 
man den default nettype auf 'none' hat:

<code>
 busmux #(8) Mux8 (sel,D1,D2,D3);
 busmux #(16) Mux16 (sel,A1,A2,A3);

 module busmux #(parameter MUXwidth) (
  input wire sel,
  input [MUXwidth-1:0] wire InpA,
  input [MUXwidth-1:0] wire InpB,
  output reg [MUXwidth-1:0] Out
 );

  always @ (sel, InpA, InpB)
   if (sel) Out = InpB;
   else Out = InpA;

 endmodule
</code>

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren