2017-09-18 4 views
0
module tb_alu32(); 
reg clk, reset; 
reg [31:0] tb_a, tb_b, tb_yexpected; 
reg [2:0] tb_op; 
wire [31:0] tb_result; 
reg[31:0] vectornum, errors; 
reg[99:0] testvectors[10000:0]; 
... 
always 
begin 
clk=0;#5;clk=1;#5; 
end 
$readmemh("C:/altera/13.0/practice/week3/alu32/testvect.tv",testvectors); 
always @ (posedge clk) 
begin 

#1; {tb_a,tb_b,tb_op,tb_yexpected} = testvectors[vectornum]; end endmodulereadmemh liest Werte falsch

Ich las testvect.tv aber tb_a und MSB tb_b fehlen und LSB gesetzt 0 wie

0000_0001->0000_0002 
0000_0002->0000_0004 
FFFF_FFFF->FFFF_FFFE 
FFFF_FFFE->FFFF_FFFC 
8000_0001->0000_0002 

Wie kann ich dieses Problem lösen? Wenn ich readmemb verwende, funktioniert es gut.

Wenn ich Werte zuweisen, funktioniert es gut.

Warum ist es passiert?

+0

Ich habe Ihren Code nicht ausgeführt, aber wie es aussieht, gibt es eine Linksverschiebung um 1 Bit nach Readmemh. –

+1

Mögliches Duplikat von [Wert wird verschoben, wenn ich readmemh in Verilog verwende] (https://stackoverflow.com/questions/46264646/value-is-shifted-when-i-use-readmemh-in-verilog) – Greg

+0

Das ist meine Frage . –

Antwort

0

Dies ist, was den Fehler Ihre {tb_a,tb_b,tb_op,tb_yexpected} = testvectors[vectornum];

LHS ist 99 Bits und RHS ist 100 Bit verursacht.

erklären nur
reg[98:0] testvectors[10000:0]; 

heißt anstelle von 100 Bits, erklären testvectors 99 Bits.

+0

Eigentlich ist das Problem nicht gelöst, wenn ich Testvektor [98: 0] .... oder 97 oder 100 ... gleiche passiert. –

+0

Ich kann einfach nicht verstehen, warum readmemb funktioniert gut, aber readmemh nicht –

+0

links Verschiebung passiert, wenn ich readmemh, aber es ist nicht passiert, wenn ich readmemb (testvect.tv ist fest auf Binäreingänge) –

Verwandte Themen