无法读取verilog中的数据输入文件
Unable to read data input file in verilog
我正在尝试从 verilog rest bench 中名为 "data.in" 的外部文件中读取数据。我试图将文件中的数据存储在两个变量 data1 和 data2 中。这是输入文件的一部分。仅读取十六进制数据。不用看评论了。
// This is a generated input file.
//
// rj
// Left Right No.
003E 002E // r1
002E 0017 // r2
0026 0030 // r3
0005 002C // r4
0034 0015 // r5
000B 0023 // r6
0007 0021 // r7
0028 0001 // r8
0007 0012 // r9
//
// Coefficient u
00D3 0034 // 1
0116 01F2 // 2
0016 0154 // 3
01D0 002E // 4
我已经尝试过 memread、fscanf,但没有成功。任何帮助都很棒。
提前致谢。
除非有限制阻止您这样做,否则最简单的方法是使用 $readmemh
到单个变量中,然后根据需要拆分数据:
reg [15:0] data[26]; // Make this is total number of 16-bit values to read from the file
reg [15:0] data1[13]; // Also make these as long as needed, which I assume they are already
reg [15:0] data2[13];
integer i;
...
initial begin
$readmemh("data.in", data);
for (i = 0; i < 26; i = i + 1) begin
if (i % 2) begin // Right
data2[i / 2] = data[i];
end
else begin // Left
data1[i / 2] = data[i];
end
end
end
上面将把数据读入数组,左右数据分开。您始终可以跳过该步骤,因为您知道左侧数据位于 data
的偶数元素中,右侧数据位于奇数元素中。
我正在尝试从 verilog rest bench 中名为 "data.in" 的外部文件中读取数据。我试图将文件中的数据存储在两个变量 data1 和 data2 中。这是输入文件的一部分。仅读取十六进制数据。不用看评论了。
// This is a generated input file.
//
// rj
// Left Right No.
003E 002E // r1
002E 0017 // r2
0026 0030 // r3
0005 002C // r4
0034 0015 // r5
000B 0023 // r6
0007 0021 // r7
0028 0001 // r8
0007 0012 // r9
//
// Coefficient u
00D3 0034 // 1
0116 01F2 // 2
0016 0154 // 3
01D0 002E // 4
我已经尝试过 memread、fscanf,但没有成功。任何帮助都很棒。 提前致谢。
除非有限制阻止您这样做,否则最简单的方法是使用 $readmemh
到单个变量中,然后根据需要拆分数据:
reg [15:0] data[26]; // Make this is total number of 16-bit values to read from the file
reg [15:0] data1[13]; // Also make these as long as needed, which I assume they are already
reg [15:0] data2[13];
integer i;
...
initial begin
$readmemh("data.in", data);
for (i = 0; i < 26; i = i + 1) begin
if (i % 2) begin // Right
data2[i / 2] = data[i];
end
else begin // Left
data1[i / 2] = data[i];
end
end
end
上面将把数据读入数组,左右数据分开。您始终可以跳过该步骤,因为您知道左侧数据位于 data
的偶数元素中,右侧数据位于奇数元素中。