在verilog中读取数据

Reading data in verilog

问题:我正在尝试在 Verilog 中操作 16 位二进制数。我得到的结果似乎与预期结果不符。我已将问题隔离开来,因为 testbench.v 似乎向我的 classify.v 文件发送了错误的值。

这就是我的 testbench.v 文件的样子。

module testbench3();

reg clk, reset; // clock and reset are internal
reg [0:15] data_row;
wire [0:1] actual_class;
reg EN;
reg [0:15] memory [0:2]; //HERE
integer i;

classify dut(.actual_class(actual_class), .data_row(data_row), .EN(EN));

// Set up the system clk
always begin
    #5 clk <= !clk;
end

initial begin     // ASSIGN 16 bit to memory
  memory[0] <= 0001111111000000;
  memory[1] <= 0010111111000000;
  memory[2] <= 0010111111000000;

end

initial begin
    clk <= 0;

    EN <= 0;
    i <= 0;
    reset <= 0; 
    #27; 
    reset <= 1;
end

always @(posedge clk) begin 
    data_row <= memory[i];
    i <= i + 1;
    $display ("%b", data_row); // HERE
    if(i == 3) begin
        $display("End simulation");
        $finish;
    end
  EN = 1;
end

结束模块

我希望控制台显示:

  1. 0001111111000000
  2. 0010111111000000
  3. 0010111111000000

我得到的是这些值:

  1. 0101111111000000
  2. 1110111111000000
  3. 1110111111000000

不确定这些值的来源。

我正在使用 Icarus Verilog 0.10.0,如果有帮助的话。

当您初始化内存时,您使用的是十进制值,而不是二进制值。 在前面加上16'b

memory[0] <= 16'b0001111111000000;
memory[1] <= 16'b0010111111000000;
memory[2] <= 16'b0010111111000000;