第十五章 终于有了——基于FPGA的C2Mif软件设计以及VGA应用
0赞第十五章 终于有了——基于FPGA的C2Mif软件设计以及VGA应用
一、Mif文件概述
徘徊了很久,mif文件的设计以及应用,到底要不要讲呢?Bingo自己也拿不定主意。写了那么多,有点累了的説。
最后咬咬牙还是写了,因为这东西没人写过,所以我要写,不走寻常路,就我来开辟这一条道路,让FPGA中 Mif文件应用软件设计以及应用从此定格,同时也希望初学的你,不再那么郁闷。
Mif文件在FPGA中的应用,主要是在RAM,ROM中,一般用来存储字模、波形数据、信号采样、数据序列等,可以看做是C语言中的数组,用来存储数据。Bingo当年也是郁闷的很啊,当年做电子琴,在Quartus II Memory Initialzation File 也手动写过曲谱的mif文件。眼睛都花了;曾经做过波形发生器,有康芯的Guagle的支持,很方便;对于VGA字符图片显示,字模数据的庞大,Bingo最后通过C语言,根据mif格式,设计了软件,今天定格。
由于当年项目中遇到过数据量的尴尬,草草的设计了C语言转换程序。Bingo当年就设计过C语言的C2Mif文件转换代码,博文地址如下:
http://www.cnblogs.com/crazybingo/archive/2010/08/02/1790151.html
本章中Bingo将mif文件的介绍,mif软件的设计,mif文件的应用详细介绍于此,从此mif文件的各种叽歪告一段落。
二、Mif转换软件介绍
1. 康芯Guagle软件
下载地址:http://www.chinaaet.com/lib/detail.aspx?id=86667
这是国内杭州康芯公司设计的波形数据生成器的mif转换软件。该软件主要应用在波形数据的产生,能生成正弦波、方波、三角波、锯齿波等波形的mif文件,长度宽度可以GUI调节,在做波形发生器的时候,用该软件生成很方便,可以消除matlab或者c语言带来的繁琐了。
下图为软件调节,输出mif界面,此软件使用方便,轻巧便捷。
2. 国外MIFGEN软件
此软件是国外牛逼人士设计的,也是波形数据的生成软件,个人觉得没有国产康芯Guagle那么好用,因此一笔带过,不做详细介绍。
下载地址:
3. Bingo版的C2Mif 软件
(1)C2Mif Bingo写此软件的目的
由于FPGA设计中,Mif文件的编辑转换,没有官方的软件(QII手动输入的不算)。于此很多不便,Bingo当年用VC编写过转换软件,在DOS窗口下转换多有不便。纠结了很久,求人不如求己,终于在最近狠狠心看VB,想把将己当年设计的底层C语言转换程序,没想到现学现卖,一天搞定,软件出此雏形,山寨版GUI平台,152K ,压缩后只有35K的Mini Software闪亮登场,VB是个好东西啊。O(∩_∩)O哈哈~
Bingo版的C2Mif Rev 1.0 Mif转换软件,今天正式发布。本软件由Bingo个人编写,尊重版权,同时又尊重国人,本不需要序列号,不需要注册,不需要破解,永久性免费使用,可以任意传播,希望能够业界人士带来方便。O(∩_∩)O哈哈~
本软件雏形出炉,加上Bingo一直搞硬件,软件思维薄弱,多少会有bug。试用者若发现软件存在bug,或者有更完美的建议、方案,欢迎联系Bingo:hanbinhdu@foxmail.com,软件将会持续修复、不断更新,让您更满意。
(2)C2Mif关于信息
****************************************************************
* C2Mif,感谢您的使用
* 版权所有(C)2011-Endless CrazyBingo
* 若有好的建议或Bug欢迎联系本人
* 以下是编者信息:
* 作者: 韩彬
* 网名: Crazy Bingo
* 博客:http://home.cnblogs.com/crazybingo/
* 微博:http://weibo.com/crazybingo
* All Rights Reserved: 杭电 无线电爱好者协会
* 软件版本: REV 1.0
* 原创日期: 2011-08-05
* 修改日期: 2011-XX-XX
****************************************************************
(3)C2Mif帮助信息
****************************************************************
一、待转换的数据源提取
(1)Microsoft Visual C++、Matlab或者其他软件产生数据,直接复制进C2Mif编辑窗口。
(2)字模提取软件的搭配使用,用C2Mif的文件打开功能,来读取txt的数据。
(3)少量数据的时候,可以直接手动输入C2Mif编辑窗口。
****************************************************************
二、C2Mif软件的使用
本软件允许"16进制"格式或者"二进制"格式的数据或者文本的输入,通过软件的选择,输出用户需求的位数的Mif文件。
但由于某些因素,目前本软件无法将16进制直接转换为二进制进行相关操作,Bingo觉得也没必要,在此表示歉意。
****************************************************************
对于文本的输入,需要遵循固定的格式,如下
(1)软件已经通过识别转换,可以在任意位置包含空格“ ”。
(2)软件已经通过识别转换,可以在任意位置包含逗号“,”。
(3)软件已经通过识别转换,可以在任意位置包含逗号“;”
(4)软件已经通过识别转换,可以在任意位置包含逗号“0x”。
(5)软件已经通过识别转换,可以在任意位置包含逗号“{”。
(6)软件已经通过识别转换,可以在任意位置包含逗号“}”。
(7)软件已经通过识别转换,可以包含回车。
(8)您可以在任意位置输入","、";"、空格、回车、"0x"、"{"、"}"等字符提高数据的可读性,软件会自动进行选择性提取。除以上七种字符以外,任何有效数据以外的字符,都需要手动删除,软件无法做到如此的智能,因此某些字模提取软件中生成的 “/*"静"*/”、“const char Hzk[][24]=”, 此类信息需要手动删除。如果您提取的内容比较多,建议用Notepad++配合调整结构,Notepad++具有列操作功能(Ctrl+鼠标纵向选择)。
(4)C2Mif相关下载
****************************************************************
C2Mif v1.0
版权所有(C)2011-Endless CrazyBingo
All Rights Reserved: 杭电 无线电爱好者协会
****************************************************************
由于FPGA中尤其是液晶或者数据处理中,经常用到Mif文件,目前还没有转换此类文件的软件,Bingo根据大致的需求编写了此软件,希望对您有用。
****************************************************************
关于C2Mif V1.0 软件的下载
http://www.chinaaet.com/lib/detail.aspx?id=86810
****************************************************************
关于PC2LCD2002软件的下载地址
http://www.chinaaet.com/lib/detail.aspx?id=86669
****************************************************************
关于C2Mif软件的转换及使用教程,请看以下网址:
http://blog.chinaaet.com/detail/21782.html
http://www.cnblogs.com/crazybingo/archive/2011/08/10/2134185.html
****************************************************************
关于VB的学习,《VB从入门到精通》,请看以下网址:
http://www.chinaaet.com/lib/detail.aspx?id=86805
****************************************************************
关于VB的串口例程学习,对初学者代码会有帮助,请看以下网址:
http://www.chinaaet.com/lib/detail.aspx?id=86806
****************************************************************
鄙人雅作于此,仅希望对同道中人有助,谢谢!
!
三、Mif软件使用步骤
本节中,Bingo利用PCtoLCD2002,C2Mif这两款软件协调,来完成各种字模或者图片字模的提取,同时转换为对应的mif文件。
PCtoLCD2002为优秀的字模提取软件,能对不同字体,不同格式的字体,图片等进行编辑,并且输出C51或者A51的语言,同时能够保存为各种格式的16进制字模,设置方便。
PCtoLCD2002下载地址为:http://www.chinaaet.com/lib/detail.aspx?id=86669
1、PCtoLCD2002字模提取
(1)首先,选择字符模式(默认)
(2)制定字模选项,适配各种格式,如下
上文中对于C2Mif软件数据格式中的说明:可以在任意位置输入","、";"、空格、回车、"0x"、"{"、"}"等字符提高数据的可读性,软件会自动进行选择性提取。因此比较灵活,软件会自动做处理。
下图只是针对于PC2LCD2002软件的选项设置,相应输出的最简格式,当然只要符合数据格式即可,此处不必纠结。
(3)设置点阵16*16,输入要提取字模的内容,如下:
(4)软件显示出来的界面,如下:
(5)生成字模,如下所示:
(6)保存字模,并用Notepad++打开,删除注释部分不需要的信息
由于C2Mif软件只能识别","、";"、空格、回车、"0x"、"{"、"}"这些字符,因此注释部分以及文件头删除。如下两图只要删除第一行以及字模右边的注释即可,别的字符:","、";"、空格、回车、"0x"、"{"、"}",软件会自动识别处理,您可以随意设定;因此格式,本软件也适合别的字模提取软件,只要稍微改一下格式即可。
2、C2Mif使用
此处我们要得到16位的Mif文件,设置步骤如下:
(1)打开软件,点击“打开”,选择前面生成并且修改好的字模的txt
(2)软件已经默认选择16进制,请选择在下拉框中选择4位16进制数据,点击"C2Mif一键转换",如下:
(3)去桌面寻找CrazyBingo.mif,用Notepad++打开如下:
(4)搞定,mif文件可以直接在Quartus II 中应用了。如下用Quartus II 打开的生成的CrazyBingo.mif格式文件。
四、项目实例
用三中的介绍,生成各种字符,汉字的字模的mif,如下分别是ASCII的mif以及“无线电爱好者协会”的mif文件。
前面一张讲过VGA的显示驱动,通过这一章,FPGA+VGA,其实也可以当做记事本来用。只要修改mif文件便可以修改VGA显示的内容。而mif的生成,至此应该灰常的简单了。
本节重点介绍简单的介绍“无线电爱好者协会”这几个字的显示,ASCII码的显示雷同,不做累赘的说明。
关于代码的下载,请见
项目比较大,而且是一年多前写的,格式不是很严谨,而且没有按照Bingo前一章的格式来写请见谅。项目是从逻辑分析仪的工程修改的,主要实现了1024*768分辨率下,内容的显示以及定时器的功能,VGA驱动代码模块请见上一章,此工程主要文件HSU_Time_Disp.v,看懂了此文件便能够很好的应用mif之类的文件了。VGA的显示驱动,其实就那么一回事。
1. 生成mif
利用三种介绍的方法,提取64*64的“无线电爱好者协会”这几个的字模,并生成mif文件。详细介绍请见上文。
2. 建立工程
根据前一章的vga_panel_design模块,来定制工程。略。
3. 修改vga_display.v
(1)Rom的调用,区域的定位
如上所示,把256 (3)字符的显示 细心的读者应该会发现,前一节中PCtoLCD2002设置格式的地方,我们用了“逐列式”的格式来提取字模。这样做是为了代码上的方便: a) 由于每一列都单独成为一个数据,数据的输出只要根据Y轴坐标的变化即可,方便软件设计。 b) 每一个rom地址对应X轴地址,这样更方便的偏移。 注意:如上图,Y_pos[6:1]而不是Y_pos[5:0],相当于让坐标随着Y轴地址第二位的变化而变化,达到了扩大一倍的目的。4. 项目效果图