一次写一个字节到SystemVerilog

时间:2016-03-10 20:25:47

标签: 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
    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

这里的问题是r_Frame是字节,所以它填补了数据(超出32位)。我不想要填充。

2 个答案:

答案 0 :(得分:2)

只需使用“%c”代替“%u”,例如

for (int j=0; j<n_Active_Cols; j++)
begin
    $fwrite(n_File_ID, "%c", r_Frame[i][j]);
end

答案改编自here

答案 1 :(得分:1)

您需要将字节打包成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