【原创】【红色飓风Nano二代测评】Xilinx ROM的使用方法及搞定VGA字符显示
0赞Xilinx ROM的使用方法及搞定VGA字符显示
—CrazyBingo
—20140509
在设计Altera FPGA VGA字符显示的时候,由于mif文件生成的限制,Bingo当年通过PC2LCD2002字模提取软件,及自创的C2Mif软件,实现了mif文件的生成,极其方便的简化了VGA字符显示的难度,详细博文请见:http://blog.chinaaet.com/detail/21782
但是分析Xilinx FPGA的ROM,其需要的是coe文件,首先解析格式,如下:
(1)新建TXT
(2)第一行:有三种方式
MEMORY_INITIALIZATION_RADIX=10; //10进制
MEMORY_INITIALIZATION_RADIX=2; // 2进制
MEMORY_INITIALIZATION_RADIX=16; //16进制
(3)第二行:
MEMORY_INITIALIZATION_VECTOR=
(4)第三行→第n-1行:数据+逗号结尾
(5)第n行:数据+分号结尾
(5)后缀改为coe
而Bingo的C2Mif软件生成的格式为下图所示:
由于悲剧的Bingo在2011年的时候,当时电脑被偷,因此C2Mif软件的源码都不见了,只能手动在生成的CrazyBingo.mif文件上做手脚。不过幸好改改非常方便,过程如下:
(1) 删除文件头,添加:
MEMORY_INITIALIZATION_RADIX=16;
MEMORY_INITIALIZATION_VECTOR=
(2) 删除mif文件每行的编号,即冒号及之前的内容。
(3) 将最后一行之前的分号改成逗号。
(4) 将文件名尾缀改为coe
虽然麻烦,但是轻松愉快,1分钟搞定,如下:
哈哈,兼职愉快。。。。接着,回到ISE中开始定制ROM。。。如下图所示:
选择Block Memory Generator,如下图所示:
这里我们选择单端ROM,如下所示:
最后,选择ROM的位宽与深度。这里Bingo依然打算显示“Hello World*^V^*”、“I am CrazyBingo!”,64*64的字符,对于英文来说宽度是32*64,因此每行32*16=512,而ROM的深度等于列的宽度64。因此ROM设置如下(与原先Quartus II一样):
最后得到的ROM模块接口,如下所示:
在ROM初始化时,与Quartus II一样,选择初始化文件。前面我们已经准备好了,哈哈。。这里选择helloworld.coe,如下所示:
倘若宽度,深度等的与coe文件不匹配,则在读取coe文件的时候,会出现错误,如下:
反之,如果读取成功,则显示黑色,如下图所示:
此时可以通过右角落的Show按键,来查看coe文件,如下:
最后Generate即可。。。分析生成的文件,如下所示,一大堆。。。
分析生成的vip_rom1.v文件,如下所示,接口与Altera的ROM完全一致:
不过跟Quartus II类似的是,必然会有ROM初始化文件的指定,往下看,如下所示:
原来他读取coe文件,然后转换为mif文件,最后用于ROM核。。。这个蛋不蛋疼啊。。。不过查看这个mif文件,竟然与Quartus II 的mif文件格式不一样,如下所示,是二进制的序列。。。
最后,在lcd_display中例化这两个模块,一如既往的与Quartus II 中实现VGA字符显示一样,呵呵,如下:
编译,生成bit文件,下载测试,还是那个VGA,还是原来的字符,哈哈哈,如下,搞定。。。
明天开始弄Nano2上的68013,哈哈哈哈,加油!!!
PS:你们这些懒人,我把软件给你们上传一下:PC2LCD2002及C2Mif