2016-07-31 34 views
0

Ich benutze Icarus iVerilog, um meinen Code zu synthetisieren und zu testen, aber ich bekomme unbekannte Werte, wenn logisch 1's erscheinen sollten. Hier ist ein Beispiel für das, was ich versuche zu tun.Ausgabe von "for" ist unbekannt in Verilog

reg [8:0] a = 000110100; 
wire [8:0] b = 0; 

generate 
    genvar i; 
    for (i = 8; i > -1; i = i - 1) 
    begin:loop 
     assign b[i] = |a[8:i]; 
    end 
endgenerate 

Dies sollte nicht

000111111 

Ich erhalte ich kann

000xxxxxx 

tatsächlich

b[8] = a[8]; 
b[7] = a[8] | a[7]; 
b[6] = a[8] | a[7] | a[6]; 
b[5] = a[8] | a[7] | a[6] | a[5]; 
... 

Meine erwartete Ausgabe ist es, einige Tore in Form produzieren Finde irgendeinen Grund für die x's und bin es Ich vermute, dass es ein Problem mit iVerilog ist.

+0

Unterstützt Ihr Synthese-Tool die Initialisierung von Variablendeklarationen? –

+0

Ich könnte das morgen in einem anderen Tool ausprobieren, aber zwei Dinge, die du jetzt ausprobieren könntest: 1) benutze 'i> = 0' anstatt' i' -1, und 2) Zähle vorwärts von 0 statt rückwärts von 8 – Teajay

Antwort

4

Bitte entfernen Sie die Zuordnung in der nachstehenden Erklärung. Der assign Draht auf 0 in der Erklärung macht Konflikt mit Belegung 1 in genvar Block

wire [8:0] b = 0; 

Änderung

wire [8:0] b; 

Dies liegt daran,

wire [8:0] b = 0; 

nicht eine Initialisierung ist, es sich um ein kontinuierliche Zuordnung Es entspricht

wire [8:0] b; 
assign b = 0; 

Daher der Konflikt.

+0

Das war es. Vielen Dank. – adragon202

+0

@ adragon202 Also, wie wäre es mit Upvoting und akzeptieren Babyworms Antwort dann? –