前言

这里记录一下在linux系统下,将bin文件转换成hex文件的几种方式,以及在testbench中编写for循环,去实现任意8的整数倍位宽mem的初始化。


一、hexdump

在linux系统下,利用hexdump这个命令,可以实现将bin文件转换成hex文件。

1.1 hex文件8bit对齐

其中hex文件中8bit对齐的指令如下,hello是需要转换的bin文件。

hexdump -v -e/'1 "%02x\n"'  hello > hello.hex

得到的hello.hex文件格式如下:

7f
45
4c
46
02
01
01
00
00
00

1.2 hex文件32bit对齐

其中hex文件中32bit对齐的指令如下:

hexdump -v -e'/4 "%08x\n"'  hello > hello.hex

得到的hello.hex文件格式如下,hello是需要转换的bin文件。

464c457f
00010102
00000000
00000000
00f30002
00000001
000100c2
00000000
00000040
00000000

格式化输出:

hexdump -e '1/4 "%08_ax: "' -e '4/4 "%08x " "\n"'  xxx.bin

结果如下,其中,星号表示内容与上面重复。

00000000: aa55a55a 00000080 00000001 00000008
00000010: 00000000 00000000 00000000 00000000
*
00000810: 00000080 00000080 00000080 00000080
*
00000890: 00080080 00080080 00080080 00080080
*
00000910: 00100080 00100080 00100080 00100080
*
00000990: 00180080 00180080 00180080 00180080
*
00000a10: 00200080 00200080 00200080 00200080
*
00000a90: 00280080 00280080 00280080 00280080
*
00000b10: 00300080 00300080 00300080 00300080

二、在testbench中实现其他位宽对齐的方法

上述的方式只能实现8bit或者32bit对齐的方式输出hex文件,那么在应用的时候,如何实现其他8的整数倍位宽对齐的数据加载呢,这时候我们需要在tb中写一个循环去实现。

假设我们的mem是64bit对齐,而我们的hex是8bit对齐,具体实现的思路是,先利用一个8bit位宽的mem,将hex中的数据通过$readmemh系统函数读上来,再利用for循环,将mem中的数据拼接好赋给sram中的memory,实现代码参考如下,

bit [7:0] mem [0:500];
initial begin
	int t0;
	$readmemh("program.hex", mem);
	# 1; //这里延时主要是防止和sram中的mem初始化相冲突
	for(int i=0; i<500; i++) begin
		t0 = i>>3;
		$display("t0 = %d", t0);
		test_top.interconnet_wrapper.u_axi_sdpram_w32d2048_w32d2048.memory[t0] = 
			{mem[i+7], mem[i+6], mem[i+5], mem[i+4], mem[i+3], mem[i+2], mem[i+1], mem[i] };
		$display("mem = 0x%h", test_top.interconnet_wrapper.u_axi_sdpram_w32d2048_w32d2048.memory[t0]);
	end
end

其中,上述代码for循环中的500可以根据自己bin文件的大小去更改,数据的拼接方式也可以变成任意8的整数倍位宽。


总结

通过上述方法,可以实现bin到hex的转换,并实现任意8bit整数倍位宽,sram的memory数据加载。

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐