CrazyBingo

第十五章 终于有了——基于FPGA的C2Mif软件设计以及VGA应用

0
阅读(20649)

第十五章 终于有了——基于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软件

clip_image002

下载地址:http://www.chinaaet.com/lib/detail.aspx?id=86667

这是国内杭州康芯公司设计的波形数据生成器的mif转换软件。该软件主要应用在波形数据的产生,能生成正弦波、方波、三角波、锯齿波等波形的mif文件,长度宽度可以GUI调节,在做波形发生器的时候,用该软件生成很方便,可以消除matlab或者c语言带来的繁琐了。

下图为软件调节,输出mif界面,此软件使用方便,轻巧便捷。

clip_image004clip_image006

2. 国外MIFGEN软件

clip_image008

此软件是国外牛逼人士设计的,也是波形数据的生成软件,个人觉得没有国产康芯Guagle那么好用,因此一笔带过,不做详细介绍。

下载地址:

clip_image010

3. Bingo版的C2Mif 软件

(1)C2Mif Bingo写此软件的目的

clip_image012

clip_image014

 

 

由于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 关于信息

clip_image016

****************************************************************

* C2Mif,感谢您的使用

* 版权所有(C)2011-Endless CrazyBingo

* 若有好的建议或Bug欢迎联系本人

* 以下是编者信息:

* 作者: 韩彬

* 网名: Crazy Bingo

* 博客: http://home.cnblogs.com/crazybingo/

* http://blog.chinaaet.com/

* 微博: http://weibo.com/crazybingo

* 邮箱: hanbinhdu@foxmail.com

* All Rights Reserved: 杭电 无线电爱好者协会

* 软件版本: REV 1.0

* 原创日期: 2011-08-05

* 修改日期: 2011-XX-XX

****************************************************************

(3)C2Mif 帮助信息

clip_image018

****************************************************************

一、待转换的数据源提取

(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文件。

clip_image020

PCtoLCD2002为优秀的字模提取软件,能对不同字体,不同格式的字体,图片等进行编辑,并且输出C51或者A51的语言,同时能够保存为各种格式的16进制字模,设置方便。

PCtoLCD2002下载地址为:http://www.chinaaet.com/lib/detail.aspx?id=86669

1、PCtoLCD2002字模提取

(1)首先,选择字符模式(默认)

clip_image022

(2)制定字模选项,适配各种格式,如下

上文中对于C2Mif软件数据格式中的说明:可以在任意位置输入","、";"、空格、回车、"0x"、"{"、"}"等字符提高数据的可读性,软件会自动进行选择性提取。因此比较灵活,软件会自动做处理。

下图只是针对于PC2LCD2002软件的选项设置,相应输出的最简格式,当然只要符合数据格式即可,此处不必纠结。

clip_image024

(3)设置点阵16*16,输入要提取字模的内容,如下:

clip_image026

(4)软件显示出来的界面,如下:

clip_image028

(5)生成字模,如下所示:

clip_image030

(6)保存字模,并用Notepad++打开,删除注释部分不需要的信息

由于C2Mif软件只能识别","、";"、空格、回车、"0x"、"{"、"}"这些字符,因此注释部分以及文件头删除。如下两图只要删除第一行以及字模右边的注释即可,别的字符:","、";"、空格、回车、"0x"、"{"、"}",软件会自动识别处理,您可以随意设定;因此格式,本软件也适合别的字模提取软件,只要稍微改一下格式即可。

clip_image032

clip_image034

2、C2Mif使用

此处我们要得到16位的Mif文件,设置步骤如下:

(1)打开软件,点击“打开”,选择前面生成并且修改好的字模的txt

(2)软件已经默认选择16进制,请选择在下拉框中选择4位16进制数据,点击"C2Mif一键转换",如下:

clip_image036

(3)去桌面寻找CrazyBingo.mif,用Notepad++打开如下:

clip_image038

(4)搞定,mif文件可以直接在Quartus II 中应用了。如下用Quartus II 打开的生成的CrazyBingo.mif格式文件。

clip_image040

四、项目实例

用三中的介绍,生成各种字符,汉字的字模的mif,如下分别是ASCII的mif以及“无线电爱好者协会”的mif文件。

clip_image042

clip_image044

前面一张讲过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的调用,区域的定位

clip_image046

如上所示,把256<Y_pos<384的区域定位显示内容的区域;例化wireless_ROM,地址为X_pos[9:1],相当于让坐标随着X轴地址第二位的变化而变化,达到了扩大一倍的目的。

(3)字符的显示

clip_image048

细心的读者应该会发现,前一节中PCtoLCD2002设置格式的地方,我们用了“逐列式”的格式来提取字模。这样做是为了代码上的方便:

a) 由于每一列都单独成为一个数据,数据的输出只要根据Y轴坐标的变化即可,方便软件设计。

b) 每一个rom地址对应X轴地址,这样更方便的偏移。

注意:如上图,Y_pos[6:1]而不是Y_pos[5:0],相当于让坐标随着Y轴地址第二位的变化而变化,达到了扩大一倍的目的。

4. 项目效果图

clip_image050