基于SOPC的通用字符VGA顯示電路設計
在整個工程的頂層文件中例化生成的system_0模塊,用鎖相環(huán)模塊產生VGA所需的25MHz時鐘信號并作為VGA模塊iCLK 25信號輸入。由于SOPC的CPU RESET信號只能鎖定在實際器件中的按鈕上作為輸入,而DE2開發(fā)上的4個按鈕在后面的實例都需要用到,因此在頂層文件中將CPU RESET信號直接置1。system_0的其他的輸入輸出信號根據(jù)開發(fā)板的相應資源進行定義和管腳鎖定。
本設計的FPGA配置信息(sof文件)寫入EPCS器件中,Nios II程序(elf文件)寫入CFI Flash模塊中,所用到的兩個字庫也寫入CFI Flash中,字庫起始偏移地址分別為0x80000和0x1000000。
2 字符顯示原理
調用點陣字庫實現(xiàn)任意數(shù)字和漢字的實時顯示是本設計的基本方法。本設計中分別采用ASC16和HZK16字庫作為ASCII碼和漢字的點陣字庫,這兩個字庫最早在UCDOS系統(tǒng)中被使用。
ASC16字庫含有256個ASCII碼字符,每個ASCII碼字符均以16×8的點陣表示,點陣信息以行優(yōu)先的方式存儲,每個字符占用128個存儲位(16字節(jié)),按照ASCII碼的編碼順序存儲,故一個字符的ASCII碼值乘16就是它在ASC16字庫中的偏移地址。
HZK16是依據(jù)GB2312編碼存儲的點陣字庫,每個漢字用16×16的點陣表示,每個字符占用256個存儲位(32字節(jié)),點陣信息同樣以行優(yōu)先方式存儲。
HZK16字庫內漢字按照內碼順序存儲,每個漢字的內碼由兩個字節(jié)組成,高位字節(jié)為區(qū)號,低字節(jié)為位號,兩字節(jié)的范圍均為0xA1~0xFE共94個取值。將漢字的兩個字節(jié)分別減去0xA1,即可得到該漢字的區(qū)號和位號。設某個漢字編碼的兩個字節(jié)分別為0xMM和0xNN,則該漢字在HZK16字庫中對應的偏移地址為:
OFFEST=[94×(0xMM-0xA1)+(0xNN-0xA1)]×32
定位了ASCII碼字符或漢字在點陣字庫中的位置后,讀出其所對應的16字節(jié)或32字節(jié)數(shù)據(jù),用按位與運算和左移運算對每個字節(jié)的8個位逐一測試,將測試結果為1的位的對應像素填充為前景色,否則將像素填充為背景色,實現(xiàn)設定字符的顯示。
3 SOPC中相關函數(shù)的定義
根據(jù)上述原理,以C語言編寫適用于上述SOPC的字符顯示函數(shù),并以Nios II HAL系統(tǒng)庫為基礎。
3.1 ASCII碼字符顯示函數(shù)show_asc
此函數(shù)用于在VGA輸出畫面的(x,y)坐標處顯示單個ASCII碼字符asc,主要代碼如下:
評論