rom读图片

本文算是个草稿,以后再优化

使用rom读数据时,列如读图片时,需要遍历rom中的所有的值,此时需要注意以下几个信号

四个比较重要的信号,即rom的读使能信号rden,rom的读地址addr,rom的读数据有效信号,和rom的读出的数据。
在这里插入图片描述

module lcd_display(
	input					lcd_clk		,
	input					rst_n			,
	
	input		[10:0]	pixel_xpos	,		//像素点横坐标
	input		[10:0]	pixel_ypos	,		//像素点纵坐标
		
	output	[15:0]	pixel_data	,
);

//parameter define
parameter	H_DISP	=	11'd480	;	//行有效数据
parameter	V_DISP	=	11'd272	;	//场有效数据
//图像的分辨率
parameter	PIC_H		=	11'd190	;	
parameter	PIC_V		=	11'd134	;	
//图像的起始坐标
parameter	POS_X		=	(H_DISP - PIC_H)/2;
parameter	POS_Y		=	(V_DISP - PIC_V)/2;
//rom的参数
parameter	WIDTH = 16'd16				;
parameter	DEPTH = 16'd25460			;

//空白区域的显示颜色
parameter	WIRTE		=	16'b11111_111111_11111;

//reg define
reg	[15:0]	addr			;
reg				rom_valid	;

//wire define
wire				rden			;
wire	[15:0]	rom_data		;

//rden:rom的读使能信号
assign	rden = ((pixel_xpos >= POS_X) && (pixel_xpos < (POS_X + PIC_H)) 
						&& (pixel_ypos >= POS_Y) && (pixel_ypos < (POS_Y + PIC_V))
						? 1'b1 : 1'b0;
						
//addr:rom读地址
always @ (posedge lcd_clk or negedge rst_n) begin				
	if(!rst_n)
		addr <= 16'd0;
	else 	if(rden) begin
		if(addr == DEPTH - 1'd1)
			addr <= 16'd0;
		else
			addr <= addr + 1'd1;
	end
	else
		addr <= 16'd0;
end

//rom_valid:读rom的数据有效信号
always @ (posedge lcd_clk or negedge rst_n) begin				
	if(!rst_n)
		rom_valid <= 1'b0;
	else
		rom_valid <= rden;
end

//pixel_data:输出图像数据
assign pixel_data = (rom_valid == 1'b1) ? rom_data : WIRTE;

pic_rom	pic_rom_inst (
	.address 	(addr),
	.clock 		(lcd_clk),
	.rden 		(rden),
	.q 			(rom_data)
);


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值