2014-01-21 1 views
8

Ich möchte einen Parameter aufnehmen und eine Anzahl von Nullen, die dem Parameter entsprechen, einer Konstante zuweisen und diese Konstante zum Vergleich verwenden. wie mache ich es ?Verwenden von Parametern zum Erstellen von Konstanten in Verilog

Zum Beispiel, sagen Parameter 3 ist, dass ich eine konstante

n=3'b000; 

und verwenden diese n in einer anderen Anweisung erstellt werden soll. Das einzige ist, ich weiß es nicht. Wie initialisiere ich 'n' Nullen und welchen Verilog-Datentyp weise ich zu?

+0

http://stackoverflow.com/questions/19105418/how-to-define-and-initialize-a-vector-containing-only- ones-in-verilog –

Antwort

9

Suchen Sie nach dem Replikationsoperator. Die Syntax lautet {replication_constant{value}}.

Ein Beispiel zum Erstellen eines Busses der Größe WIDTH auf alle Nullen.

parameter WIDTH = 3; 
wire [WIDTH-1:0] n = {WIDTH{1'b0}}; 

Ausführliche Beschreibung des Replikations Operator finden IEEE std 1800-2012 § 11.4.12.1 "Replication Operator"

+1

Sie können die Replikation auch überspringen und nur verdrahten [WIDTH-1: 0] n = '0; um jedes Bit auf 0 zu setzen. – nguthrie

+2

@nguthrie, ist die Füll-Null ("0") für SystemVerilog, die Frage der SO ist für Verilog. – Greg

+1

Sie zitierten den 1800-2012-Standard, also dachte ich, es wäre faires Spiel. Aus meiner Sicht SV ist nur die neueste Version von Verilog, so dass die Leute auch über die SV-Syntax hören können, auch wenn sie ihre Frage nicht damit markiert haben. – nguthrie

4

Gregs Antwort und beantworten, was, wenn Sie alle von 0 wollte erweitern 1 dann.

eine Mischung aus Verkettungs Verwenden {a,b} und Replikation {width{c}}:

wire [WIDTH-1:0] n = { 1'b1, {WIDTH-1{1'b0}} } ; 

Während die '0 oder '1 Syntax in Verwendung in SystemVerilog ist 'b0 zur Breitenanpassung bei älteren Verilog gültig ist. In Verilog-95 würde es nur Breite bis zu 32 Bits zusammenpassen, aber das ist seitdem behoben worden.

Beispiel definieren die Resetwerte auf Flip-Flops:

reg [7:0] a; 
always @(posedge clk or negedge rst_n) begin 
    if(~rst_n) begin 
    a <= 'b0 ; 
...