2015-10-16 47 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的偶數編號的元素中,右邊的數據是奇數編號的元素。