在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
结束模块
我希望控制台显示:
- 0001111111000000
- 0010111111000000
- 0010111111000000
我得到的是这些值:
- 0101111111000000
- 1110111111000000
- 1110111111000000
不确定这些值的来源。
我正在使用 Icarus Verilog 0.10.0,如果有帮助的话。
当您初始化内存时,您使用的是十进制值,而不是二进制值。
在前面加上16'b:
memory[0] <= 16'b0001111111000000;
memory[1] <= 16'b0010111111000000;
memory[2] <= 16'b0010111111000000;
问题:我正在尝试在 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
结束模块
我希望控制台显示:
- 0001111111000000
- 0010111111000000
- 0010111111000000
我得到的是这些值:
- 0101111111000000
- 1110111111000000
- 1110111111000000
不确定这些值的来源。
我正在使用 Icarus Verilog 0.10.0,如果有帮助的话。
当您初始化内存时,您使用的是十进制值,而不是二进制值。 在前面加上16'b:
memory[0] <= 16'b0001111111000000;
memory[1] <= 16'b0010111111000000;
memory[2] <= 16'b0010111111000000;