王文濤,張皓月,朱順安,周 佳
(中南民族大學(xué)計算機科學(xué)學(xué)院,武漢430074)
隨著微型計算機應(yīng)用的日益廣泛和深入,接口技術(shù)有了迅速的發(fā)展,并已成為直接影響微機系統(tǒng)功能和推廣應(yīng)用的關(guān)鍵.從硬件的角度來看,微機的開發(fā)與應(yīng)用,在很大程度上就是微機接口電路的開發(fā)與應(yīng)用.FPGA是一種新興的可編程邏輯器件,可以取代現(xiàn)有的全部微機接口芯片,實現(xiàn)微機系統(tǒng)中的存儲器、地址譯碼等多種功能,具有更高的密度、更快的工作速度、更好的穩(wěn)定性和更大的編程靈活性,能熟練運用FPGA設(shè)計接口芯片,無疑需要對接口芯片有更深層次的理解.
8255A具有24個可編程設(shè)置的I/O口,即3組8位的I/O為 PA,PB和 PC[1].它們又可分為2組12位的I/O,A組包括A口及C口(高4位,PC4~PC7),B組包括B口及C口(低4位,PC0~PC3).A組可設(shè)置為基本的I/O口,閃控(STROBE)的I/O閃控式,雙向I/O 3種模式;B組只能設(shè)置為基本I/O或閃控式I/O 2種模式,而這些操作模式完全由控制寄存器的控制字決定.
如圖1,我們將8255A劃分成6個模塊,分別是數(shù)據(jù)總線緩沖器、讀寫控制邏輯、內(nèi)部總線、PA、PB、PC[2].
圖1 8255A內(nèi)部結(jié)構(gòu)圖Fig.1 Internal structure of 8255A
各信號的說明如下.
A1A0:可以形成片內(nèi)4個端口地址,用來尋址8255A內(nèi)部寄存器.
CS:芯片選擇信號線,當CS=1時,表示芯片被選中,允許8255A與 CPU進行通訊;CS=0時,8255A無法與CPU做數(shù)據(jù)傳輸.
WR:寫信號,當WR=1且CS=1時,允許CPU將數(shù)據(jù)或控制字寫入8255A.
RD:讀信號,當RD=1且CS=1時,允許8255A通過數(shù)據(jù)總線向CPU發(fā)送數(shù)據(jù)或狀態(tài)信息,即CPU從8255A讀取數(shù)據(jù).
RESET:復(fù)位輸入線,當該輸入端處于高電平時,所有內(nèi)部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成輸入方式.
數(shù)據(jù)總線緩沖器負責(zé)在CPU與內(nèi)部總線建立數(shù)據(jù)傳輸通道.CTRL[4]、CTRL[3]、CTRL[1]和CTRL[0]分別表示PA和PC高四位、PB和PC低四位的傳輸方向;CTRL[]=0表示輸出,CTRL[]=1表示輸入[3].
內(nèi)部結(jié)構(gòu)如圖2所示,內(nèi)部總線在數(shù)據(jù)總線緩沖器和A口或B口或C口之間建立數(shù)據(jù)傳輸通道.
圖2 8255A內(nèi)部總線結(jié)構(gòu)圖Fig.2 Internal bus structure of8255A
bus_con[3∶0]中只能有一位為1,其余均為0;為1的那位就輸出數(shù)據(jù)到bus[7∶0]中.其他均處于從bus[7∶0]讀數(shù)據(jù)狀態(tài).
讀寫控制邏輯根據(jù)輸入信號的控制,輸出對整個8255A的控制信號.根據(jù)輸入信號的功能可以此模塊分成以下幾個部分.
1)A、CS組成的控制信號.
2)WR、RD組成的讀寫信號.
WR=1,RD=0 時,表示讀數(shù)據(jù);WR=0,RD=1時,表示寫數(shù)據(jù).
圖3 A和CS的控制信號Fig.3 Control signal of A and CS
3)對數(shù)據(jù)總線緩沖器的控制信號[4].
當 RESET=1 時,CTRL=8’b0;當{A,CS,D[7],reset,WR}==6’b110100 時,表示對讀寫控制邏輯的寄存器進行操作.即CTRL=D_inbuf;根據(jù)CTRL[]寄存的數(shù)據(jù)來產(chǎn)生對其他口的控制邏輯.
圖4 CTRL的控制邏輯Fig.4 Control logic of CTRL
4)對PA的控制.
如圖5所示,當 RESET=0,CTRL[7]=1時,PA輸入或輸出由 CTRL[4]控制,PA的方式由CTRL[6∶5]控制.
圖5 對PA的控制Fig.5 Control logic for PA
5)對PB的控制.
與PA類似,只是 CTRL[6∶4],PA分別換成CTRL[2∶1],PB;并且 CTRL[4]換成 CTRL[1].
6)對PC的控制.
當 RESET=0,CTRL[7]=1 時,CTRL[3]和CTRL[0]分別控制 PC[7∶4]和 PC[3∶0]的輸入或輸出,即CTRL[]=0表示輸出,CTRL[]=1表示輸入.
如表1所示,A組有3種方式(0方式、1方式、2方式),由 CTRL[6∶5]控制,傳輸方向由 CTRL[4]控制.關(guān)于 PA 的部分代碼[3]如下:always@(PAtemp1,PA,reset,A,CTRL)
表1 PA的命令字Tab.1 Command word of PA
依2.3所述與A口類似,故不贅述.
C口作用與8255A的工作方式有關(guān),除了作數(shù)據(jù)口以外,還有其他用途.
i)作狀態(tài)口.8255A在1、2方式下有固定的狀態(tài)字是從C口讀入.
ii)作按位控制用.C口的8個引腳可以單獨從1個引腳輸出高/低電平.
以下是對內(nèi)部寄存器:PCtemp1[7∶0],PCtemp2[7∶0]的分析.
(1) 對于 PC[3∶0]的處理.當 PC[0]=1 時,PC[3∶0]有效,PC[3∶1]的值是:
(2)C口讀寫控制如表2.
表2 C口讀寫控制Tab.2 Read and write control of PC
(3)C口高/低4位輸入/輸出方式如表3.
表3 C口的輸入/輸出方式Tab.3 Input/output of PC
設(shè)計完成后,進行各項功能測試,以測試性能是否滿足技術(shù)要求.
圖6為測試平臺硬件實物,采用Xilinx公司的Spartan-3E 系列 FPGA[5,6],3.3V 電源供電,在此平臺上完成對8255A代碼的測試.
圖6 測試平臺硬件實物Fig.6 Hardware test platform
我們進行的是8255A方式0的仿真.在0方式下,彼此獨立的兩個8位和兩個4位并行口,共24根I/O全部由用戶支配,都能被指定作為輸入或者輸出用.需要注意的是,C口的高4位或低4位只能作為一組同時輸出或輸入,不能把4位中的一部分作輸出,另一部分作輸入.
經(jīng)PACE分配引腳,然后通過 JTAG方式將8255A的代碼下載到FPGA上,并給出如圖7激勵,得出仿真結(jié)果如圖8.
激勵如圖7,a[1∶0]在 0 ~180ns為 2’h0,即00,此時選中PA,但無控制字;180~380ns為2h’3,此時選中 din[7∶0]作為狀態(tài)控制字,din[7∶0]為8’h80,即10000000,此狀態(tài)控制字表示,A組和 B組為 0方式,PA、PB和 PC為輸出狀態(tài);380~580ns,a[1∶0]為2’h0,din[7∶0]為8’h65,則選中PA,并且將 din[7∶0]的值送給 paout[7∶0].
仿真結(jié)果如圖8,a[1∶0]在 180 ~380ns為 2’h3,選擇 din[7∶0],此時 din[7∶0]為 8’h80,并將其值送入CTRL.在380 ~580ns,a[1∶0]為2’h0,此時PA被選中,且為輸出狀態(tài),可以看到din[7∶0]為8’h65,而在 400 ~800ns,paout[7∶0]為 8’h65,說明此時paout輸出的值為din[7∶0]里的值,由此實現(xiàn)了8255A的0方式.
圖7 測試波形Fig.7 Testbench wave
圖8 仿真結(jié)果Fig.8 Results of simulation
本文在FPGA上實現(xiàn)了8255A芯片的基本功能,亦可根據(jù)需要,修改參數(shù),任意擴展位數(shù).下一步的工作是通過修改、完善和測試將其封裝成IP核,并且以此作為范例將其他所需的芯片也封裝成IP核,方便調(diào)用.
[1]劉樂善.微型計算機接口技術(shù)及應(yīng)用[M].武漢:華中科技大學(xué)出版社,2000:137-165.
[2]呂志鵬.16位微處理器在FPGA上的設(shè)計與原理實現(xiàn)[D].北京:清華大學(xué),2004.
[3]Davide P,Scott T.Practical FPGA programming in C[M].Boston:Prentice Hall PTR,2007:19-51.
[4]劉 嵐,黃秋元,陳 適.FPGA應(yīng)用技術(shù)基礎(chǔ)教程[M].北京:電子工業(yè)出版社,2009:151-177.
[5]王文濤,王 建,朱順安.基于FPGA的女書文字切割技術(shù)的設(shè)計與應(yīng)用[J].中南民族大學(xué)學(xué)報:自然科學(xué)版,2011,30(1):96-100.
[6]孫 航,胡靈博.Xilinx可編程邏輯器件應(yīng)用與系統(tǒng)設(shè)計[M].北京:電子工業(yè)出版社,2008:84-102.