基于A(yíng)valon總線(xiàn)的鍵盤(pán)和VGA控制接口設計
SOPC(System On Programmable Chip,可編程的片上系統)是Altera公司提出的一種靈活、高效的SOC解決方案。它將處理器、存儲器、I/O口等系統設計 需要的功能模塊集成到一個(gè)可編程器件上,構成一個(gè)可編程的片上系統。SOPC是PLD和ASIC技術(shù)融合的結果,代表了半導體產(chǎn)業(yè)未來(lái)的發(fā)展方向。
Altera公司的Nios II核是目前最具代表性的軟核嵌入式系統處理器,本文描述的SOPC系統以Altera NiosII為基礎,利用SOPC Builder對Nios II及其外圍系統進(jìn)行構建,使該嵌入式系統在硬件結構、功能特點(diǎn)、資源占用等方面全面滿(mǎn)足系統設計的需求。
設計課題的確立
本文所描述的SOPC系統需要完成以下功能:
1.利用PS2接口的鍵盤(pán)作為設計的信號輸入和外部控制電路部分;
2.利用VGA顯示接口作為設計的信號輸出和顯示電路部分;
3.嵌入處理器 + 應用軟件。
根據以上要求,確立要完成本文設計的3個(gè)功能模型,分別是:兼容標準鍵盤(pán)的PS2控制接口邏輯;基于Avalon總線(xiàn)的VGA顯示接口邏輯,以及NiosII嵌入式處理器和PS2/VGA驅動(dòng)程序。
系統的組成和結構
在SOPCBuilder中構造整個(gè)系統的連接,包括基本的SOPC系統和自定義外設?;維OPC系統的核心是NiosII處理器Core,它還包含Avalon三態(tài)總線(xiàn),以及掛在總線(xiàn)上的外部存儲設備接口,包括SRAM(或SDRAM)控制接口及Flash控制接口;以及定時(shí)計數Timer和調試Jtag_Uart模塊。而本課題設計的關(guān)鍵就是自定義的外設接口——基于Avalon總線(xiàn)協(xié)議的PS2接口和VGA控制接口。
基于Avalon總線(xiàn)協(xié)議的PS2控制接口設計
PS2控制接口協(xié)議
PS2設備接口多用于當今的鼠標和鍵盤(pán)設計,它是由IBM 開(kāi)發(fā)并最早出現在IBM 技術(shù)參考手冊里。PS2 鼠標和鍵盤(pán)遵循雙向同步串行協(xié)議,每次數據線(xiàn)上發(fā)送一位數據,時(shí)鐘線(xiàn)上的脈沖就被讀入。鍵盤(pán)/鼠標可以發(fā)送數據到主機,同樣主機也可以發(fā)送數據到設備,但主機總是在總線(xiàn)上有優(yōu)先權,它可以在任何時(shí)候抑制來(lái)自于鍵盤(pán)/鼠標的通訊,而只需把時(shí)鐘拉低即可。
從鍵盤(pán)/鼠標發(fā)送到主機的數據,在時(shí)鐘信號的下降沿被讀??;從主機發(fā)送到鍵盤(pán)/鼠標的數據在上升沿被讀取。不管通訊的方向怎樣,鍵盤(pán)/鼠標總是產(chǎn)生時(shí)鐘信號。如果主機要發(fā)送數據,它必須先告訴設備開(kāi)始產(chǎn)生時(shí)鐘信號。PS2設備最大的時(shí)鐘頻率是33kHz 而大多數設備工作在10-20kHz。設備到主機的通訊過(guò)程如圖2所示:
所有數據安排在字節中,每個(gè)字節為一幀,包含了11/12 個(gè)位,這些位的含義如下:1個(gè)起始位,總是為0;8個(gè)數據位,低位在前;1個(gè)校驗位,奇校驗;1個(gè)停止位,總是為1;1個(gè)應答位,僅在主機對設備的通訊中出現。
鍵盤(pán)上包含了一個(gè)大型的按鍵矩陣,它們是由“鍵盤(pán)編碼器”來(lái)監視的。監視哪些按鍵被按下或釋放了,并在適當的時(shí)候傳送到主機。而主板上包含了一個(gè)“鍵盤(pán)控制器”負責解碼所有來(lái)自鍵盤(pán)的數據, 并告訴軟件什么事件發(fā)生。在主機和鍵盤(pán)之間的通訊使用IBM 的協(xié)議,最初IBM 使用Intel8048 微處理器作為它的鍵盤(pán)編碼器,而使用Intel8042 微控制器作為它的鍵盤(pán)控制器,這些現 已被兼容設備取代,并整合到主板的芯片組中。
鍵盤(pán)的處理器花費很多的時(shí)間來(lái)掃描或監視按鍵矩陣。如果它發(fā)現有鍵被按下、釋放或按住,鍵盤(pán)將發(fā)送“掃描碼”的信息包到計算機。掃描碼有兩種不同的類(lèi)型:“通碼”和“斷碼”。當一個(gè)鍵被按下或按住就發(fā)送通碼;當一個(gè)鍵被釋放就發(fā)送斷碼。每個(gè)按鍵被分配了唯一的通碼和斷碼,這樣主機通過(guò)查找唯一的掃描碼就可以測定是哪個(gè)按鍵。
基于A(yíng)valon總線(xiàn)的鍵盤(pán)控制器的FPGA實(shí)現
基于A(yíng)valon總線(xiàn)的鍵盤(pán)控制器的實(shí)現,需模擬Intel8042的功能時(shí)序,完成鍵盤(pán)控制器的功能模型的建立,并完成其RTL代碼。本鍵盤(pán)控制器,不僅完成8042對鍵盤(pán)掃描碼的接收功能,還要把掃描碼轉換為處理器能夠識別的ASCII碼。
從鍵盤(pán)讀數據:當從鍵盤(pán)收到有效的掃描碼就把它放置在輸入緩沖區,IBF(輸入緩沖區滿(mǎn))標志被設置,產(chǎn)生IRQ1。如果中斷是使能,IRQ1將激活鍵盤(pán)驅動(dòng)程序,它指向0x09中斷向量。驅動(dòng)程序將從Avalon_PS2_BASE端口讀取ASCII碼。這個(gè)動(dòng)作會(huì )釋放IRQ1并復位IBF標志。接著(zhù)ASCII被驅動(dòng)程序處理。如下圖3顯示接收“c”通碼的時(shí)序,經(jīng)過(guò)11個(gè)PS2_CLK接收到“c”的掃描碼為“0x21”,同時(shí)掃描碼被轉換為ASCII碼,為“0x63”。圖4,模擬了鍵盤(pán)發(fā)送一個(gè)大寫(xiě)“A”的數據傳輸時(shí)序,其過(guò)程為SHIFT通碼(0x12),“A”通碼(0x1c),“A”斷碼(0xf0,0x1c),SHIFT斷碼(0xf0,0x12)。此過(guò)程中加入了兩個(gè)標識位,SHIFT標識(rx_shift_key_on)和斷碼標識(rx_released),用以顯示SHIFT是否被按下,及發(fā)送的是通碼或斷碼。
往鍵盤(pán)寫(xiě)數據:當你寫(xiě)數據到鍵盤(pán)控制器的輸出緩沖區,控制器設置OBF(輸出緩沖區滿(mǎn))標志并處理數據??刂破鲗l(fā)送這個(gè)數據到鍵盤(pán)并等待一個(gè)回應。如果鍵盤(pán)沒(méi)有接收或在指定時(shí)間內沒(méi)有回應,相應的超時(shí)標志就會(huì )被設置。
基于A(yíng)valon總線(xiàn)協(xié)議的VGA控制接口設計
VGA原理
VGA接口主要有五個(gè)信號線(xiàn),分別為R、G、B、vsync(場(chǎng)同步)、hsync(行同步)信號。Red、Green、Blue 就是大家熟知的三原色,由RGB的電壓差便可以產(chǎn)生出所有的顏色。如果R、G、B各用一個(gè)bit來(lái)控制,也就是只有0、1兩種電壓準位,則所能形成的顏色種類(lèi)只有8種。若每一種顏色能用多個(gè)bit來(lái)分出不同準位的電壓差,顏色就能多樣化呈現。vsync和hsync用作顯示器的同步信號,依據垂直與水平更新率的不同,不斷送出固定頻率的信號輸出,此時(shí)就可以在屏幕上正確的顯示色彩。
屏幕的顯示方式,是從左邊最上角的第一個(gè)像素開(kāi)始,然后依次向右顯示下一個(gè)像素,到顯示完第一列的最后一個(gè)像素,就跳到第二列的第一個(gè)像素繼續開(kāi)始顯示。一直到整個(gè)屏幕都顯示完畢時(shí),回到原點(diǎn),如此能不斷的刷新畫(huà)面。對上述5個(gè)信號的時(shí)序驅動(dòng),VGA顯示器要求嚴格遵循“VGA工業(yè)標準”,即640×480×60Hz模式。下圖給出VGA行掃描、場(chǎng)掃描的時(shí)序。
這是每一行掃描所需的時(shí)間,3.77μs(29.88μs - 26.11μs)是hsync必需降為0的時(shí)間,1.89μs是后置準備時(shí)間,0.94μs是前置準備時(shí)間。而25.17μs則是像素顯示時(shí)間,顏色的變化都要在這個(gè)時(shí)間內顯示,在該時(shí)間域外,R、G、B三根信號線(xiàn)都一定置0,否則將無(wú)法正確顯示畫(huà)面。
每一個(gè)垂直信號內,總共要包含480個(gè)水平信號(或者在不同分辨率時(shí),會(huì )有不同數目的行信號)。64μs(15.764ms - 15.700ms)是vsync必需為0的時(shí)間。1.02ms是后置準備時(shí)間,0.35ms是前置準備時(shí)間,15.24ms是圖像周期。每一個(gè)vsync就顯示新的一幀。
基于A(yíng)valon總線(xiàn)的VGA控制器的實(shí)現
Avalon流模式外設的設計需要遵循Avalon總線(xiàn)規范?;贏(yíng)valon總線(xiàn)VGA控制器的硬件結構如圖7所示,該控制器由4部分構成:vga_regster_bank:VGA寄存器控制模塊;line_buffer:FIFO存儲器,由Magawizard產(chǎn)生;vga_driver:vga時(shí)序發(fā)生器,產(chǎn)生行場(chǎng)信號,并從FIFO中讀取像素信息產(chǎn)生RGB;imga_dma:DMA控制器,完成直接存儲,從系統SRAM中讀取數據傳輸到FIFO。
使用pixel_counter(像素計數器)生成行時(shí)序,計數器應每31.77μs完成一個(gè)周期,當VGA時(shí)鐘選擇在25MHz,則每行需31.77μs/(1/25MHz) = 794個(gè)時(shí)鐘周期。而行同步信號保持為低狀態(tài)要3.77μs,3.77*25 = 94;所以如圖8所示,在A(yíng)處像素計數值為0,B-94,C-140,D-781,E-794,然后復位到0,從而產(chǎn)生行同步時(shí)序。同理,對場(chǎng)也需通過(guò)一個(gè)計數器生成場(chǎng)時(shí)序。
在EP2C5T的板子上,要使用存儲器,通常需要實(shí)時(shí)顯示的都會(huì )使用on-chip memory(片內存儲器),因為on-chip memory的雙口結構可以同時(shí)對一塊存儲單元不同的地址進(jìn)行讀、寫(xiě),同時(shí),on-chip memory的速度極快,可以不經(jīng)過(guò)外部總線(xiàn)工作,因此不會(huì )出現總線(xiàn)仲裁和延遲。但是因為實(shí)驗板的on-chip memory較小,而設計中256色顯存空間最少要 307.2Kbytes。因此,選擇外部SRAM作為顯存,并由imga_dma 產(chǎn)生的DMA控制從Avalon總線(xiàn)主動(dòng)讀取外部SRAM中的數據。
一般在A(yíng)valon總線(xiàn)上大多是從外設,其使用的方式是,一直等待chipselect的輸入為1時(shí),才讀取總線(xiàn)上的數據,如果chipselect一直為0的狀態(tài)下,則從外設將不做響應。然而,跟一般從外設不一樣的是VGA控制器中的imga_dma模塊是一個(gè)主外設,它完成存儲器到存儲器的 DMA傳輸,它通過(guò)Avalon總線(xiàn)一端連接外部顯存(SRAM),一端連接控制器的FIFO。然后控制器不斷主動(dòng)的去讀取SRAM中的數據,并輸出信號到RGB。
實(shí)驗分析及結果展示
中文字符串顯示:先建立中文字符串字庫,利用鍵盤(pán)擴展鍵觸發(fā),Nios II軟件捕捉到此鍵碼,顯示字符串。英文字符顯示:鍵盤(pán)輸入,由PS2協(xié)議模塊捕捉到鍵盤(pán)輸入的掃描碼,轉換成ASCII碼,Nios II軟件再根據ASCII碼值在預先建立好的ASCII字庫中尋址讀取ASCII字庫數據,并把字庫數據寫(xiě)入到VGA顯示存儲器;然后VGA控制模塊把顯示存儲器中的數據通過(guò)DMA方式發(fā)送到VGA,完成英文字符顯示。
至此完成課題設計要求,利用PS2鍵盤(pán)輸入、VGA顯示、Nios II數據處理,構造了一個(gè)SOPC系統。
評論