在testbench中读取hex文件:Verilog

时间:2015-08-18 11:04:45

标签: verilog modelsim

我已将图像文件转换为hex文件,该文件在多列中包含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字节)的集合。如果我不知道文件中的字节是多少(因为文件可以是任何大小),我该如何实现呢?

1 个答案:

答案 0 :(得分:0)

如果您有一个给定格式的文件,您可以使用$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值,因此您可以根据需要检查此值以确定长度。