www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于SOPC的通用字符VGA顯示電路設(shè)計(jì)

摘要:文章介紹了基于Nios II的SOPC的通用字符顯示電路的設(shè)計(jì),通過(guò)實(shí)時(shí)讀取點(diǎn)陣字庫(kù)信息并輸出到VGA端口的方法實(shí)現(xiàn)。與傳統(tǒng)方法相比,具有簡(jiǎn)單易行、便于二次開發(fā)的特點(diǎn)。以本方法進(jìn)行了電子萬(wàn)年歷的設(shè)計(jì),并在基于EP2C35F672C6的DE2開發(fā)板上下載驗(yàn)證,結(jié)果表明本方法切實(shí)可行,適合于實(shí)時(shí)信息顯示。
關(guān)鍵詞:SOPC;視頻圖形陣列字符顯示;Nios II

0 引言
    VGA(視頻圖形陣列)是IBM于1987年提出的圖形顯示標(biāo)準(zhǔn),雖然早己不是先進(jìn)的顯示標(biāo)準(zhǔn),但由于其技術(shù)和工藝成熟、成本低廉等優(yōu)勢(shì),目前仍有著廣泛的應(yīng)用。
    現(xiàn)有基于FPGA的VGA顯示系統(tǒng)需要顯示字符,尤其是漢字時(shí),通常方法是首先獲取所用字符的字模,加入到HDL或C代碼中調(diào)用。這種方法過(guò)程繁瑣,且系統(tǒng)通用性不強(qiáng)。本設(shè)計(jì)以任意字符顯示為特點(diǎn),通過(guò)實(shí)時(shí)讀取點(diǎn)陣字庫(kù)實(shí)現(xiàn)字符顯示,對(duì)存儲(chǔ)空間利用率高,且靈活性好,便于進(jìn)行二次開發(fā)。

1 系統(tǒng)硬件設(shè)計(jì)
    本設(shè)計(jì)使用的是基于EP2C35F672C6的DE2開發(fā)板。在SOPC Builder中,將系統(tǒng)命名為system_0,目標(biāo)板設(shè)定為預(yù)定義過(guò)的“DE2 Board”,加入NIOSII/s軟核處理器,在時(shí)鐘列表中添加50MHz的外部時(shí)鐘,在組件列表中添加所需組件,如圖1所示。


    由于本設(shè)計(jì)的Nios II程序及所使用的字庫(kù)需要存儲(chǔ)在Flash中,因此添加了CFI Flash控制器以及三態(tài)Avalon總線,EPCS控制器用于存放FPGA配置信息。LED及JTAG UART組件用于調(diào)試中狀態(tài)反饋,按鈕和開關(guān)組件用于人機(jī)交互,SDRAM組件是本系統(tǒng)的運(yùn)行內(nèi)存,最后是VGA顯示IP核。
    本設(shè)計(jì)中所用VGA顯示IP核符合Avalon總線規(guī)范,實(shí)現(xiàn)的功能為單色顯示,即前景色和背景色各為預(yù)先指定的一種顏色,系統(tǒng)啟動(dòng)時(shí)核內(nèi)顯存讀入一幅單色圖像作為初始顯示畫面。編程時(shí)分別以VGA_Set_Pixel或VGA_Clr_Pixel指令將某一像素置為前景色或背景色。此IP核的結(jié)構(gòu)原理如圖2所示。

[!--empirenews.page--]
    在整個(gè)工程的頂層文件中例化生成的system_0模塊,用鎖相環(huán)模塊產(chǎn)生VGA所需的25MHz時(shí)鐘信號(hào)并作為VGA模塊iCLK 25信號(hào)輸入。由于SOPC的CPU RESET信號(hào)只能鎖定在實(shí)際器件中的按鈕上作為輸入,而DE2開發(fā)上的4個(gè)按鈕在后面的實(shí)例都需要用到,因此在頂層文件中將CPU RESET信號(hào)直接置1。system_0的其他的輸入輸出信號(hào)根據(jù)開發(fā)板的相應(yīng)資源進(jìn)行定義和管腳鎖定。
    本設(shè)計(jì)的FPGA配置信息(sof文件)寫入EPCS器件中,Nios II程序(elf文件)寫入CFI Flash模塊中,所用到的兩個(gè)字庫(kù)也寫入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ǔ)言編寫適用于上述SOPC的字符顯示函數(shù),并以Nios II HAL系統(tǒng)庫(kù)為基礎(chǔ)。
3.1 ASCII碼字符顯示函數(shù)show_asc
    此函數(shù)用于在VGA輸出畫面的(x,y)坐標(biāo)處顯示單個(gè)ASCII碼字符asc,主要代碼如下:
   
          [!--empirenews.page--]

3.2 漢字字符顯示函數(shù)show_hz
    此函數(shù)用于在VGA輸出畫面的(x,y)坐標(biāo)處顯示單個(gè)漢字字符hz,主要代碼如下:
   
3.3 字符串顯示函數(shù)show_str
    此函數(shù)用于在VGA輸出畫面的(x,y)坐標(biāo)處顯示長(zhǎng)度為len的字符串str,內(nèi)容可以由ASCII碼及漢字混合組成,其主要代碼如下:
   

4 實(shí)例應(yīng)用
    基于以上的軟硬件設(shè)計(jì),這里以萬(wàn)年歷作為其應(yīng)用的一個(gè)實(shí)例。以往基于FPGA的萬(wàn)年歷設(shè)計(jì)多使用LCD或七段數(shù)碼管作為輸出,顯示基本的數(shù)字和符號(hào)尚可,但若要加入問(wèn)候語(yǔ)、紀(jì)念日等中文信息則難于實(shí)現(xiàn),基于本電路設(shè)計(jì)的萬(wàn)年歷則可以解決這一問(wèn)題。
    從功能上劃分,此萬(wàn)年歷設(shè)計(jì)可分為3個(gè)模塊:
    (1)時(shí)間日期生成模塊。此模塊包含年、月、日、星期、時(shí)、分、秒共7個(gè)變量的輸出,每個(gè)變量都有各自的子模塊,每個(gè)子模塊都包含預(yù)置、計(jì)數(shù)、進(jìn)位和顯示的功能。其中星期的確定方法是計(jì)算當(dāng)前日期與1990年1月1日(星期一)之間間隔的天數(shù),將此天數(shù)對(duì)7取模并加1,即得到當(dāng)前星期的數(shù)字。
    系統(tǒng)啟動(dòng)時(shí),首先將預(yù)置的初始時(shí)間日期傳遞給顯示函數(shù),由顯示函數(shù)在預(yù)定位置分別顯示7個(gè)數(shù)據(jù),將數(shù)字加上0x30便得到其對(duì)應(yīng)的ASCII碼值,其中星期是將1~7的數(shù)字按星期一~星期日的漢字顯示。
    隨后進(jìn)入系統(tǒng)的主循環(huán),以1秒鐘為循環(huán)間隔,當(dāng)前級(jí)數(shù)字到達(dá)最大值時(shí)向下一級(jí)數(shù)字進(jìn)位。其中日進(jìn)位時(shí)需判斷月份類型(大月、小月或2月),當(dāng)前月為2月時(shí)還需判斷年份類型(是否閏年),以確定日的進(jìn)位數(shù)值。其他數(shù)字的進(jìn)位值是固定的,其中年的范圍設(shè)定為1990~2099。[!--empirenews.page--]
    (2)時(shí)間日期調(diào)整模塊。除星期外,其他6個(gè)數(shù)字均可被調(diào)整。時(shí)間和日期的調(diào)整需要用到開發(fā)板上的4個(gè)按鈕,對(duì)應(yīng)功能分別為切換日期/時(shí)間(KEY0)、在年月日和時(shí)分秒間切換(KEY3)、數(shù)字減(KEY1)和數(shù)字加(KEY2)。用兩個(gè)變量pos與dot表示當(dāng)前的活動(dòng)數(shù)字,其對(duì)應(yīng)關(guān)系如表1所示。


    在程序上,此模塊由按下按鈕所觸發(fā)的中斷服務(wù)函數(shù)實(shí)現(xiàn)。按鈕按下時(shí)產(chǎn)生下降沿,讀取邊沿捕獲寄存器的值即可判斷哪一按鈕被按下。按下KEY0或KEY3時(shí),當(dāng)前活動(dòng)數(shù)字發(fā)生改變;按下KEY1或KEY2時(shí),根據(jù)當(dāng)前活動(dòng)數(shù)字的不同進(jìn)入6個(gè)分支,以各自數(shù)字的進(jìn)位規(guī)則得到調(diào)整后的數(shù)字。
    為了顯示直觀,在當(dāng)前被調(diào)整的數(shù)字下方有實(shí)心原點(diǎn)作為指示標(biāo)志,此圓點(diǎn)以ASCII碼字符0x07表示。
    (3)其他信息顯示模塊。此模塊的作用是在未被時(shí)間日期信息占用的區(qū)域顯示自定義的信息,如不同時(shí)刻的問(wèn)候語(yǔ)、紀(jì)念日信息等。除了使用字符顯示的方法外,還可對(duì)VGA輸出的初始畫面進(jìn)行定制,如加入自定義的圖案標(biāo)志等。此外,由于所用到兩個(gè)字庫(kù)均為單一字體,其他特殊字體的文字也可以加入到此初始圖像中進(jìn)行顯示。

5 測(cè)試與評(píng)價(jià)
    將以上萬(wàn)年歷實(shí)例設(shè)計(jì)下載到DE2開發(fā)板上運(yùn)行,經(jīng)測(cè)試,實(shí)現(xiàn)了所有預(yù)定功能,ASCII碼字符及漢字字符顯示正確,計(jì)時(shí)穩(wěn)定、準(zhǔn)確。運(yùn)行時(shí)的一個(gè)畫面如圖3所示。


    本電路采用基于Altera Nios II的SOPC平臺(tái),實(shí)現(xiàn)了通用字符VGA顯示的功能,設(shè)計(jì)上靈活高效,系統(tǒng)資源利用度高。以本設(shè)計(jì)的通用平臺(tái)為基礎(chǔ)加以開發(fā),可應(yīng)用于諸多需要實(shí)時(shí)信息顯示的場(chǎng)合。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在電子電路中,電解電容的紋波電流承受能力直接影響其使用壽命和電路穩(wěn)定性。準(zhǔn)確測(cè)試紋波電流不僅能驗(yàn)證電容性能是否達(dá)標(biāo),也是電路設(shè)計(jì)可靠性驗(yàn)證的關(guān)鍵環(huán)節(jié)。以下從測(cè)試原理、設(shè)備準(zhǔn)備、操作步驟到數(shù)據(jù)解讀,全面介紹電解電容紋波電流...

關(guān)鍵字: 電解電容 紋波電流 電路設(shè)計(jì)

在電子電路設(shè)計(jì)與實(shí)踐中,穩(wěn)壓芯片是維持穩(wěn)定輸出電壓的關(guān)鍵組件。然而,當(dāng)我們將兩個(gè)輸出電壓不同的穩(wěn)壓芯片的輸出腳連接在一起時(shí),會(huì)引發(fā)一系列復(fù)雜的物理現(xiàn)象和潛在風(fēng)險(xiǎn)。這一操作不僅違反了常規(guī)的電路設(shè)計(jì)原則,還可能對(duì)電路系統(tǒng)造成...

關(guān)鍵字: 穩(wěn)壓 芯片 電路設(shè)計(jì)

在當(dāng)今電子技術(shù)飛速發(fā)展的時(shí)代,隨著電子產(chǎn)品不斷向小型化、高性能化邁進(jìn),印刷電路板(PCB)的設(shè)計(jì)變得愈發(fā)復(fù)雜和精密。過(guò)孔,作為 PCB 中連接不同層線路的關(guān)鍵元件,其對(duì)信號(hào)完整性的影響已成為電路設(shè)計(jì)中不可忽視的重要因素。...

關(guān)鍵字: 印刷電路板 電路設(shè)計(jì) 信號(hào)

IIC(Inter IC Bus)協(xié)議是一種廣泛應(yīng)用于嵌入式系統(tǒng)中的同步半雙工通信協(xié)議。隨著電子設(shè)備的復(fù)雜性不斷增加,高多層電路板設(shè)計(jì)變得越來(lái)越普遍。在高多層電路板中實(shí)現(xiàn)可靠的IIC通信,需要綜合考慮布線策略、電源設(shè)計(jì)、...

關(guān)鍵字: 電路板 電路設(shè)計(jì)

在現(xiàn)代高速、高密度的電路設(shè)計(jì)領(lǐng)域,電路完整性是確保電子系統(tǒng)可靠運(yùn)行的關(guān)鍵要素?;芈冯姼凶鳛殡娐分械囊粋€(gè)重要參數(shù),對(duì)電路完整性有著多方面的深遠(yuǎn)影響。從信號(hào)傳輸?shù)臏?zhǔn)確性到電源系統(tǒng)的穩(wěn)定性,回路電感在其中扮演著不容忽視的角色。...

關(guān)鍵字: 電子系統(tǒng) 回路電感 電路設(shè)計(jì)

在現(xiàn)代汽車電子控制系統(tǒng)中,CAN(Controller Area Network,控制器局域網(wǎng))總線作為一種高效、可靠的通信協(xié)議,發(fā)揮著舉足輕重的作用。它不僅連接著發(fā)動(dòng)機(jī)控制單元(ECU)、變速器控制單元、制動(dòng)系統(tǒng)控制單...

關(guān)鍵字: 車規(guī)級(jí)CAN總線 電路設(shè)計(jì)

串聯(lián)一個(gè)二極管,是利用二極管的單向?qū)щ姷奶匦?,?shí)現(xiàn)了最簡(jiǎn)單可靠的低成本防反接功能電路。這種低成本方案一般在小電流的場(chǎng)合,類似小玩具等。

關(guān)鍵字: 電路設(shè)計(jì) 串聯(lián)

在現(xiàn)代電子系統(tǒng)設(shè)計(jì)中,SOPC(System on a Programmable Chip,可編程片上系統(tǒng))、SoC(System on Chip,片上系統(tǒng))和FPGA(Field Programmable Gate A...

關(guān)鍵字: SOPC SoC FPGA

USB 2.0接口以其高速率等優(yōu)點(diǎn)漸有取代傳統(tǒng)ISA及PCI數(shù)據(jù)總線的趨勢(shì),熱插拔特性也使其成為各種PC外設(shè)的首選接口。

關(guān)鍵字: 數(shù)據(jù)采集 電路設(shè)計(jì)

Finishing 終飾、終修指各種制成品在外觀上的最后修飾或修整工作,使產(chǎn)品更具美觀、保護(hù),及質(zhì)感的目的。Metal Finishing特指金屬零件或制品,其外表上為加強(qiáng)防蝕功能及觀而特別加做的處理層而言,如各種電鍍層...

關(guān)鍵字: PCB 電路設(shè)計(jì)
關(guān)閉