在测试台中读取 hex 文件:Verilog

Reading of hex file in testbench : Verilog

我已将一个图像文件转换为十六进制文件,该文件在多列中包含 R、G、B 和 alpha 值。例如:

3c 48 36 ff 1d 2b 19 ff 08 18 06 ff 08 17 05 ff
14 1f 0d ff 1b 22 11 ff 1a 1f 0e ff 1a 1b 0b ff
1d 1a 0b ff 20 1a 0b ff 23 1a 0c ff 23 1c 0d ff
24 1d 0e ff 24 1d 0e ff 21 1c 0d ff 23 1c 0d ff
1f 1a 0b ff 1e 19 0a ff 1c 19 0a ff 1e 1a 0b ff
20 1a 0b ff 24 18 0b ff 23 18 0a ff 21 18 0a ff

现在我想要一种方法来读取这些数据并将其存储为 32 位(即 4 字节)的集合。如果我不知道文件中的字节数是多少(因为文件可以是任意大小),我该如何实现?

如果您有给定格式的文件,您可以使用 $readmemh 系统调用获取这些值并将它们放入 Verilog 数组中:

localparam MAX_SIZE 1024 /* Set this to the maxium image size in bytes */

reg [7:0] image_8[MAX_SIZE-1:0];
reg [31:0] image_32[(MAX_SIZE/4)-1:0];
integer i;

initial begin
  $readmemh("file.hex", image);
  for (i = 0; i < MAX_SIZE/4; i = i + 1) begin
    image_32[i] = ({24'b0, image_8[i*4]} << 24) | ({24'b0, image_8[i*4 + 1]} << 16) | ({24'b0, image_8[i*4 + 2]} << 8) | (image_8[i*4 + 3]);
  end
end

这应该让你的图像成为 Verilog 数组,每个元素都是 32 位长。

(请注意,较小的文件会在数组中留下一堆 'x 值,因此如果需要,您可以检查它以确定长度)