将Verilog中的二进制文件数据读入2D数组

Rus*_*ell 4 verilog system-verilog

我有一个要从二进制文件加载的数组:

parameter c_ROWS = 8;
parameter c_COLS = 16;
reg [15:0]  r_Image_Raw[0:c_ROWS-1][0:c_COLS-1];
Run Code Online (Sandbox Code Playgroud)

我的输入文件是二进制数据,256 字节长(与 r_Image_Raw 相同的总空间)。我尝试使用$fread来完成此操作,但它仅适用于最后一行的第四列:

n_File_ID = $fopen(s_File_Name, "r");
n_Temp = $fread(r_Image_Raw, n_File_ID);
Run Code Online (Sandbox Code Playgroud)

我也尝试使用$fscanf此方法,但在打开综合工具时出现有关打包类型的错误:

while (!$feof(n_File_ID))
  n_Temp = $fscanf(n_File_ID, "%h", r_Image_Raw);
Run Code Online (Sandbox Code Playgroud)

我感觉这应该很容易做到。我是否创建了一个 2D for 循环并循环遍历 r_Image_Raw 变量,一次读取 16 位?我感觉事情不应该那么复杂。

Rus*_*ell 8

我意识到自己的错误。它应该是:

n_File_ID = $fopen(s_File_Name, "rb");
n_Temp = $fread(r_Image_Raw, n_File_ID);
Run Code Online (Sandbox Code Playgroud)

我使用“r”而不是“rb”来指定它是一个二进制文件。有趣的是,“r”确实适用于大多数数据,但无法从文件中读取最后约 13 个位置。