Wie man const in Verilog verwendet
-
27-10-2019 - |
Frage
Anstatt zu verwenden
module ... ( .. ) ;
#15
endmodule
Ich möchte benutzen
module ... ( ... ) ;
// GateDelay is a const, like in c language const int GateDelay = 15 ;
# GateDelay
endmodule
Oder das gleiche
module ... ( ... ) ;
// assume Wordsize is defined at " define Wordsize 15 "
reg [ Wordsize -1 : 0 ] mem ;
endmodule
Kann ich diesen Wunsch in Verilog machen?
Lösung
Sie haben ein paar Optionen:
- Makros mit
`define
s parameter
slocalparam
s
Hier ist ein kleines Beispiel mit allen.
`define CONSTANT_MACRO 1 /* important: no ';' here */
module mymodule
#( parameter WIDTH = 5 )
(
input wire [WIDTH-1:0] in_a,
output wire [WIDTH-1:0] out_a
);
localparam CONSTANT_LOCAL = 2;
assign out_a = in_a + `CONSTANT_MACRO - CONSTANT_LOCAL;
endmodule
Andere Tipps
Für die aufgeführten Fälle würde ich Parameter empfehlen.
Wie die C -Compiler -Richtlinie ist "Define für die Zusammenstellung global. Wenn Ihr Code jemals mit Code verwendet wird, den Sie nicht kontrollieren, müssen Sie hier vorsichtig sein.
Parameter sind immer lokal für den Modulbereich, so dass identisch benannte Parameter in verschiedenen Designelementen nicht miteinander in Konflikt stehen. Sie haben auch den Vorteil, dass sie pro Instanzbasis überschrieben werden können.
module #(parameter DATA_WIDTH = 1) busSlave(
input [DATA_WIDTH-1:0] bus_data,
input bus_wr,
...
);
endmodule
module top;
//DATA_WIDTH is 32 in this instance
busSlave #(.DATA_WIDTH(32)) slave32(
.bus_data(data_0),
.bus_wr(wr_0),
...
);
//DATA_WIDTH is 64 in this instance
busSlave #(.DATA_WIDTH(64)) slave64(
.bus_data(data_1),
.bus_wr(wr_1),
...
);
endmodule
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow