System verilog 每次向SystemVerilog中的二进制文件写入一个字节

System verilog 每次向SystemVerilog中的二进制文件写入一个字节,system-verilog,System Verilog,我想写一个二进制文件(这意味着它需要在十六进制编辑器中打开)。我想在SystemVerilog中一次写入一个字节。我目前一次只能写32位(4字节)。这对我不起作用。以下是我正在使用的代码: task t_Write_File(input string i_File_Name); int n_File_ID; n_File_ID = $fopen(i_File_Name, "wb"); for (int i=0; i<n_Active_Rows; i++) begin

我想写一个二进制文件(这意味着它需要在十六进制编辑器中打开)。我想在SystemVerilog中一次写入一个字节。我目前一次只能写32位(4字节)。这对我不起作用。以下是我正在使用的代码:

task t_Write_File(input string i_File_Name);
  int n_File_ID;
  n_File_ID = $fopen(i_File_Name, "wb");
  for (int i=0; i<n_Active_Rows; i++)
  begin
    for (int j=0; j<n_Active_Cols; j++)
    begin
        $fwrite(n_File_ID, "%u", r_Frame[i][j]);
    end
  end
  $fclose(n_File_ID);
endtask : t_Write_File
task t_Write_文件(输入字符串i_文件名);
int n_文件ID;
n_File_ID=$fopen(i_File_Name,“wb”);

for(inti=0;i您需要将字节打包为32位单位(4字节)。您可以在最内部的for循环中完成此操作

task t_Write_File(input string i_File_Name);
  int n_File_ID;
  bit [32:0] buffer;
  int index;
  n_File_ID = $fopen(i_File_Name, "wb");
  for (int i=0; i<n_Active_Rows; i++)
  begin
    for (int j=0; j<n_Active_Cols; j++)
    begin
        buffer[8*(index++) +:8] = r_Frame[i][j];
        if (index == 4) begin
            index = 0;
            $fwrite(n_File_ID, "%u", buffer);
        end
    end
  end
  $fclose(n_File_ID);
endtask : t_Write_File
task t_Write_文件(输入字符串i_文件名);
int n_文件ID;
位[32:0]缓冲器;
整数指数;
n_File_ID=$fopen(i_File_Name,“wb”);
对于(inti=0;i只需使用“%c”而不是“%u”,如


用于(int j=0;j这很不幸,特别是当我的字节数不能被4整除时。这很容易处理-只需在嵌套for循环后检查index!=0并写入剩余的缓冲区。您能告诉我们有关您的应用程序的更多信息吗?例如,您有读取文件的应用程序的源代码控制吗?如果padd如果最后一组字节仍然无效,您可以构建一个DPI/PLI应用程序,该应用程序可以一次写入一个字节。如果性能有问题,您仍然需要使用4字节或更大的缓冲区,直到达到最后几个字节。
for (int j=0; j<n_Active_Cols; j++)
begin
    $fwrite(n_File_ID, "%c", r_Frame[i][j]);
end