CrazyBingo

【原创】【红色飓风Nano二代测评】Xilinx ROM的使用方法及搞定VGA字符显示

0
阅读(8570)

Xilinx ROM的使用方法及搞定VGA字符显示

         —CrazyBingo

         —20140509

在设计Altera FPGA VGA字符显示的时候,由于mif文件生成的限制,Bingo当年通过PC2LCD2002字模提取软件,及自创的C2Mif软件,实现了mif文件的生成,极其方便的简化了VGA字符显示的难度,详细博文请见:http://blog.chinaaet.com/detail/21782

但是分析Xilinx FPGAROM,其需要的是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

BingoC2Mif软件生成的格式为下图所示:


由于悲剧的Bingo2011年的时候,当时电脑被偷,因此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 CrazyBingo64*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文件,如下所示,接口与AlteraROM完全一致:


不过跟Quartus II类似的是,必然会有ROM初始化文件的指定,往下看,如下所示:


原来他读取coe文件,然后转换为mif文件,最后用于ROM核。。。这个蛋不蛋疼啊。。。不过查看这个mif文件,竟然与Quartus II mif文件格式不一样,如下所示,是二进制的序列。。。


最后,在lcd_display中例化这两个模块,一如既往的与Quartus II 中实现VGA字符显示一样,呵呵,如下:



编译,生成bit文件,下载测试,还是那个VGA,还是原来的字符,哈哈哈,如下,搞定。。。


明天开始弄Nano2上的68013,哈哈哈哈,加油!!!



PS:你们这些懒人,我把软件给你们上传一下:PC2LCD2002及C2Mif

PCtoLCD2002.rar

C2Mif.zip