2017-09-18 6 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 lit des valeurs erronées

J'ai lu testvect.tv mais tb_a et MSB sont portés disparus et de LSB tb_b est défini comme 0

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

Comment puis-je résoudre ce problème? Si j'utilise readmemb, cela fonctionne bien.

Si j'affecte des valeurs, cela fonctionne bien.

Pourquoi cela est-il arrivé?

+0

Je n'ai pas besoin d'exécuter votre code, mais à quoi ça ressemble, il y a un décalage de 1 bit après readmemh. –

+1

Copie possible de [La valeur est décalée lorsque j'utilise readmemh dans verilog] (https://stackoverflow.com/questions/46264646/value-is-shifted-when-i-use-readmemh-in-verilog) – Greg

+0

Voilà ma question . –

Répondre

0

C'est ce qui provoque l'erreur Votre {tb_a,tb_b,tb_op,tb_yexpected} = testvectors[vectornum];

LHS est 99 bits et 100 bits est RHS. Il suffit de déclarer

reg[98:0] testvectors[10000:0]; 

i.e. au lieu de 100 bits, déclarer testvectors être 99 bits.

+0

En fait, le problème n'est pas résolu lorsque j'ai corrigé testvector [98: 0] .... ou 97 ou 100 ... la même chose s'est produite. –

+0

Je n'arrive pas à comprendre pourquoi readmemb fonctionne bien mais readmemh ne fonctionne pas –

+0

à gauche quand j'utilise readmemh, mais cela ne s'est pas produit quand j'utilise readmemb (testvect.tv est fixé aux entrées binaires) –