摘? 要: 介紹一種利用PCI軟“核”快速實現PCI總線接口設計的方法,并給出PCI Master下設計DMA控制器的例子。
關鍵詞: PCI Bus? LogiCore? DMA? PCI Master? PCI Slave
?
PCI總線是通過主橋電路掛接在Host CPU上的局部總線,典型的 PCI局部總線系統結構如圖1所示。PCI的外部設備既可以作為PCI總線目標設備(Slave),實現基本的傳送要求,也可以作為PCI總線的主控設備(Master),訪問其他PCI總線設備及系統的其他資源。用戶在實際應用中可以根據實際需求來設計設備的功能。
?
?
由于PCI總線規范[1]定義了嚴格的電氣特性和時序要求,因而開發基于PCI總線的接口卡有一定的難度。它要求在接口卡和終端設備之間有一個總線接口控制器,以解碼PCI總線規范并完成數據傳送,這需要開發人員對PCI總線規范有深刻的理解并具有較高的計算機開發水平。開發PCI接口大體有兩種方式:使用專用的PCI接口芯片和可編程器件" title="可編程器件">可編程器件。如果使用ASIC廠家提供的專用接口芯片,用戶使用到的只是部分PCI接口功能,會造成了一定的資源浪費,而且芯片價格高,不經濟。使用可編程器件設計,將廠家提供的PCI軟“核”引入到可編程器件中,根據插卡的功能進行最優化,不必實現所有的PCI功能,可以將PCI插卡的用戶邏輯與PCI接口邏輯集成在一個芯片上,實現緊湊的系統設計。當系統升級時,只需更改可編程器件的邏輯,無需更新PCB版圖。許多可編程器件生產廠商都提供經過測試的PCI接口功能模塊,如Xilinx公司的LogiCore,Altera公司的AMPP(Altera Megafunction Partners Program)。下面介紹用Xilinx公司的LogiCore來實現控制連接在PCI局部總線上的外設。
1 Xilinx公司的LogiCore簡介
Xilinx公司的LogiCore邏輯框圖如圖2所示。可以看出,該LogiCore的功能是將左邊復雜的PCI接口轉換成右邊的用戶接口信號:周期控制信號(包括用于配置PCI接口的信號CFG[255:0])、從設備控制信號、主設備控制信號、狀態機信號等。其主要的功能是起一個橋梁作用,完成用戶設備與PCI總線間的信息傳送,并且可以在Bus Master方式下直接訪問系統主存儲器。圖2的LogiCorem邏輯框圖只給出Xilinx的LogiCore中與PCI Master 控制器有關的關鍵信號。現在就以上信號進行介紹:
?
?
????PCI Host 端總線接口:
AD[31:0]?? ????????????? 時分復用地址/數據信號,在幀信號有
???? ??????????????????????? 效的一個時鐘AD[31:0]上的信號為地址
?????? ????????????????????? 信號。
C/BE[3:0]? ?? 命令/字節使能信號,在幀信號有效的
??????????????????????????? 第一個節拍,指示總線作業類型。
FRAME???? ??????? 由總線主設備驅動,指明傳輸的起始
????????????????????? ?????? 時間和終止時間,在該信號有效期間
??????????????????????? ???? 表示總線傳輸開始,當該信號無效時,
????????????????????????? ?? 傳輸的是最后一個數據節拍。
IRDY ????? ????????? 由總線主設備驅動,讀操作時表示已
?????????????? ????????????? 準備好接受數據,寫操作時表示有效
???????????????? ??????????? 數據已經在數據上。
TRDY?? ??????????? 由從設備驅動,讀操作時從設備正在
??????????????????? ????????? 把有效數據放在數據總線上;寫操作時
????????????????????? ??????? 表示從設備準備接受來自Host的數據。
DEBSEL? ?????????? 譯碼出的地址在該設備的地址范圍內
???????????????????? ???????? 時,則該信號有效。
??? IDSEL???????? ??? ??????? 配置讀、寫期間由Host發出的片選信號。
??? STOP??????? ? ?? ???????? 從設備向Host表示停止目前信號的傳送。
PAR?? ? ???????????? 奇偶校驗" title="奇偶校驗">奇偶校驗信號,它通過AD[31:0]和C/
???????????????? ???????????? BE[3:0]進行奇偶校驗。
PERR ?????? ????????????? 該信號只報告數據奇偶校驗錯。
SERR ??????????????????? 該信號只報告地址奇偶校驗錯,或者
??????????? ????????????????? 特殊命令序列中的數據奇偶校驗錯。
INTR_A?? ????????? 表示PCI設備請求中斷。
??? REQ?? ???????????? 表示總線主設備向仲裁器發出要占用
????????????????? ?????????? PCI總線的請求。
User端總線接口:
ADIO[31:0]?? ??? 地址數據復用總線,該總線由三態緩沖
??????????????????????????? ? 器驅動。
ADDR[31:0]? ??? 在地址周期,輸出PCI總線當前作業的
?????????????????????????? ? 起始地址。
DEVSEL_USR ??? 是DEVSEL信號的“克隆”版本。
FRAME_USR?? ??是FRAME信號的“克隆”版本。
STOP_USR ????? 是STOP信號的“克隆”版本。
CFG_HIT?? ???? ? 表明一個有效的配置周期開始。
ADDR_VLD? ?? 表明當前作業地址線上的起始地址有效。
S_SRC_EN?? ? 在Slave模式讀操作期間,告訴用戶模
??????????????????????????? 塊驅動下一片數據到總線ADIO[31:0]上。
S_DATA_VLD?? ? 表明當前ADIO[31:0]上的數據為有效
???????????????????????????? ?數據(在Slave模式下)。
BASE_HIT[7:0] 表明基地址寄存器譯碼并選中相應的
????????????????????????????? PCI映射空間。
CFG[255:0]?? ???? PCI設備配置空間接口信號。
M_SRC_EN? ? ???? 在寫操作時,表明數據源可以驅動下一
??????????????????????? ???? 片數據到ADIO[31:0]上(在Initiator模式下)。
M_DATA_VLD ???? 表明當前數據線ADIO[31:0]上的數據
??????????????????????????????為有效數據(在Initiator模式下)。
REQUEST??????? 在主設備模式下,DMA控制器請求系
??????????????????????????????統仲裁器讓出總線。
M_WRDN??????? 在主設備模式下,當前的作業進行讀操
??????????????????????????????作或寫操作。M_WRDN=1時表示寫,M_WRDN
?????????????????????????????? =0時表示讀。
M_DBE[3:0]???? ????????? 在主設備模式下,驅動總線命令和字節
????????????????????????????? 有效信號。
COMPLETE????? ?????? 在主設備模式下,當前的DMA???? 方式傳
??????????????????????????????送數據完成。
??? M-DATA? ????????????????? 表示在Initiator模式下當前主設備正處
??????????????????????????????于數據周期。
DR_BUS???????? ?????? 表示主設備狀態機正驅動PCI總線。
I_IDLE????????? ?????? 表示主設備狀態機正處于空閑狀態,當
??????????????????????????????前PCI總線沒有被驅動。
M_ADDR_USR?? ?????? 表示主設備狀態機在地址周期要求驅
??????????????????????????????動地址信號到ADIO[31:0]上。
RST???????????? ????? PCI總線復位信號的“克隆”版本。
CLK? ????????????????? 由系統緩沖區驅動的PCI總線時鐘。
INTER_USR???? 由用戶發出的中斷請求信號。是INTR_A
??????????????????????????????信號的”克隆“版本。
從LogiCore提供的接口看出,該軟“核”將復雜的PCI接口按照PCI的兩種工作模式轉化成相對簡單的Slave 和Master兩組獨立的接口信號。用戶可以根據實際需要來確定應用那種模式,從而選用相應的一組或兩組信號作為接口。而且LogiCore 這種橋梁作用只是對PCI功能進行劃分,它將PCI控制器的核心邏輯留給用戶來實現,并給出狀態機的接口信號。
2 PCI Master控制器的實現
以一個基于PCI總線的數據采集卡為例說明利用LogiCore實現PCI Master控制器的方法。由PCI協議知道,當PCI設備工作在Master模式下,可以直接訪問計算機系統主存儲器,而不通過計算機CPU。為此,在PCI Master控制器中必須設計一個DMA控制器。這樣同主存儲器傳送數據時,可以暫時接管系統總線,控制傳送字節數,判斷DMA傳輸是否結束,發出DMA結束等信號來保證數據的正確傳送。該數據采集卡所實現的功能就是不斷從外部接收數據并以DMA方式輸入到計算機系統緩沖區中,同時將預先放在計算機內存中的大量數據以DMA方式輸出到外部的儀器中。DMA控制器屬于LogiCore邏輯框圖中的用戶控制模塊。它由現行字節數寄存器、現行地址寄存器、基字節數寄存器、基地址寄存器、半滿地址寄存器、全滿地址寄存器、狀態寄存器" title="狀態寄存器">狀態寄存器、讀寫緩沖器及控制寄存器" title="控制寄存器">控制寄存器和優先級編碼器等組成,DMA控制器原理圖如圖3所示。其中控制寄存器和優先級編碼器是DMA控制器的關鍵。
?
?
2.1 DMA控制器的特點
(1)現行地址寄存器、基字節數寄存器、基地址寄存器、半滿地址寄存器、全滿地址寄存器5個寄存器可由高層應用程序根據當前驅動程序分配的系統內存空間來靈活配置。當傳送完規定的傳送長度(字節數減到零時),結束當前DMA傳送并自動重新對現行地址寄存器進行初始化,具有自動初始化能力。
(2)優先級編碼器中的4個DMA請求源的優先級是固定的,不可以旋轉。優先級按照從高到低依次為讀緩沖器、STATUS_C(由狀態寄存器C-D發出的)、寫緩沖器、STATUS_D(由狀態寄存器C-D發出的)。優先權編碼器對4個DMA請求源進行優先級編碼,并向LogiCore發出DMA請求信號。
(3)DMA數據傳送有單字節傳送和數據塊" title="數據塊">數據塊傳送兩種方式。數據塊傳送方式可由用戶初始化基字節寄存器來靈活設置一次傳送的數據塊長度。DMA控制器向系統緩沖區發送狀態寄存器C-D中的信息時采用單字節傳送方式。而傳送讀緩沖器和寫緩存器中的數據時采用數據塊傳送方式并可由用戶設置一次傳送數據的長度。此時每傳送一個數據,地址指針加1,字節數減1。
(4)DMA控制器中讀緩沖器和寫緩沖器都是2KB。
2.2 DMA控制器基本工作原理
首先由高層應用程序根據采集卡的低層驅動程序分配的系統內存地址對基地址寄存器、半滿地址寄存器、全滿地址寄存器、狀態寄存器、讀寫緩沖器和控制寄存器進行初始化。然后啟動系統,開始工作。當讀緩沖器中的數據量不到半滿或寫緩沖器中接收到的數據量已超過半滿或狀態寄存器C-D有狀態信息向高層報告時,則向優先級編碼器發出相應的請求信號。DMA優先級編碼器根據DMA請求對象的操作類型向DMA控制寄存器發出相應的控制信號。當DMA控制器檢索到對應的控制信息發生變化時,向LogiCore發出DMA請求,并用基字節寄存器和基地址寄存器分別初始化現行字節數寄存器和現行地址寄存器。當計算機系統允許DMA控制器占用PCI總線時,則DMA控制器接管PCI總線,并在地址周期向LogiCore發出DMA讀寫命令,同時輸出當前要對系統緩沖區操作的起始地址。在隨后的數據周期中,從數據總線ADIO上輸出或接收數據,同時修改地址指針(DMA支持隱含尋址)和字節計數器值,DMA控制器檢測傳送是否結束。如未結束則不停循環傳送。當檢測到字節計數器即將為零時,則向LogiCore發出COMPLETE信號,COMPLETE信號持續到字節計數器為零時,DMA控制器釋放掉對PCI總線的控制權,使CPU恢復正常工作狀態。
在DMA控制器中,狀態寄存器C-D有兩個DMA請求源STATUS_C和STATUS_D。其中STATUS_C在地址比較器檢測到讀緩沖器讀完對應系統緩沖區一半空間或全部讀完對應系統緩沖區數據時,置相應的狀態信息并向優先級編碼器發出STATUS_C請求信號。而STATUS_D在地址比較器檢測到寫緩沖器寫完對應系統緩沖區一半空間或全部寫完對應系統緩沖區數據、置相應的狀態信息并向優先級編碼器發出STATUS_D的請求信號。
值得注意的是,在DMA控制器設計過程中,當進行數據塊傳輸、字節數寄存器計數快結束時,應提前向計算機系統發出完成本次數據塊傳送的COMPLETE 信號,這樣可以保證DMA數據塊傳送的正確進行。至于提前幾個字節數據可以根據試驗來確定,一般提前2~4個字節即可。
??? PCI總線設計中定義的雙向信號,均要用OE信號來控制。同時有些信號如地址比較等要進行分割,以使用最少的通用邏輯模塊數來實現。這些是PCI總線設計所要注意的事項。由于LogiCore中對這些情況在邏輯上已經進行優化處理,從而使用戶避免了同復雜的PCI接口打交道,減少犯錯誤的可能,縮短了開發周期。
本數據采集卡在WINDOWS 98多任務操作系統下運行數據傳輸速率可以達到140Mbps,滿足了實際要求。
?
參考文獻
1 PCI Local Bus Specification (Rev 2.1). 1995.1
2 周明德.微型計算機原理及應用.北京:清華大學出版社,1997
3 張 亮.數字電路設計與Verilog HDL.北京:人民郵電出版社,2000
4 T.Shanly D, Anderson. PCI System Architeture (Third Edition). New York, 1995
5 Real-PCI Design Guide V3.0. Xilinx Corp.