研祥智能科技股份有限公司 陳志列
摘要:介紹了一種基于FPGA的LPC-ISA總線橋接設(shè)計與實(shí)現(xiàn)的方法;LPC-ISA接口橋接單元包括LPC接口、ISA接口、地址寄存單元、等待時間存儲單元、數(shù)據(jù)寬度判定單元以及數(shù)據(jù)緩沖單元幾部分功能模塊;LPC-ISA接口橋接單元通過接收訪問地址的特征或接口傳送的信號狀態(tài),在工業(yè)控制計算機(jī)領(lǐng)域?qū)崿F(xiàn)了對8位和16位ISA設(shè)備的讀寫兼容,延長了現(xiàn)存的8位、16位ISA設(shè)備的使用壽命。
關(guān)鍵字:LPC總線;ISA總線;現(xiàn)場可編程邏輯門陣列
0 前言
ISA(Industry Standard Architecture,工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu))總線是IBM公司為PC/AT電腦而制定的總線標(biāo)準(zhǔn),為16位體系結(jié)構(gòu),支持16位的I/O設(shè)備,數(shù)據(jù)傳輸率大約是16MB/S,也稱為AT標(biāo)準(zhǔn)。LPC(Low Pin Count,低管腳數(shù))總線是Intel公司定義的一個數(shù)據(jù)地址命令多路復(fù)用總線,工作頻率為33MH。在工業(yè)計算機(jī)領(lǐng)域,LPC總線已經(jīng)逐漸取代了ISA總線而成為新的接口[1]。
目前在工業(yè)控制計算機(jī)領(lǐng)域,仍然有很多外圍設(shè)備只提供ISA總線接口。由于其工作頻率,數(shù)據(jù)地址總線寬度以及讀寫時序等等與LPC總線不同,因而外圍設(shè)備需要進(jìn)行總線接口轉(zhuǎn)換后才能接入LPC總線正常工作。
對于目前很多工控機(jī)主板已經(jīng)不再提供ISA接口,普遍以LPC接口取代ISA接口的情況,業(yè)界開發(fā)出該兩種接口的轉(zhuǎn)接卡以能夠使眾多用戶繼續(xù)使用ISA設(shè)備。然而,現(xiàn)有的轉(zhuǎn)接卡只支持8位的ISA設(shè)備,無法實(shí)現(xiàn)8位、16位ISA設(shè)備的同時兼容。如此,在實(shí)際應(yīng)用中對現(xiàn)存的16位ISA設(shè)備就不能夠繼續(xù)使用,導(dǎo)致現(xiàn)有資源的浪費(fèi)。
本文提出一種基于FPGA(Field Programmable Gate Array,現(xiàn)場可編程門陣列)實(shí)現(xiàn)的LPC-ISA總線橋接設(shè)計方案,實(shí)現(xiàn)了對現(xiàn)有8位、16位ISA設(shè)備的兼容使用。
1 系統(tǒng)設(shè)計
FPGA作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路,可以解決定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn),具有設(shè)計周期最短、開發(fā)費(fèi)用低、保密性強(qiáng)、體積小、重量輕、可靠性高等特點(diǎn)[2]。本系統(tǒng)主要由主設(shè)備、LPC總線、LPC-ISA接口橋接單元、ISA總線、ISA設(shè)備組成。其中LPC-ISA接口橋接單元采用XILINX公司的XC3S100E-4TQG144C。
系統(tǒng)總體設(shè)計框圖如圖1所示。
圖1 系統(tǒng)總體設(shè)計框圖
主設(shè)備(如工業(yè)控制計算機(jī))通過LPC總線與接口橋接單元連接,接口橋接單元的另一側(cè)通過ISA總線與ISA設(shè)備連接。ISA設(shè)備可以是8位或16位I/O設(shè)備和存儲器設(shè)備。主設(shè)備在取得總線的使用權(quán)后,通過LPC總線發(fā)起對ISA設(shè)備的訪問。接口橋接單元根據(jù)LPC總線傳送的地址特征,或根據(jù)LPC總線傳送的地址特征和收到的兩個總線傳送的其他信息,確定傳送的數(shù)據(jù)的寬度(8位或16位),讀取LPC總線的數(shù)據(jù),并通過ISA總線驅(qū)動ISA設(shè)備,從而完成8位或16位數(shù)據(jù)的寫操作。
2 硬件邏輯設(shè)計
基于FPGA的LPC-ISA接口橋接單元主要包括LPC接口、ISA接口、地址寄存單元、等待時間存儲單元、數(shù)據(jù)寬度判定單元以及數(shù)據(jù)緩沖單元幾部分功能模塊,如圖2所示。
圖2 LPC-ISA接口橋接單元內(nèi)部結(jié)構(gòu)圖
其中:LPC接口和ISA接口,分別用于連接LPC總線和ISA總線;
等待時間存儲單元,用于接收并累加LPC總線時鐘周期,在累加值達(dá)到設(shè)定的閾值時,輸出該信息給數(shù)據(jù)寬度判斷單元。
數(shù)據(jù)寬度判斷單元,根據(jù)等待時間存儲單元輸出的信息或根據(jù)等待時間存儲單元輸出的信息和16位片選信號的狀態(tài)或高字節(jié)允許信號的狀態(tài),判斷在讀寫周期所傳送的數(shù)據(jù)寬度。
地址寄存單元,用于暫存LPC接口傳送的外設(shè)訪問地址,并將訪問地址的特征提供給數(shù)據(jù)寬度判斷單元;
數(shù)據(jù)緩沖單元,用于暫存LPC接口傳送的8位或16位數(shù)據(jù)。
主設(shè)備在LPC總線上發(fā)起讀寫周期,LPC-ISA接口橋接單元將LPC總線傳輸?shù)臄?shù)據(jù)解碼,產(chǎn)生讀寫控制信號,其中訪問地址信息暫時存入地址寄存單元,數(shù)據(jù)信息暫時存入數(shù)據(jù)緩沖單元。然后,接口橋接單元根據(jù)訪問地址產(chǎn)生相應(yīng)
設(shè)備片選信號,并將地址、數(shù)據(jù)和控制信號驅(qū)動到ISA總線上。
(1)讀操作
對于從ISA接口讀取數(shù)據(jù)到LPC接口的讀操作,數(shù)據(jù)寬度判斷單元根據(jù)地址寄存單元的地址特征,判斷在讀操作周期所讀數(shù)據(jù)的寬度。
地址寄存單元先收到的訪問地址為奇地址時,則接口橋接單元從ISA總線讀取8位數(shù)據(jù)到數(shù)據(jù)緩沖單元,以備LPC總線在讀操作周期讀取到主設(shè)備。當(dāng)?shù)刂芳拇鎲卧仁盏降脑L問地址為偶地址時,數(shù)據(jù)寬度判斷單元根據(jù)LPC總線讀取的兩個8位數(shù)據(jù)的等待時間,判斷在讀操作周期讀取的數(shù)據(jù)寬度。
如果該等待時間超過9個LPC時鐘周期,則確定是8位讀數(shù)據(jù);反之,可以確定是16位讀數(shù)據(jù)。接口橋接單元將數(shù)據(jù)讀取至數(shù)據(jù)緩沖單元暫存,供LPC接口在讀操作周期將數(shù)據(jù)讀入主設(shè)備。
(2)寫操作
對于寫操作,數(shù)據(jù)寬度判斷單元根據(jù)地址寄存單元的地址特征、LPC總線和ISA總線傳送的信息,判斷在寫操作周期所寫數(shù)據(jù)的寬度。
其中,地址寄存單元收到的訪問地址為奇地址時,數(shù)據(jù)寬度判斷單元根據(jù)這一地址特征和ISA總線傳送的無效的16位片選信號,則判斷是8位數(shù)據(jù)的寫操作,并將此判斷信息輸入給數(shù)據(jù)緩沖單元,接口橋接單元置高字節(jié)允許信號為有效狀態(tài),將數(shù)據(jù)緩沖單元的8位數(shù)據(jù)寫入8位ISA設(shè)備。
如果地址寄存單元收到的訪問地址為偶地址,數(shù)據(jù)寬度判斷單元根據(jù)這一地址特征和ISA總線傳送的有效16位片選信號,判斷是16位數(shù)據(jù)的寫操作,并將此判斷信息輸入給數(shù)據(jù)緩沖單元,接口橋接單元置高字節(jié)允許信號為有效狀態(tài),將數(shù)據(jù)緩沖單元的16位數(shù)據(jù)寫入16位ISA設(shè)備;否則,判斷是8位數(shù)據(jù)的寫操作,并將此判斷信息輸入給數(shù)據(jù)緩沖單元,接口橋接單元置高字節(jié)允許信號為無效狀態(tài),將數(shù)據(jù)緩沖單元的8位數(shù)據(jù)寫入8位ISA設(shè)備。
3 軟件設(shè)計流程
如圖3所示,為LPC-ISA橋接單元的程序流程圖。
圖3 程序流程圖
(1)初始化
LPC接口、ISA接口初始化。
(2)判斷進(jìn)程是否開始運(yùn)行
在以主設(shè)備、橋接單元和從設(shè)備構(gòu)成的系統(tǒng)運(yùn)行之初,判斷接口之間是否有數(shù)據(jù)需要傳送,若沒有數(shù)據(jù)傳送,進(jìn)程處于等待狀態(tài)直到進(jìn)程開始;若有數(shù)據(jù)傳送,說明進(jìn)程還沒完成。在當(dāng)接口需要進(jìn)行16位數(shù)據(jù)操作時,判斷進(jìn)程在完成高8位數(shù)據(jù)操作完成之后是否仍然處于運(yùn)行狀態(tài)。
(3)判斷讀/寫進(jìn)程
在該狀態(tài)中,判斷運(yùn)行的進(jìn)程是讀進(jìn)程還是寫進(jìn)程。若為讀,讀進(jìn)程運(yùn)行;相反,開始寫進(jìn)程。
(4)寫進(jìn)程
寫進(jìn)程實(shí)現(xiàn)向ISA設(shè)備寫數(shù)據(jù)的操作。
在該狀態(tài)中,只有當(dāng)ISA端設(shè)備準(zhǔn)備好接收數(shù)據(jù),LPC接口才能開始向接口橋接單元寫數(shù)據(jù)。之后,對LPC接口執(zhí)行的兩個8位寫數(shù)據(jù)操作之間的等待時間進(jìn)行判斷。
在確認(rèn)ISA端設(shè)備準(zhǔn)備接收數(shù)據(jù)操作完成之后,接口橋接單元開始處理LPC接口傳送的數(shù)據(jù)。接口橋接單元判斷LPC接口傳送給ISA接口的兩個8位數(shù)據(jù)之間的等待時間,以確定是8位數(shù)據(jù)的寫操作還是16位數(shù)據(jù)的寫操作。如果該等待時間小于9個LPC時鐘周期,則接口橋接單元確認(rèn)傳送的數(shù)據(jù)寬度是16位,當(dāng)前執(zhí)行的操作是對16位ISA設(shè)備的寫數(shù)據(jù)操作;相反,返回到進(jìn)程是否開始運(yùn)行。
(5)運(yùn)行ISA接口的寫進(jìn)程。
在該狀態(tài)中,若LPC接口傳送過來的是偶地址,并且ISA設(shè)備收到偶地址后沒有向接口橋接單元傳送有效16位片選信號,則傳送的數(shù)據(jù)寬度為8位,當(dāng)前執(zhí)行是對8位ISA設(shè)備的寫數(shù)據(jù)操作。
若LPC接口傳送過來的是奇地址,并且ISA設(shè)備收到奇地址后沒有向接口橋接單元傳送有效16位片選信號,則LPC接口側(cè)主設(shè)備將總線高字節(jié)允許信號置成有效狀態(tài),對8位ISA設(shè)備執(zhí)行寫數(shù)據(jù)操作。
若LPC接口傳送過來的是偶地址,并且ISA設(shè)備收到偶地址后向接口橋接單元傳送了有效16位片選信號以及連續(xù)兩個8位數(shù)據(jù)之間的等待時間小于9個LPC時鐘周期,則接口橋接單元判定傳送的數(shù)據(jù)寬度為16位,LPC接口側(cè)主設(shè)備收到16位使能信號后,將總線高字節(jié)允許信號置成有效狀態(tài),執(zhí)行對16位ISA設(shè)備的寫數(shù)據(jù)操作。
(6)判斷ISA接口的寫進(jìn)程完成狀態(tài)
如果ISA接口的寫進(jìn)程已經(jīng)完成,回到初始化狀態(tài);否則,考察LPC接口數(shù)據(jù)傳送的狀態(tài),確定是否結(jié)束進(jìn)程。
該狀態(tài)中,如果LPC接口傳送的兩個8位寫數(shù)據(jù)之間的等待時間大于60個LPC時鐘周期,則接口橋接單元確定此寫進(jìn)程已經(jīng)結(jié)束,主設(shè)備開始對ISA從設(shè)備執(zhí)行下一個寫操作;否則,表明此寫進(jìn)程尚未結(jié)束,接口橋接單元繼續(xù)未完成的ISA接口寫進(jìn)程。
以上是接口橋接單元實(shí)現(xiàn)ISA接口寫進(jìn)程的程序流程圖,以下是接口橋接單元實(shí)現(xiàn)LPC接口讀進(jìn)程的程序流程圖。
(7)讀進(jìn)程
讀進(jìn)程中包含從ISA接口讀取數(shù)據(jù)到LPC接口的操作,該讀進(jìn)程實(shí)現(xiàn)主設(shè)備從ISA接口讀取數(shù)據(jù)到LPC接口的操作。
首先,判斷所讀取數(shù)據(jù)的寬度。如果數(shù)據(jù)是8位,從LPC接口讀出存儲的8位數(shù)據(jù);否則,判斷是否讀取16位數(shù)據(jù)的高8位。
(8)判斷LPC接口數(shù)據(jù)傳送的狀態(tài)
考察LPC接口數(shù)據(jù)傳送的狀態(tài),確定是否結(jié)束進(jìn)程。
如果LPC接口傳送的兩個8位寫數(shù)據(jù)之間的等待時間大于60個LPC時鐘周期,則接口橋接單元確定此讀進(jìn)程已經(jīng)結(jié)束,回到起始狀態(tài);相反,表明此讀進(jìn)程尚未結(jié)束,接口橋接單元繼續(xù)未完成的LPC接口讀進(jìn)程。
(9)判斷是否從LPC接口讀出高8位數(shù)據(jù)
判斷從LPC接口讀出高8位數(shù)據(jù)后,繼續(xù)讀進(jìn)程。相反,從LPC接口讀取低8位數(shù)據(jù)。若傳送的數(shù)據(jù)寬度為16位,則在讀取高8位數(shù)據(jù)后,在下一個讀操作周期從LPC接口讀取低8位數(shù)據(jù)。
緊接著,考察LPC接口16位數(shù)據(jù)的連續(xù)兩個8位數(shù)據(jù)讀操作之間的狀態(tài),確定是否結(jié)束進(jìn)程。如果LPC接口傳送的16位數(shù)據(jù)中連續(xù)兩個8位數(shù)據(jù)讀操作之間的等待時間大于60個LPC時鐘周期,則接口橋接單元確定LPC針對接口的讀進(jìn)程已經(jīng)結(jié)束,回到起始狀態(tài)。開始執(zhí)行LPC接口的下一個數(shù)據(jù)訪問操作;否則,表明此讀進(jìn)程尚未結(jié)束,接口橋接單元繼續(xù)未完成的針對LPC接口的讀進(jìn)程。
4 驗(yàn)證分析
LPC總線時序分析:LPC總線傳輸需要的信號有LCLK時鐘、數(shù)據(jù)地址命令復(fù)用線LPC_AD(0:3)、串行中斷請求信號SERIRQ、起始控制信號LFRAME#、復(fù)位信號LRESET、從信號申請DMA傳輸或總線主控信號LDRQ[3]。
如圖4所示,為LPC接口的時序仿真圖。
(a)發(fā)送16位數(shù)據(jù)到I/O端口
(b)連續(xù)發(fā)送兩個8位數(shù)據(jù)到端口
(c)CPU訪問16位I/O端口
(d)連續(xù)兩次訪問同一個8位I/O端口
圖4 LPC端口時序仿真
由以上時序圖,可得出連續(xù)兩次8位數(shù)據(jù)傳輸和一次16位數(shù)據(jù)傳輸是有區(qū)別的,中間會有35個CLK等待周期,在實(shí)際的程序設(shè)計中我們以60個CLK為判斷條件。本方案基于FPGA的LPC-ISA總線橋接設(shè)計,通過接收訪問地址的特征或接口傳送的信號狀態(tài),在工業(yè)控制計算機(jī)領(lǐng)域?qū)崿F(xiàn)對8位和16位ISA設(shè)備的讀寫兼容,延長了現(xiàn)存的8位、16位ISA設(shè)備的使用壽命。
5 結(jié)束語
工業(yè)控制計算機(jī)自上世紀(jì)90年代起至今已經(jīng)廣泛應(yīng)用到國民生產(chǎn)的眾多領(lǐng)域,如工業(yè)控制、勘探采集、醫(yī)療化工、金融安防等等,在經(jīng)濟(jì)活動中默默發(fā)揮著它的重要作用。十二五規(guī)劃發(fā)展中,中國步入一個轉(zhuǎn)型時期,經(jīng)濟(jì)、工業(yè)等多方面處于一個有待升級的局面。提高產(chǎn)能、調(diào)整產(chǎn)業(yè)結(jié)構(gòu)、工業(yè)設(shè)備的更新?lián)Q代等都將面臨一個過渡調(diào)整的階段,不可否定,在工業(yè)控制計算機(jī)領(lǐng)域同樣也面臨著新、老產(chǎn)品同時存在、彼此兼容的問題。本文對LPC-ISA總線橋接方案的研究,正是在此背景下,對實(shí)際生產(chǎn)問題的客觀體現(xiàn),具有良好而實(shí)際的應(yīng)用價值。
參考文獻(xiàn)
【1】肖金球.基于 LPC 總線的FPGA 高速初始化配置系統(tǒng)設(shè)計[J].計算機(jī)工程,2005,31(13):176-178
【2】Ciletti M D. Verilog-HDL 高級數(shù)字設(shè)計[M]. 北京:電子工業(yè)出版社,
2005.
【3】Intel_ Low Pin Count (LPC) Interface Specification. www.intel.com,2002-08