FPGA 娱乐项目,通过仿真显示一张图片

一、准备好图片转数据采集工具和bin文件转bit文件

链接:https://pan.baidu.com/s/1BTAbD2-2F9m9MF_dUpV_qw 
提取码:BB73

二、采集数据

1.打开图片采集工具

2.编辑--->>添加图片

3.选完图片可以看到你的图片的大小。

我的是240*240的(这个大小很重要,要记住!),建议自己修改一下大小,通过电脑自带的画图软件就可以,详细步骤搜百度就可以找到。

4.选择设置-->>代码格式

5.如下图选择就行。

6.编辑-->>导出字库

7.不需要索引表,直接选否

三、将刚刚的bin文件转换成txt文件

1.打开HxD,自己选一下系统有32和64的

2.打开刚刚生成的bin文件,按图选择相应的数据

3.全选复制,注意下脚有一个数据1C20,这是所有十六进制的总长度,后面代码中需要将数值写入进去。

4.创建一个txt文件,将代码全都粘贴进去,然后保存

四、vivado代码实现

代码的话,只需要建立一个仿真文件就行,其他的不需要。

值得注意的是刚刚让你记住的两个数值,一个是图片的行大小240,和十六进制数据1C20(十六进制)=7200(十进制),然后根据你自己的数据大小更改一下代码中的 picture_bytes和picture_width。

再需要更改的就是路径了,将你的txt文件路径与我的更改一下就行了$readmemh("D:/matlab_data/666.txt",mem_data);

记住把“\”改成“/”就可以仿真了。

`timescale 1ns / 1ps
module tb_picture();
 
	//根据要显示的图片进行调整
	parameter picture_bytes     = 7200;//图片的总字节数量
	parameter picture_width     = 240;//图片的宽度(像素数量)
 
	parameter dataBit_with      = 8;//数据宽度
	parameter addr_with         = picture_bytes;//数据深度即图片的字节数
	
	parameter total_dot_nuber   = picture_bytes * dataBit_with;//图片的数据总bit数
	parameter picture_length    = total_dot_nuber / picture_width; //一列数据的bit数
	
	parameter pictureLengthBytes= picture_length / dataBit_with;//一列数据的深度
	parameter addr_stop         = addr_with - pictureLengthBytes;//数据列计数时的最大值,因为地址时从0开始计数,一次性加的值是pictureLengthBytes
	
	parameter ClockPeriod       = 10; //定义仿真时钟周期100M
	parameter ClockPeriodNumber = picture_bytes; //定义仿真时钟周期个数
	
	reg  clk_i;
	reg  [31:0] i;
	wire [picture_length - 1:0]  data_in;//读取的图片数据
	wire [picture_length - 1:0]  data_out;//显示仿真图片的变量
	reg  rst_n;
	reg [31:0] addr = 0;
	reg [31:0]  test_reg;
	reg [dataBit_with-1:0] mem_data[0:addr_with-1];// addr_with是地址深度,data_with是数据宽度
	
	//产生固定的仿真周期数量,显示图片一次即可
	initial begin
		clk_i = 0;
		repeat(ClockPeriodNumber*2)
			#(ClockPeriod/2)  clk_i = ~clk_i;
		$stop;//$finish;
	end		
	
	//读取文本型的16进制点阵字符
	initial begin
		$readmemh("D:/matlab_data/666.txt",mem_data);//读取十六进制数据位置
	end
	
	//拼接高位在前,低位在右
	generate
		genvar  m;
		for( m = 0; m < pictureLengthBytes; m = m + 1 )//generate for模块复制
		begin : gfor_block    
			assign	data_out[(dataBit_with * m + dataBit_with - 1 ): (dataBit_with * m)] = mem_data[addr + pictureLengthBytes  - 1 - m];
		end                      
	endgenerate        				
	
	//控制何时停止更新地址
	always@(posedge clk_i )
		begin
		if(addr < addr_stop)begin
			addr <= addr + pictureLengthBytes;	
		end
		end
	endmodule

代码参考的是这位仁兄的,大家可以去看看利用FPGA仿真软件modelsim仿真波形显示图片_modelsim仿真结果图怎么导出_wetells的博客-CSDN博客

五、调整一下大小就可以出来了

我的字是“家”,有点大了就没有显示出来如果成了就回来点个赞

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值