FPGA_工程_基于rom的vga显示

一 框图

二 代码修改

module Display
#(
	parameter H_DISP = 1280,
	parameter V_DISP = 1024,
    parameter H_lcd = 12'd150,
    parameter V_lcd = 12'd150,
    parameter LCD_SIZE = 15'd10_000
)
( 
	input  wire	 		clk,	
	input  wire			rst_n,	
	input  wire	[11:0]	lcd_xpos,	//lcd horizontal coordinate
	input  wire	[11:0]	lcd_ypos,	//lcd vertical coordinate
	
	output wire  [23:0]	lcd_data	//lcd data
);

wire        [23:0] pic_data;
wire          lcd_valid;
reg         [14:0] rom_addra;
reg          [23:0] data_lcd;

assign lcd_data = (lcd_valid == 1'b1) ?  pic_data : data_lcd;
assign lcd_valid = ((lcd_xpos >=(((H_DISP-H_lcd)/2))))
                    &&((lcd_xpos >=(((H_DISP-H_lcd)/2)+H_lcd)))
                    &&((lcd_ypos >=(((V_DISP-V_lcd)/2))))
                    &&((lcd_ypos >=(((V_DISP-V_lcd)/2)+V_lcd)));   

always@(posedge clk or negedge rst_n)
      if(rst_n==1'b0)
        rom_addra <= 15'd0;
      else  if(rom_addra == LCD_SIZE - 1'b1)
        rom_addra <= 15'd0;
      else  if(lcd_valid == 1'b1)
        rom_addra <= rom_addra+1'b1;

`ifdef VGA_HORIZONTAL_COLOR
always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)
		lcd_data <= 24'h0;
	else
		begin
		if	(lcd_ypos >= 0 && lcd_ypos < (V_DISP/8)*1)
			data_lcd <= `RED;
		else if(lcd_ypos >= (V_DISP/8)*1 && lcd_ypos < (V_DISP/8)*2)
			data_lcd <= `GREEN;
		else if(lcd_ypos >= (V_DISP/8)*2 && lcd_ypos < (V_DISP/8)*3)
			data_lcd <= `BLUE;
		else if(lcd_ypos >= (V_DISP/8)*3 && lcd_ypos < (V_DISP/8)*4)
			data_lcd <= `WHITE;
		else if(lcd_ypos >= (V_DISP/8)*4 && lcd_ypos < (V_DISP/8)*5)
			data_lcd <= `BLACK;
		else if(lcd_ypos >= (V_DISP/8)*5 && lcd_ypos < (V_DISP/8)*6)
			data_lcd <= `YELLOW;
		else if(lcd_ypos >= (V_DISP/8)*6 && lcd_ypos < (V_DISP/8)*7)
			data_lcd <= `CYAN;
		else
			data_lcd <= `ROYAL;
		end
end
`endif

`ifdef VGA_VERTICAL_COLOR
always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)
		lcd_data <= 24'h0;
	else
		begin
		if	(lcd_xpos >= 0 && lcd_xpos < (H_DISP/8)*1)
			data_lcd <= `RED;
		else if(lcd_xpos >= (H_DISP/8)*1 && lcd_xpos < (H_DISP/8)*2)
			data_lcd <= `GREEN;
		else if(lcd_xpos >= (H_DISP/8)*2 && lcd_xpos < (H_DISP/8)*3)
			data_lcd <= `BLUE;
		else if(lcd_xpos >= (H_DISP/8)*3 && lcd_xpos < (H_DISP/8)*4)
			data_lcd <= `WHITE;
		else if(lcd_xpos >= (H_DISP/8)*4 && lcd_xpos < (H_DISP/8)*5)
			data_lcd <= `BLACK;
		else if(lcd_xpos >= (H_DISP/8)*5 && lcd_xpos < (H_DISP/8)*6)
			data_lcd <= `YELLOW;
		else if(lcd_xpos >= (H_DISP/8)*6 && lcd_xpos < (H_DISP/8)*7)
			data_lcd <= `CYAN;
		else
			data_lcd <= `ROYAL;
		end
end
`endif

`ifdef VGA_GRAFTAL_GRAPH
always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)
		lcd_data <= 24'h0;
	else
		lcd_data <= lcd_xpos * lcd_ypos;
end
`endif


`ifdef VGA_GRAY_GRAPH
always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)
		lcd_data <= 24'h0;
	else
		begin
		if(lcd_ypos < V_DISP/2)
			lcd_data <= {lcd_ypos[7:0], lcd_ypos[7:0], lcd_ypos[7:0]};
		else
			lcd_data <= {lcd_xpos[7:0], lcd_xpos[7:0], lcd_xpos[7:0]};
		end
end
`endif

 vga_Demo_ip vga_inst (
     .addra(addra),
     .clka(clk),
     .doa(pic_data)
   );

endmodule

对工程中的数据生成模块进行了修改,例化了rom ip ,增添了逻辑语句,用于输出图像数据。


http://www.niftyadmin.cn/n/5374440.html

相关文章

【c++基础】同构数

说明 同构数是这样一种数&#xff1a;它出现在它的平方数的右端。例如&#xff1a;5的平方是25&#xff0c;5就是同构数&#xff0c;25的平方是625&#xff0c;25也是同构数。 再比如&#xff1a;100以内的同构数有1 5 6 25 76这5个整数。 请编程计算出1~N之间&#xff08;包…

Python商业数据挖掘实战——爬取网页并将其转为Markdown

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言前言正则表达式进行转换送书活动 前言 在信息爆炸的时代&#xff0c;互联网…

如何重新安装 macOS

你可以使用电脑的内建恢复系统“macOS 恢复”来重新安装 Mac 操作系统。不但简单快捷&#xff0c;而且重新安装后不会移除你的个人数据。 将 Mac 关机 选取苹果菜单  >“关机”&#xff0c;然后等待 Mac 关机。如果你无法将 Mac 关机&#xff0c;请按住它的电源按钮最长 …

政安晨:演绎在KerasCV中使用Stable Diffusion进行高性能图像生成

小伙伴们好&#xff0c;咱们今天演绎一个使用KerasCV的StableDiffusion模型生成新的图像的示例。 考虑计算机性能的因素&#xff0c;这次咱们在Colab上进行&#xff0c;Colab您可以理解为在线版的Jupyter Notebook&#xff0c;还不熟悉Jupyter的的小伙伴可以去看一下我以前的文…

Oracle的学习心得和知识总结(三十二)|Oracle数据库数据库回放功能之论文四翻译及学习

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

C语言之自定义类型:结构体

目录 1. 结构体类型的声明结构体回顾结构的声明 2. 结构体变量的创建和初始化结构体的特殊声明结构体的自引用 3. 结构体内存对齐对齐规则对齐规则练习1对齐规则练习2对齐规则练习3对齐规则练习4 为什么存在内存对齐offsetof - 计算结构体成员相较于起始位置的偏移量修改默认对…

【Java】乐观锁、悲观锁、可重入锁、不可重入锁、公平锁、非公平锁、互斥锁、共享锁的关系是什么?

这些术语主要与多线程编程中的并发控制相关。下面我将逐一解释这些锁的概念&#xff0c;并解释它们之间的关系。 乐观锁与悲观锁&#xff1a; 乐观锁&#xff1a;基于乐观思想&#xff0c;认为多个线程并发执行时不会彼此冲突&#xff0c;直到更新数据时才会检查是否有冲突。常…

【原创】烟花实现,基于windows操作系统

前言&#xff1a; 烟花的实现是我自己独立实现的第一个项目。那时离除夕只剩几天&#xff0c;我刚学完贪吃蛇。其实个人也很喜欢烟花。所以想送给朋友一份礼物。于是觉得可以一试。构思了一会后&#xff0c;就直接进行了。 成品&#xff1a; 思路&#xff1a; 1.vs2022很多特…