内容发布更新时间 : 2024/12/23 23:15:52星期一 下面是文章的全部内容请认真阅读。
基于FPGA的VGA图像显示控制器设计
前8位用于表示B,中间8位用于表示G,后8位用于表示R。因为硬件存储资源的限制的存在,取图的像像素位深为3,总共起来可显示为8种颜色。首先需要把BMP 图像数据的RGB 分量读出,并且各取1位,颜色分量值也取值‘1’或‘0’。针对24 位的真彩色图像特点,可以先对颜色分量值进行取样,但较为粗略,当颜色的分量值为f red >127,取f red=1;反之取f red=0。同理,颜色的分量值f green , f blue 可取得相应的0,1二值
[12]
。
最后需特别注意是;在利用Visual C ++编入转换程序的时候,BMP文件需按照从左至右,从下至上顺序排列,随即读取文件时,图像最左边的底行的第一个像素最先被读到的是,最右边的顶行一个像素则最后被读,然这一过程与VGA显示器的扫描顺序是恰好相反的。
4.2.2 具体实现步骤
通过Image2lcd对本设计采用的图片进行数据采集,转换成BMP格式的文图文件 如图4.2.2-1所示:
图4.2.2-1 Image2lcd界面图
25 基于FPGA的VGA图像显示控制器设计
将BMP格式文件转换成MIF文件,再经过Quartus II直接将mif文件转化为Hex文件,然后开始利用Megal Wizard Plug Manager 定制图形数据ROM宏功能块,并将图形数据加载与此ROM中,设计步骤如下。
在原有的工程项目中创建新的工程imggrom文件,选择【FILE】>【NEW】菜单,出现如图4.2.2-2,在图中选择【BLOCK Diagarm/Schemrtic File】,单击【OK】建立一个新的原理图设计文件,命名为imgrom.bdf。
图4.2.2-2 新建设计文件选择窗口
在新建的原理图编辑窗口双击,产生元件查找对话框,找出lpm_rom元件,点击【ok】,弹出LPM宏功能设定窗口,如下图4.2.2-3所示:
图4.2.2-3 LPM 宏功能块设定
26 基于FPGA的VGA图像显示控制器设计
选择ROM控制线,地址线和数据线。在图4.2.2-4和图4.2.2-5所示的对话框中选择地址线位宽和ROM数据线分别为3和4096,选择的地址锁存控制信号inclock。
图4.2.2-4 选择imgrom模块数据线和地址线宽度
图4.2.2-5 选择地址锁存信号inclock
27 基于FPGA的VGA图像显示控制器设计
单击NEXT按钮后出现图4.2.2-5的界面,在选择系统默认的Auto。点击【Browse】,找出以生产的HEX文件的位置并添加。
图4.2.2-6 调入POM初始化数据文件并选择在系统读写功能
至此,LPM-Rom设计完成,产生imgrom(图像数据Rom)模块器件,以供系统顶层调用,如图4.2.2-7所示:
图4.2.2-7 imgrom(图像数据ROM)
4.3 二分频模块
在系统进行设计中二分频把50MHz时钟频率分成25MHz并提供给其它模块作为时钟。显示器的像素分辨率是640×480,像素时钟25Mhz,刷新频率60Hz±1。开发板提供
28 基于FPGA的VGA图像显示控制器设计
的系统时钟50MHz,所以要对板载时钟进行分频后才能使用。由于50M分频难以仿真,故将输入时钟clk50m设置为50kHz,分频得到clk25m实际为25kHz。它的模块设计相比VGA显示模块更为简单,在项目中创建新的文件,编写二分频模块代码,保存编译,最后进行原件的封装,二分频模块原件如图4.3-1所示:
图4.3-1 二分频模块
4.4 地址发生器模块
地址发生器模块主要是对图像数据模块中的地址线进行解码,时钟clk与二分频模块、图像数据模块ROM同步。其设计过程与二分频基本相同,只是编辑的VHD代码不同。为此不在重复其设计过去,这里只给出其模块图,如图4.4-1所示:
图4.4-1 地址发生器模块
4.5 顶层设计
在以上模块设计完成后,新建系统工程,建原理图文件,调用VGA显示模块。Imgrom(图像数据rom),二分频模块,地址译码器,把它们连线组成系统的原理图,如图4.5-1所示:
29