Я пишу тестовый стенд SystemVerilog для проверки функции XOR с 4 входами. Я проверил, чтобы убедиться в отсутствии ошибок, но почему-то испытательный стенд неправильно считывает файл тестового вектора.
Может ли кто-нибудь сказать мне, что я сделал неправильно?
module testbench_xor();
logic clk, reset;
logic [3:0] a, yexpected;
logic y;
logic [31:0] vectornum, errors; // bookkeeping variables
logic [4:0] testvectors[0:10000]; // array of testvectors
// instantiate device under test
xor_4 dut({a[3:0]}, y);
// generate clock
always
begin
clk = 1; #5; clk = 0; #5;
end
// load vectors at start of test and
// pulse reset
initial
begin
$readmemb("test3.tv", testvectors);
vectornum = 0; errors = 0;
reset = 1; #27; reset = 0;
end
// apply test vectors at rising edge of clock
always @(posedge clk)
begin
#1; {a[3:0], yexpected} = testvectors[vectornum];
end
// check results
always @(negedge clk)
if (~reset) begin
if (y !== yexpected) begin
$display("Error: inputs = %b", a[3:0]);
$display(" outputs = %b (%b expected)",y,yexpected);
errors = errors + 1;
end
vectornum = vectornum + 1;
if (testvectors[vectornum] === 5'bx) begin
$display("%d tests completed with %d errors", vectornum, errors);
$finish;
end
end
endmodule
test3.tv
0000_0
0001_1
0010_1
0011_0
0100_1
0101_0
0110_0
0111_1
1000_1
1001_0
1010_0
1011_1
1100_0
1101_1
1110_1
1111_0
Расшифровка ModelSim
# Compile of xor.sv was successful.
# Compile of testbench_xor.sv was successful.
# 2 compiles, 0 failed with no errors.
vsim -gui work1.testbench_xor
# vsim
# Start time: 02:22:26 on Nov 22,2019
# Loading sv_std.std
# Loading work1.testbench_xor
# Loading work1.xor_4
add wave -position end sim:/testbench_xor/clk
add wave -position end sim:/testbench_xor/reset
add wave -position end sim:/testbench_xor/a
add wave -position end sim:/testbench_xor/yexpected
add wave -position end sim:/testbench_xor/y
add wave -position end sim:/testbench_xor/vectornum
add wave -position end sim:/testbench_xor/errors
add wave -position end sim:/testbench_xor/testvectors
run -all
# Error: inputs = 0000
# outputs = 0 (0011 expected)
# Error: inputs = 0000
# outputs = 0 (0101 expected)
# Error: inputs = 0000
# outputs = 0 (0110 expected)
# Error: inputs = 0000
# outputs = 0 (1001 expected)
# Error: inputs = 0000
# outputs = 0 (1010 expected)
# Error: inputs = 0000
# outputs = 0 (1100 expected)
# Error: inputs = 0000
# outputs = 0 (1111 expected)
# Error: inputs = 0001
# outputs = 1 (0010 expected)
# Error: inputs = 0001
# outputs = 1 (0100 expected)
# Error: inputs = 0001
# outputs = 1 (0111 expected)
# Error: inputs = 0001
# outputs = 1 (1000 expected)
# Error: inputs = 0001
# outputs = 1 (1011 expected)
# Error: inputs = 0001
# outputs = 1 (1101 expected)
# Error: inputs = 0001
# outputs = 1 (1110 expected)
# 16 tests completed with 14 errors
# ** Note: $finish : C:/Modeltech_pe_edu_10.4a/examples/testbench_xor.sv(39)
# Time: 185 ns Iteration: 1 Instance: /testbench_xor
# 1
# Break in Module testbench_xor at C:/Modeltech_pe_edu_10.4a/examples/testbench_xor.sv line 39
Скриншот
Я нашел еще один подобный вопрос, заданный в Интернете, и я перепроверил свой код с указанным вопросом/ответом. Но я до сих пор не могу понять, что я делаю неправильно.