第十五章 終於有了——基於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://blog.chinaaet.com/
* 微博: http://weibo.com/crazybingo
* 郵箱: hanbinhdu@foxmail.com
* 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<Y_pos<384的地區定位顯示內容的地區;例化wireless_ROM,地址為X_pos[9:1],相當於讓座標隨著X軸地址第二位的變化而變化,達到了擴大一倍的目的。
(3)字元的顯示
細心的讀者應該會發現,前一節中PCtoLCD2002設定格式的地方,我們用了“逐行式”的格式來提取字模。這樣做是為了代碼上的方便:
a) 由於每一列都單獨成為一個資料,資料的輸出只要根據Y軸座標的變化即可,方便軟體設計。
b) 每一個rom地址對應X軸地址,這樣更方便的位移。
注意:如,Y_pos[6:1]而不是Y_pos[5:0],相當於讓座標隨著Y軸地址第二位的變化而變化,達到了擴大一倍的目的。
4. 項目