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는

내가 testvect.tv하지만 tb_a 및 tb_b의 MSB가 누락 나는이 문제를 어떻게 해결할 수 0

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

처럼 LSB가 설정을 읽을 잘못된 값을 읽어? readmemb을 사용하면 잘 작동합니다.

값을 할당하면 잘 작동합니다.

왜 발생 했습니까?

+0

코드를 실행하지 않지만 readmemh 이후에는 1 비트 왼쪽 쉬프트가 있습니다. –

+1

Verilog에서 readmemh를 사용할 때 [값이 이동 될 수 있습니다] (https://stackoverflow.com/questions/46264646/value-is-shifted-when-is-readmemh-in-verilog) – Greg

+0

그건 내 질문입니다. . –

답변

0

이 오류 귀하의 {tb_a,tb_b,tb_op,tb_yexpected} = testvectors[vectornum];

LHS는 99 비트와 RHS는 100 비트의 원인이되는 것입니다. 다만, 대신에 100 비트

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

즉 선언 99 비트로 testvectors 선언.

+0

사실, testvector [98 : 0] .... 또는 97 또는 100 ... 같은 문제가 해결되었을 때 문제가 해결되지 않았습니다. –

+0

난 왜 readmemb 잘 작동하지만 readmemh 이해가 안 돼요 –

+0

내가 왼쪽으로 시프트 readmemh 일이 일어 났지만, 내가 readmemb (testvect.tv 이진 입력에 고정되어 사용) –