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