基于basys2驱动LCDQC12864B的verilog设计图片显示
2017-03-14 11:50
344 查看
lcd_qc12864b
该实验最让我头疼的是调用ROM,第一次接触IP核有许多地方都完全不懂。用LCD(带中文字库)显示文字的时候,可以直接输入文字的十六进制数值,设置显示地址坐标即可,12864显示原理点阵控制点的亮灭来实现,但是如果要显示图片的话一个个输入难免太过麻烦,这个时候调用ROM就方便许多。找一张或做一张像素为128x64的单色图片,使用取模软件,按c51的方式取模。取模出来的数据为十六进制,行8个,64个。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/bd7b6945a92c6eb46fa400f0756f1d78.png)
配置块RAM/ROM时,要加载的是.coe文件,所以需要将取模的十六进制数据保存到.coe文件中。最开始我一直在找如何能直接将图片取模出来的数据转化成.coe文件,试了很多方法都失败了,最后发现完全可以自己按文件格式编辑一个即可,最终文件保存格式如下。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/c99dba0f3a35a3cba896a69aee4badd2.png)
将图片取模出来的每个数据前的ox去掉,这只是C语言中16进制的表示形式,文件第一行的MEMORY_INITIALIZATION_RADIX=16;表示数据全都为16进制数,这里的16可以换成8、2、10都行。
打开ISE建立工程后,新建文件,选择IP(CORE Generator & Architecture Wizard),填写文件名,next
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/b3fffbc771dfbdd77e93140d34516894.png)
找到Memories & Storage Elements单击,选择RAMs & ROMs单击,选择Block Memory Generator 7.3,next,finish。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/34965cb883f791210137f12d73b19d85.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/16ab51f7f23ee2ab499afe70de90c191.png)
上面直接next,下面这里选Single Port ROM,next
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/76e95913d3aff5a5af753aa7a9bf16b8.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/7f40f472535e056b7332de9bf5e94bf3.png)
这里要填写数据位宽和深度,位宽是你所需要输出的数据位宽,LCD有8个数据位,故这里定义位宽为8,深度即有多少个这样的数据,从取模出来的数据看,易得共有1024个数据位。我使用的basys2开发板使用的是Xilinx Spantan3E—100TQ144 FPGA包含73728位的块RAM/ROM。因此,使用的块RAM的最大容量为9216字节或4608个16位字。从这里来看,是完全够用的。
Next,加载.coe数据文件,勾选Load Init File 加载.coe文件,我这里是在桌面上保存着,直接找到选择就好。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/a6b7f62b618860e035668e372ac1dc5f.png)
然后一直点击next直至最后一个界面,最后点击Generate,生成rom.xco。生成的IP核在工程目录下的ipcore_dir文件中。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/2184fc1589167f65bace1b0a8ae88a2c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/02c0627afb68e52f2d1c0ce117029d64.png)
将rom.v文件打开端口定义如下,直接在顶层文件对其实例化,如代码所示
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/fff9b044710af2eaeb68f75e11d2e8d2.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/8e36b207229341b152eef9b5ab241842.png)
最后可直接仿真,新建tb文件查看仿真传输数据是否正确。由波形图可得在功能设定指令传输完毕后,进入读数据状态,所读入的数据与文件中数据相符,一行数据传输完毕进入下一行,继续读入数据,仿真图结果正确。下板子也正确。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/7b73c1481738bbd3bdd4cdf7cc60b339.png)
最开始学习FPGA,最容易出现的就是两个问题,一个是把verilog当C语言来写,另一个就是把FPGA当单片机来用。前者我已经有了改善,后者我还需要继续努力。
配置ROM
有分布式ROM/ROM和块ROM/RAM,这里配置的是块ROM/RAM。这两种方式具体我也不是了解很深,以后再深入学习。该实验最让我头疼的是调用ROM,第一次接触IP核有许多地方都完全不懂。用LCD(带中文字库)显示文字的时候,可以直接输入文字的十六进制数值,设置显示地址坐标即可,12864显示原理点阵控制点的亮灭来实现,但是如果要显示图片的话一个个输入难免太过麻烦,这个时候调用ROM就方便许多。找一张或做一张像素为128x64的单色图片,使用取模软件,按c51的方式取模。取模出来的数据为十六进制,行8个,64个。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/bd7b6945a92c6eb46fa400f0756f1d78.png)
配置块RAM/ROM时,要加载的是.coe文件,所以需要将取模的十六进制数据保存到.coe文件中。最开始我一直在找如何能直接将图片取模出来的数据转化成.coe文件,试了很多方法都失败了,最后发现完全可以自己按文件格式编辑一个即可,最终文件保存格式如下。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/c99dba0f3a35a3cba896a69aee4badd2.png)
将图片取模出来的每个数据前的ox去掉,这只是C语言中16进制的表示形式,文件第一行的MEMORY_INITIALIZATION_RADIX=16;表示数据全都为16进制数,这里的16可以换成8、2、10都行。
打开ISE建立工程后,新建文件,选择IP(CORE Generator & Architecture Wizard),填写文件名,next
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/b3fffbc771dfbdd77e93140d34516894.png)
找到Memories & Storage Elements单击,选择RAMs & ROMs单击,选择Block Memory Generator 7.3,next,finish。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/34965cb883f791210137f12d73b19d85.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/16ab51f7f23ee2ab499afe70de90c191.png)
上面直接next,下面这里选Single Port ROM,next
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/76e95913d3aff5a5af753aa7a9bf16b8.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/7f40f472535e056b7332de9bf5e94bf3.png)
这里要填写数据位宽和深度,位宽是你所需要输出的数据位宽,LCD有8个数据位,故这里定义位宽为8,深度即有多少个这样的数据,从取模出来的数据看,易得共有1024个数据位。我使用的basys2开发板使用的是Xilinx Spantan3E—100TQ144 FPGA包含73728位的块RAM/ROM。因此,使用的块RAM的最大容量为9216字节或4608个16位字。从这里来看,是完全够用的。
Next,加载.coe数据文件,勾选Load Init File 加载.coe文件,我这里是在桌面上保存着,直接找到选择就好。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/a6b7f62b618860e035668e372ac1dc5f.png)
然后一直点击next直至最后一个界面,最后点击Generate,生成rom.xco。生成的IP核在工程目录下的ipcore_dir文件中。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/2184fc1589167f65bace1b0a8ae88a2c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/02c0627afb68e52f2d1c0ce117029d64.png)
将rom.v文件打开端口定义如下,直接在顶层文件对其实例化,如代码所示
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/fff9b044710af2eaeb68f75e11d2e8d2.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/8e36b207229341b152eef9b5ab241842.png)
最后可直接仿真,新建tb文件查看仿真传输数据是否正确。由波形图可得在功能设定指令传输完毕后,进入读数据状态,所读入的数据与文件中数据相符,一行数据传输完毕进入下一行,继续读入数据,仿真图结果正确。下板子也正确。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/7b73c1481738bbd3bdd4cdf7cc60b339.png)
最开始学习FPGA,最容易出现的就是两个问题,一个是把verilog当C语言来写,另一个就是把FPGA当单片机来用。前者我已经有了改善,后者我还需要继续努力。
相关文章推荐
- 基于basys2驱动LCDQC12864B的verilog设计图片显示
- 基于basys2驱动LCDQC12864B的verilog设计图片显示
- (原创)基于ZedBoard的Webcam设计(二):USB摄像头图片采集+QT显示
- 基于Verilog的VGA驱动设计(一)VGA时序分析
- 基于ZedBoard的Webcam设计(二):USB摄像头图片采集+QT显示
- [Craftor原创]基于Verilog的I2C总线驱动设计
- 基于ZedBoard的Webcam设计(二):USB摄像头图片采集+QT显示
- 基于FPGA驱动VGA显示图片的小问题
- 基于basys2用verilog设计多功能数字钟(重写)
- 基于I2C的OSD显示驱动设计与实现
- 基于s3c2440 lcd framebuffer 320x240 驱动 测试 显示 320x240 16bpp bmp 图片测试程序
- 基于basys2用verilog设计多功能数字钟(重写)
- 基于basys2用verilog设计多功能数字钟(重写)
- 基于basys2用verilog设计多功能数字钟(重写)
- 基于ZedBoard的Webcam设计(二):USB摄像头图片采集+QT显示
- 基于Verilog的VGA显示驱动
- 基于Remoting技术的三层架构设计(WORD无图片)
- Blend3中创建的Silverlight程序在设计模式下无法显示图片的解决办法
- vxworks操作系统图形模式下显示驱动设计
- 基于IE浏览器的色情图片过滤器的设计和实现