2015-10-16 38 views
-1

我正试图从verilog休息长椅上名为“data.in”的外部文件读取数据。我试图将文件中的数据存储在两个变量data1和data2中。这里是输入文件的一部分。只读十六进制数据。无需阅读评论。无法读取verilog中的数据输入文件

// 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但没有运气。任何帮助都很好。 在此先感谢。

+0

尝试使用$ readmemh。你可以看看这个问题http://stackoverflow.com/questions/628603/readmemh-writememh-related-resources的更多细节。 – ssgr

+0

感谢@ssgr的帮助,我已经尝试过,但使用$ readmemh,我没有从单行获取数据,它将整个文件作为单个字符串访问。 –

回答

1

除非你有阻止你这么做的限制,最简单的方法是使用$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的偶数编号的元素中,右边的数据是奇数编号的元素。