王 敏,秦實宏,陳 騰,姚湘陵
(武漢工程大學(xué) 電氣信息學(xué)院,湖北 武漢 430205)
隨著計算機技術(shù)的快速發(fā)展,串行通訊的應(yīng)用非常廣泛,為實現(xiàn)串行通信功能一般使用專用串行接口芯片,但是這種接口芯片存在體積較大、接口復(fù)雜以及成本較高的缺點,使得硬件設(shè)計更加復(fù)雜,并且結(jié)構(gòu)與功能相對固定,無法根據(jù)設(shè)計的需要對其邏輯控制進行靈活的修改[1]。在傳統(tǒng)的微機接口實驗箱上作進一步開發(fā)。為進一步提高實驗效果和學(xué)生動手能力,實驗中增加芯片設(shè)計部分,為硬件描述語言的理論教學(xué)提供實驗機會。同時接口芯片不再采用傳統(tǒng)的通用芯片,而用FPGA實現(xiàn),提供源代碼,在實驗中直接對FPGA進行編程。利用FPGA代替?zhèn)鹘y(tǒng)的接口實驗芯片,使得系統(tǒng)內(nèi)硬件的功能可以像軟件一樣被編程。這種設(shè)計方法運用到實際的硬件實驗環(huán)境中,增強與拓寬了實驗系統(tǒng)的功能,使實驗系統(tǒng)具有極強的靈活性和適應(yīng)性。
利用FPGA進行串行接口芯片的設(shè)計,其設(shè)計平臺結(jié)構(gòu)框圖如圖1所示,其中,軟件平臺采用多功能微型計算機實驗軟件 MFS(Multi Function Soft,簡稱 MF),MF 將實驗程序開發(fā)工具(匯編語言、C/C++語言程序開發(fā)包),故障診斷程序和外設(shè)模塊實驗演示程序集成在一個環(huán)境中,構(gòu)成一個用戶應(yīng)用程序集成開發(fā)環(huán)境(IDE)。芯片設(shè)計完成后,將其源程序下載到FPGA中,通過USB與PC機連接,在IDE軟件平臺中編寫上位機程序來完成芯片設(shè)計的驗證工作,被控設(shè)備為微機接口實驗箱。
圖1 平臺結(jié)構(gòu)框圖Fig.1 Structure diagram of platform
可編程串行接口芯片8251A是用來作為CPU與外設(shè)或調(diào)制解調(diào)器之間的接口芯片,適合作異步起止式數(shù)據(jù)格式和同步面向字符數(shù)據(jù)格式的接口芯片,其功能很強[2]。8251A的內(nèi)部結(jié)構(gòu)如圖2所示。從功能上將其分為5個部分:數(shù)據(jù)總線緩沖、讀/寫控制邏輯、發(fā)送模塊、接收模塊、調(diào)制控制模塊。
根據(jù)8251A的外部特性和內(nèi)部邏輯,采用層次和模塊化的方法,將頂層設(shè)計中分為4個模塊,如圖3所示。在模塊內(nèi)部定義了發(fā)送和接收數(shù)據(jù)的緩存寄存器,用于實現(xiàn)數(shù)據(jù)總線緩沖器。
圖2 8251A內(nèi)部結(jié)構(gòu)框圖Fig.2 Internal structure of 8251A
圖3 8251A模塊劃分Fig.3 Module division of 8251A
圖3中,左邊與CPU相連,右邊與其他串行接口相連。數(shù)據(jù)在控制信號的作用下首先被保存在鎖存模塊中,鎖存模塊再根據(jù)CnD信號將方式命令字和數(shù)據(jù)分別送給方式字和命令字處理模塊和發(fā)送邏輯模塊處理。方式字和命令字處理模塊接收方式字并解析命令字產(chǎn)生控制信號。發(fā)送邏輯模塊和接收邏輯模塊是主要模塊,分別實現(xiàn)數(shù)據(jù)的發(fā)送和接收,實現(xiàn)發(fā)送和接收過程控制分別由發(fā)送和接收狀態(tài)機完成[3]。
該模塊完成CPU端數(shù)據(jù)和地址的鎖存,通過nCS與nWR信號有效來鎖存地址和數(shù)據(jù)。
方式字和命令字處理模塊完成初始化的方式字和命令字解碼,產(chǎn)生各種控制信號,并處理初始化完成后的命令字。復(fù)位信號生效后,數(shù)據(jù)輸入端(din)的方式字同步于時鐘輸出到方式字輸出(mode_out),同時設(shè)置方式字設(shè)置完成有效,然后才能解析接收到的命令字來輸出錯誤復(fù)位、發(fā)送接收使能信號位有效。
在8251A的應(yīng)用上,CPU端發(fā)送方式字和命令字是有先后順序的,先發(fā)送方式字后,才能再發(fā)送后續(xù)的各種命令字。需要設(shè)置一個方式字完成標(biāo)識信號,或者使用一個簡單的狀態(tài)機完成方式字和命令字的處理,方式字命令字的處理還要注意和時鐘同步,可以加入中間寄存器,中間寄存器根據(jù)讀寫邏輯保存方式字和命令字,然后通過時鐘同步輸出。
發(fā)送邏輯模塊根據(jù)方式字的設(shè)置,按照規(guī)定的字長、奇偶位和停止位來發(fā)送數(shù)據(jù),該模塊主要實現(xiàn)并串?dāng)?shù)據(jù)轉(zhuǎn)換、按順序的數(shù)據(jù)發(fā)送、生成奇偶校驗碼、分頻計數(shù)等功能。按照這個思路可將發(fā)送邏輯模塊分為幾個子模塊,如圖4所示。其中Tx_fifo為可選子模塊,用于數(shù)據(jù)的緩存,Tx_shift_mux為并串轉(zhuǎn)換移位輸出子模塊。Tx_state_machine為發(fā)送狀態(tài)機子模塊,Tx_clk_cn為發(fā)送數(shù)據(jù)位和分頻計數(shù)子模塊,Tx_parity_gen為奇偶校驗位生成模塊,這3個子模塊產(chǎn)生信號控制Tx_shift_mux按照方式字的要求同步于發(fā)送時鐘輸出串行數(shù)據(jù)。
圖4 發(fā)送邏輯模塊的子模塊劃分Fig.4 Sub-module division of send logic module
接收邏輯模塊和發(fā)送邏輯模塊的實現(xiàn)類似,只是數(shù)據(jù)流方向相反,當(dāng)檢測到串行輸入引腳RxD上為低電平時,開始接收數(shù)據(jù)。數(shù)據(jù)接收部分將接收的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù),并作錯誤檢查,更新狀態(tài)字,使RxRDY引腳信號有效。該模塊可分成4個子模塊來實現(xiàn),如圖5所示,Rx_shift_mux子模塊將串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù),Rx_clk_cn子模塊對接收的數(shù)據(jù)位和時鐘分頻計數(shù),Rx_state_machine為主要控制子模塊,Rx_parity子模塊為奇偶校驗子模塊。接收邏輯模塊中最后的并行數(shù)據(jù)需要用寄存器緩存。
圖5 接收邏輯模塊的子模塊劃分Fig.5 Sub-module division of receive logic module
完成芯片的設(shè)計和VHDL源代碼實現(xiàn)后,通過Modelsim軟件來驗證邏輯的正確性[4]。仿真中需要測試文件來產(chǎn)生信號激勵,同時對接收的數(shù)據(jù)進行驗證。測試模塊和8251A的連接方式如圖6所示。
圖6 功能仿真信號連接圖Fig.6 Functional simulation signal connection diagram
8251A_top為測試系統(tǒng)最頂層的模塊,8251Atb為Test Bench模塊,該模塊產(chǎn)生激勵信號,先后寫方式字和命令字,然后發(fā)送數(shù)據(jù),由于8251A的txd和rxd相連,發(fā)送的數(shù)據(jù)又可通過rxd讀回來,通過比較寫的數(shù)據(jù)和讀的數(shù)據(jù),如果相同則發(fā)送和接收都不存在問題,由于8251A功能特性較多,這里只作基本的數(shù)據(jù)發(fā)送和接收功能的測試。測試文件的實現(xiàn)流程如圖7所示。
圖7 測試文件實現(xiàn)流程圖Fig.7 Flow chart of test file
ModelSim中仿真的波形如圖8所示。根據(jù)8251A的外部特性和內(nèi)部結(jié)構(gòu),從圖中可以看出基本的數(shù)據(jù)發(fā)送和接收數(shù)據(jù)和信號都符合邏輯要求,各種狀態(tài)中斷信號也滿足要求。
圖8 功能仿真波形圖Fig.8 Oscillogram of functional simulation
FPGA開發(fā)板是以Xilinx公司的Spartan 3A系列中的XC3S200A為主芯片,采用Xilinx提供的開發(fā)套件ISE來完成芯片設(shè)計的驗證工作。綜合完成后的邏輯網(wǎng)表使用ISE工具將網(wǎng)表中的邏輯單元配置到具體型號的FPGA器件上,這個工作稱為“實現(xiàn)”(Implementation)。Xilinx的實現(xiàn)過程分為翻譯(Translate)、映射(Map)和布局布線(Place&Route)3 步[5]。
在布局布線完成后,使用ISE的iMPACT工具可以將生成的配置文件加載到實際的硬件環(huán)境中測試,成功配置好FPGA后,編寫上位機來測試設(shè)計的芯片8251A,下載芯片代碼對FPGA編程,打開WINDOWS超級終端,選擇波特率9 600,根據(jù)程序設(shè)置8位數(shù)據(jù)位,1位停止位,無奇偶校驗,數(shù)據(jù)流控制設(shè)置為”Xon/Xoff”,在多功能微機接口與原理實驗平臺上,可實現(xiàn)8251A與主機RS232接口的通信。實驗現(xiàn)象為:在超級終端中輸入字符,實驗運行環(huán)境下能接收到;在實驗環(huán)境下輸入字符,超級終端中能接收到。如圖9所示:
圖9 實驗現(xiàn)象Fig.9 Experimental phenomena
采用FPGA設(shè)計串行接口芯片8251A,實現(xiàn)了8251A的異步傳輸方式,數(shù)據(jù)的發(fā)送和接收,由于FPGA芯片具有重復(fù)編程的能力,該方案可以應(yīng)用于接口實驗系統(tǒng)設(shè)計中,根據(jù)不同的實驗要求規(guī)劃不同的實驗控制邏輯,然后將實驗邏輯下載到FPGA芯片中完成實驗功能。與傳統(tǒng)的接口實驗方法相比較,實驗時可以省去了大量繁瑣的接線時間,可以把重點放在電路的設(shè)計、仿真和驗證上,可以更好地達(dá)到實驗?zāi)康模鰪娕c拓寬了實驗系統(tǒng)的功能,使實驗系統(tǒng)具有極強的靈活性和適應(yīng)性。隨著計算機技術(shù)的發(fā)展,計算機教學(xué)實驗的內(nèi)容和方法也應(yīng)改變。但是,目前計算機實驗教學(xué)中,仍然是“驗證式”的實驗為主,而“開放式”的設(shè)計與制作型實驗還很少,其中的一個原因就是實驗設(shè)備和實驗條件的限制[6]。的設(shè)計方法可以應(yīng)用于實驗設(shè)備改進,為微機接口實驗課程改革提供了基礎(chǔ),讓單一的“驗證式”傳統(tǒng)實驗教學(xué)模式,盡早改變成既有“驗證式”,又有“開放式”實驗教學(xué)模式。
[1]王利民,屠玲剛,潘忠鴿,等.基于FPGA的串口通信設(shè)計與實現(xiàn)[J].黑龍江科技信息,2010(21):88-89.
WANG Li-min,TU Ling-gang,PAN Zhong-ge,et al.Design and implementation of serial port communication based on FPGA[J].Heilongjiang Science and Technology Information,2010(21):88-89.
[2]周功業(yè),黃文蘭,盧建華.現(xiàn)代微機系統(tǒng)與接口技術(shù)[M].北京:高等教育出版社,2005.
[3]王子劍,田小剛,鄔軍偉.基于FPGA的異步串行通訊[J].廣西工學(xué)院學(xué)報,2008,19 (4):25-29.
WANG Zi-jian,TIAN Xiao-gang,WU Jun-wei.Asynchronous serial port communication based on FPGA [J].Journal of Guangxi University of Technology,2008,19(4):25-29.
[4]楊躍.FPGA應(yīng)用開發(fā)實戰(zhàn)技巧精粹[M].北京:人民郵電出版社,2009.
[5]孫航,胡靈博,于連鋒,等.Xilinx可編程邏輯器件應(yīng)用與系統(tǒng)設(shè)計[M].北京:電子工業(yè)出版社,2008.
[6]李欣光.探討基于FPGA技術(shù)的微機組成原理實驗系統(tǒng)[J].實驗室科學(xué),2009,12(6):79-81.
LI Xin-guang.An FPGA-based experimentsystem for principles of microcomputers[J].Laboratory Science,2009,12(6):79-81.