Verilog testbench неправильно считывает тестовый вектор

Я пишу тестовый стенд 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

Скриншот введите здесь описание изображения

Я нашел еще один подобный вопрос, заданный в Интернете, и я перепроверил свой код с указанным вопросом/ответом. Но я до сих пор не могу понять, что я делаю неправильно.


person Jaclyn    schedule 21.11.2019    source источник


Ответы (1)


Вы объявили, что yexpected имеет ширину 4 бита (как показывают ваши волны, 4'he), но вы хотите, чтобы она была шириной 1 бит.

Сдача:

  logic [3:0] a, yexpected;

To:

  logic [3:0] a;
  logic yexpected;

Загрузка testvectors работает нормально, а вот чтение из нее не было.

person toolic    schedule 21.11.2019