读取测试平台中的十六进制文件:Verilog

问题描述 投票:0回答:1

我已经将一个图像文件转换为16进制文件,其中有R,G,B和alpha值的多列。例如:.R,G,B和alpha值在多列中,现在我想把这些数据读取并存储为一个32位的集合。

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位的集合(即4bytes)。如果我不知道文件中的字节数是多少(因为文件可以是任何大小),我如何实现这个目标?

verilog modelsim
1个回答
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 数组中的值,所以如果需要的话,你可以检查这个来确定长度)

© www.soinside.com 2019 - 2024. All rights reserved.