《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 基于PCI軟“核”的PCI總線接口設(shè)計(jì)與實(shí)現(xiàn)

基于PCI軟“核”的PCI總線接口設(shè)計(jì)與實(shí)現(xiàn)

2008-11-18
作者:李 萍 夏斐斐

  摘? 要: 介紹一種利用PCI軟“核”快速實(shí)現(xiàn)PCI總線接口設(shè)計(jì)的方法,并給出PCI Master下設(shè)計(jì)DMA控制器的例子。

  關(guān)鍵詞: PCI Bus? LogiCore? DMA? PCI Master? PCI Slave

?

  PCI總線是通過主橋電路掛接在Host CPU上的局部總線,典型的 PCI局部總線系統(tǒng)結(jié)構(gòu)如圖1所示,。PCI的外部設(shè)備既可以作為PCI總線目標(biāo)設(shè)備(Slave),實(shí)現(xiàn)基本的傳送要求,也可以作為PCI總線的主控設(shè)備(Master),訪問其他PCI總線設(shè)備及系統(tǒng)的其他資源,。用戶在實(shí)際應(yīng)用中可以根據(jù)實(shí)際需求來設(shè)計(jì)設(shè)備的功能。

?

?

  由于PCI總線規(guī)范[1]定義了嚴(yán)格的電氣特性和時(shí)序要求,因而開發(fā)基于PCI總線的接口卡有一定的難度,。它要求在接口卡和終端設(shè)備之間有一個(gè)總線接口控制器,以解碼PCI總線規(guī)范并完成數(shù)據(jù)傳送,這需要開發(fā)人員對(duì)PCI總線規(guī)范有深刻的理解并具有較高的計(jì)算機(jī)開發(fā)水平。開發(fā)PCI接口大體有兩種方式:使用專用的PCI接口芯片和可編程器件" title="可編程器件">可編程器件。如果使用ASIC廠家提供的專用接口芯片,用戶使用到的只是部分PCI接口功能,會(huì)造成了一定的資源浪費(fèi),而且芯片價(jià)格高,不經(jīng)濟(jì),。使用可編程器件設(shè)計(jì),將廠家提供的PCI軟“核”引入到可編程器件中,根據(jù)插卡的功能進(jìn)行最優(yōu)化,不必實(shí)現(xiàn)所有的PCI功能,可以將PCI插卡的用戶邏輯與PCI接口邏輯集成在一個(gè)芯片上,實(shí)現(xiàn)緊湊的系統(tǒng)設(shè)計(jì)。當(dāng)系統(tǒng)升級(jí)時(shí),只需更改可編程器件的邏輯,無需更新PCB版圖,。許多可編程器件生產(chǎn)廠商都提供經(jīng)過測(cè)試的PCI接口功能模塊,如Xilinx公司的LogiCore,,Altera公司的AMPP(Altera Megafunction Partners Program)。下面介紹用Xilinx公司的LogiCore來實(shí)現(xiàn)控制連接在PCI局部總線上的外設(shè),。

1 Xilinx公司的LogiCore簡(jiǎn)介

  Xilinx公司的LogiCore邏輯框圖如圖2所示,。可以看出,該LogiCore的功能是將左邊復(fù)雜的PCI接口轉(zhuǎn)換成右邊的用戶接口信號(hào):周期控制信號(hào)(包括用于配置PCI接口的信號(hào)CFG[255:0]),、從設(shè)備控制信號(hào),、主設(shè)備控制信號(hào)、狀態(tài)機(jī)信號(hào)等,。其主要的功能是起一個(gè)橋梁作用,完成用戶設(shè)備與PCI總線間的信息傳送,并且可以在Bus Master方式下直接訪問系統(tǒng)主存儲(chǔ)器,。圖2的LogiCorem邏輯框圖只給出Xilinx的LogiCore中與PCI Master 控制器有關(guān)的關(guān)鍵信號(hào)。現(xiàn)在就以上信號(hào)進(jìn)行介紹:

?

?

????PCI Host 端總線接口:

  AD[31:0]?? ????????????? 時(shí)分復(fù)用地址/數(shù)據(jù)信號(hào),在幀信號(hào)有

???? ??????????????????????? 效的一個(gè)時(shí)鐘AD[31:0]上的信號(hào)為地址

?????? ????????????????????? 信號(hào),。

  C/BE[3:0]?      ?? 命令/字節(jié)使能信號(hào),,在幀信號(hào)有效的

???????????????????????????  第一個(gè)節(jié)拍,指示總線作業(yè)類型,。

  FRAME????     ??????? 由總線主設(shè)備驅(qū)動(dòng),,指明傳輸?shù)钠鹗?/P>

????????????????????? ?????? 時(shí)間和終止時(shí)間,在該信號(hào)有效期間

??????????????????????? ???? 表示總線傳輸開始,,當(dāng)該信號(hào)無效時(shí),

????????????????????????? ?? 傳輸?shù)氖亲詈笠粋€(gè)數(shù)據(jù)節(jié)拍,。

  IRDY   ????? ????????? 由總線主設(shè)備驅(qū)動(dòng),讀操作時(shí)表示已

?????????????? ????????????? 準(zhǔn)備好接受數(shù)據(jù),,寫操作時(shí)表示有效

???????????????? ??????????? 數(shù)據(jù)已經(jīng)在數(shù)據(jù)上,。

  TRDY??    ??????????? 由從設(shè)備驅(qū)動(dòng),,讀操作時(shí)從設(shè)備正在

??????????????????? ????????? 把有效數(shù)據(jù)放在數(shù)據(jù)總線上;寫操作時(shí)

????????????????????? ??????? 表示從設(shè)備準(zhǔn)備接受來自Host的數(shù)據(jù)。

  DEBSEL?    ?????????? 譯碼出的地址在該設(shè)備的地址范圍內(nèi)

???????????????????? ???????? 時(shí),則該信號(hào)有效,。

??? IDSEL???????? ??? ??????? 配置讀,、寫期間由Host發(fā)出的片選信號(hào)。

??? STOP??????? ? ?? ???????? 從設(shè)備向Host表示停止目前信號(hào)的傳送,。

  PAR??   ? ???????????? 奇偶校驗(yàn)" title="奇偶校驗(yàn)">奇偶校驗(yàn)信號(hào),它通過AD[31:0]和C/

???????????????? ???????????? BE[3:0]進(jìn)行奇偶校驗(yàn),。

  PERR ?????? ????????????? 該信號(hào)只報(bào)告數(shù)據(jù)奇偶校驗(yàn)錯(cuò)。

  SERR ??????????????????? 該信號(hào)只報(bào)告地址奇偶校驗(yàn)錯(cuò),或者

??????????? ????????????????? 特殊命令序列中的數(shù)據(jù)奇偶校驗(yàn)錯(cuò),。

  INTR_A??    ????????? 表示PCI設(shè)備請(qǐng)求中斷,。

??? REQ??    ???????????? 表示總線主設(shè)備向仲裁器發(fā)出要占用

????????????????? ?????????? PCI總線的請(qǐng)求。

  User端總線接口:

  ADIO[31:0]??     ??? 地址數(shù)據(jù)復(fù)用總線,該總線由三態(tài)緩沖

??????????????????????????? ? 器驅(qū)動(dòng),。

  ADDR[31:0]?     ??? 在地址周期,輸出PCI總線當(dāng)前作業(yè)的

?????????????????????????? ? 起始地址,。

  DEVSEL_USR      ??? 是DEVSEL信號(hào)的“克隆”版本。

  FRAME_USR??       ??是FRAME信號(hào)的“克隆”版本,。

  STOP_USR      ????? 是STOP信號(hào)的“克隆”版本,。

  CFG_HIT??     ???? ? 表明一個(gè)有效的配置周期開始。

  ADDR_VLD?       ?? 表明當(dāng)前作業(yè)地址線上的起始地址有效,。

  S_SRC_EN??       ? 在Slave模式讀操作期間,告訴用戶模

???????????????????????????  塊驅(qū)動(dòng)下一片數(shù)據(jù)到總線ADIO[31:0]上,。

  S_DATA_VLD?? ?       表明當(dāng)前ADIO[31:0]上的數(shù)據(jù)為有效

???????????????????????????? ?數(shù)據(jù)(在Slave模式下)。

  BASE_HIT[7:0]       表明基地址寄存器譯碼并選中相應(yīng)的

????????????????????????????? PCI映射空間,。

  CFG[255:0]??    ???? PCI設(shè)備配置空間接口信號(hào),。

  M_SRC_EN?     ? ???? 在寫操作時(shí),表明數(shù)據(jù)源可以驅(qū)動(dòng)下一

??????????????????????? ???? 片數(shù)據(jù)到ADIO[31:0]上(在Initiator模式下)。

  M_DATA_VLD ????      表明當(dāng)前數(shù)據(jù)線ADIO[31:0]上的數(shù)據(jù)

??????????????????????????????為有效數(shù)據(jù)(在Initiator模式下),。

  REQUEST???????       在主設(shè)備模式下,DMA控制器請(qǐng)求系

??????????????????????????????統(tǒng)仲裁器讓出總線,。

  M_WRDN???????       在主設(shè)備模式下,當(dāng)前的作業(yè)進(jìn)行讀操

??????????????????????????????作或?qū)懖僮鳌_WRDN=1時(shí)表示寫,M_WRDN

?????????????????????????????? =0時(shí)表示讀,。

  M_DBE[3:0]???? ????????? 在主設(shè)備模式下,驅(qū)動(dòng)總線命令和字節(jié)

????????????????????????????? 有效信號(hào),。

  COMPLETE????? ??????    在主設(shè)備模式下,當(dāng)前的DMA???? 方式傳

??????????????????????????????送數(shù)據(jù)完成。

??? M-DATA? ????????????????? 表示在Initiator模式下當(dāng)前主設(shè)備正處

??????????????????????????????于數(shù)據(jù)周期,。

  DR_BUS???????? ??????   表示主設(shè)備狀態(tài)機(jī)正驅(qū)動(dòng)PCI總線,。

  I_IDLE????????? ??????   表示主設(shè)備狀態(tài)機(jī)正處于空閑狀態(tài),當(dāng)

??????????????????????????????前PCI總線沒有被驅(qū)動(dòng)。

  M_ADDR_USR?? ??????    表示主設(shè)備狀態(tài)機(jī)在地址周期要求驅(qū)

??????????????????????????????動(dòng)地址信號(hào)到ADIO[31:0]上,。

  RST???????????? ?????   PCI總線復(fù)位信號(hào)的“克隆”版本,。

  CLK? ?????????????????   由系統(tǒng)緩沖區(qū)驅(qū)動(dòng)的PCI總線時(shí)鐘。

  INTER_USR????       由用戶發(fā)出的中斷請(qǐng)求信號(hào),。是INTR_A

??????????????????????????????信號(hào)的”克隆“版本,。

  從LogiCore提供的接口看出,該軟“核”將復(fù)雜的PCI接口按照PCI的兩種工作模式轉(zhuǎn)化成相對(duì)簡(jiǎn)單的Slave 和Master兩組獨(dú)立的接口信號(hào)。用戶可以根據(jù)實(shí)際需要來確定應(yīng)用那種模式,從而選用相應(yīng)的一組或兩組信號(hào)作為接口,。而且LogiCore 這種橋梁作用只是對(duì)PCI功能進(jìn)行劃分,它將PCI控制器的核心邏輯留給用戶來實(shí)現(xiàn),,并給出狀態(tài)機(jī)的接口信號(hào),。

2 PCI Master控制器的實(shí)現(xiàn)

  以一個(gè)基于PCI總線的數(shù)據(jù)采集卡為例說明利用LogiCore實(shí)現(xiàn)PCI Master控制器的方法。由PCI協(xié)議知道,當(dāng)PCI設(shè)備工作在Master模式下,可以直接訪問計(jì)算機(jī)系統(tǒng)主存儲(chǔ)器,而不通過計(jì)算機(jī)CPU,。為此,在PCI Master控制器中必須設(shè)計(jì)一個(gè)DMA控制器,。這樣同主存儲(chǔ)器傳送數(shù)據(jù)時(shí),可以暫時(shí)接管系統(tǒng)總線,控制傳送字節(jié)數(shù),判斷DMA傳輸是否結(jié)束,發(fā)出DMA結(jié)束等信號(hào)來保證數(shù)據(jù)的正確傳送。該數(shù)據(jù)采集卡所實(shí)現(xiàn)的功能就是不斷從外部接收數(shù)據(jù)并以DMA方式輸入到計(jì)算機(jī)系統(tǒng)緩沖區(qū)中,同時(shí)將預(yù)先放在計(jì)算機(jī)內(nèi)存中的大量數(shù)據(jù)以DMA方式輸出到外部的儀器中,。DMA控制器屬于LogiCore邏輯框圖中的用戶控制模塊,。它由現(xiàn)行字節(jié)數(shù)寄存器、現(xiàn)行地址寄存器,、基字節(jié)數(shù)寄存器,、基地址寄存器、半滿地址寄存器,、全滿地址寄存器,、狀態(tài)寄存器" title="狀態(tài)寄存器">狀態(tài)寄存器,、讀寫緩沖器及控制寄存器" title="控制寄存器">控制寄存器和優(yōu)先級(jí)編碼器等組成,DMA控制器原理圖如圖3所示,。其中控制寄存器和優(yōu)先級(jí)編碼器是DMA控制器的關(guān)鍵。

?

?

2.1 DMA控制器的特點(diǎn)

  (1)現(xiàn)行地址寄存器,、基字節(jié)數(shù)寄存器,、基地址寄存器、半滿地址寄存器,、全滿地址寄存器5個(gè)寄存器可由高層應(yīng)用程序根據(jù)當(dāng)前驅(qū)動(dòng)程序分配的系統(tǒng)內(nèi)存空間來靈活配置,。當(dāng)傳送完規(guī)定的傳送長度(字節(jié)數(shù)減到零時(shí)),結(jié)束當(dāng)前DMA傳送并自動(dòng)重新對(duì)現(xiàn)行地址寄存器進(jìn)行初始化,具有自動(dòng)初始化能力。

  (2)優(yōu)先級(jí)編碼器中的4個(gè)DMA請(qǐng)求源的優(yōu)先級(jí)是固定的,不可以旋轉(zhuǎn),。優(yōu)先級(jí)按照從高到低依次為讀緩沖器,、STATUS_C(由狀態(tài)寄存器C-D發(fā)出的)、寫緩沖器,、STATUS_D(由狀態(tài)寄存器C-D發(fā)出的),。優(yōu)先權(quán)編碼器對(duì)4個(gè)DMA請(qǐng)求源進(jìn)行優(yōu)先級(jí)編碼,并向LogiCore發(fā)出DMA請(qǐng)求信號(hào)。

  (3)DMA數(shù)據(jù)傳送有單字節(jié)傳送和數(shù)據(jù)塊" title="數(shù)據(jù)塊">數(shù)據(jù)塊傳送兩種方式,。數(shù)據(jù)塊傳送方式可由用戶初始化基字節(jié)寄存器來靈活設(shè)置一次傳送的數(shù)據(jù)塊長度,。DMA控制器向系統(tǒng)緩沖區(qū)發(fā)送狀態(tài)寄存器C-D中的信息時(shí)采用單字節(jié)傳送方式。而傳送讀緩沖器和寫緩存器中的數(shù)據(jù)時(shí)采用數(shù)據(jù)塊傳送方式并可由用戶設(shè)置一次傳送數(shù)據(jù)的長度,。此時(shí)每傳送一個(gè)數(shù)據(jù),地址指針加1,字節(jié)數(shù)減1,。

  (4)DMA控制器中讀緩沖器和寫緩沖器都是2KB。

2.2 DMA控制器基本工作原理

  首先由高層應(yīng)用程序根據(jù)采集卡的低層驅(qū)動(dòng)程序分配的系統(tǒng)內(nèi)存地址對(duì)基地址寄存器,、半滿地址寄存器,、全滿地址寄存器、狀態(tài)寄存器,、讀寫緩沖器和控制寄存器進(jìn)行初始化,。然后啟動(dòng)系統(tǒng),開始工作,。當(dāng)讀緩沖器中的數(shù)據(jù)量不到半滿或?qū)懢彌_器中接收到的數(shù)據(jù)量已超過半滿或狀態(tài)寄存器C-D有狀態(tài)信息向高層報(bào)告時(shí),則向優(yōu)先級(jí)編碼器發(fā)出相應(yīng)的請(qǐng)求信號(hào)。DMA優(yōu)先級(jí)編碼器根據(jù)DMA請(qǐng)求對(duì)象的操作類型向DMA控制寄存器發(fā)出相應(yīng)的控制信號(hào),。當(dāng)DMA控制器檢索到對(duì)應(yīng)的控制信息發(fā)生變化時(shí),向LogiCore發(fā)出DMA請(qǐng)求,并用基字節(jié)寄存器和基地址寄存器分別初始化現(xiàn)行字節(jié)數(shù)寄存器和現(xiàn)行地址寄存器,。當(dāng)計(jì)算機(jī)系統(tǒng)允許DMA控制器占用PCI總線時(shí),則DMA控制器接管PCI總線,并在地址周期向LogiCore發(fā)出DMA讀寫命令,同時(shí)輸出當(dāng)前要對(duì)系統(tǒng)緩沖區(qū)操作的起始地址。在隨后的數(shù)據(jù)周期中,從數(shù)據(jù)總線ADIO上輸出或接收數(shù)據(jù),同時(shí)修改地址指針(DMA支持隱含尋址)和字節(jié)計(jì)數(shù)器值,DMA控制器檢測(cè)傳送是否結(jié)束,。如未結(jié)束則不停循環(huán)傳送,。當(dāng)檢測(cè)到字節(jié)計(jì)數(shù)器即將為零時(shí),則向LogiCore發(fā)出COMPLETE信號(hào),COMPLETE信號(hào)持續(xù)到字節(jié)計(jì)數(shù)器為零時(shí),DMA控制器釋放掉對(duì)PCI總線的控制權(quán),使CPU恢復(fù)正常工作狀態(tài)。

  在DMA控制器中,狀態(tài)寄存器C-D有兩個(gè)DMA請(qǐng)求源STATUS_C和STATUS_D,。其中STATUS_C在地址比較器檢測(cè)到讀緩沖器讀完對(duì)應(yīng)系統(tǒng)緩沖區(qū)一半空間或全部讀完對(duì)應(yīng)系統(tǒng)緩沖區(qū)數(shù)據(jù)時(shí),置相應(yīng)的狀態(tài)信息并向優(yōu)先級(jí)編碼器發(fā)出STATUS_C請(qǐng)求信號(hào),。而STATUS_D在地址比較器檢測(cè)到寫緩沖器寫完對(duì)應(yīng)系統(tǒng)緩沖區(qū)一半空間或全部寫完對(duì)應(yīng)系統(tǒng)緩沖區(qū)數(shù)據(jù)、置相應(yīng)的狀態(tài)信息并向優(yōu)先級(jí)編碼器發(fā)出STATUS_D的請(qǐng)求信號(hào),。

  值得注意的是,在DMA控制器設(shè)計(jì)過程中,當(dāng)進(jìn)行數(shù)據(jù)塊傳輸,、字節(jié)數(shù)寄存器計(jì)數(shù)快結(jié)束時(shí),應(yīng)提前向計(jì)算機(jī)系統(tǒng)發(fā)出完成本次數(shù)據(jù)塊傳送的COMPLETE 信號(hào),這樣可以保證DMA數(shù)據(jù)塊傳送的正確進(jìn)行。至于提前幾個(gè)字節(jié)數(shù)據(jù)可以根據(jù)試驗(yàn)來確定,一般提前2~4個(gè)字節(jié)即可,。

??? PCI總線設(shè)計(jì)中定義的雙向信號(hào),均要用OE信號(hào)來控制,。同時(shí)有些信號(hào)如地址比較等要進(jìn)行分割,以使用最少的通用邏輯模塊數(shù)來實(shí)現(xiàn)。這些是PCI總線設(shè)計(jì)所要注意的事項(xiàng),。由于LogiCore中對(duì)這些情況在邏輯上已經(jīng)進(jìn)行優(yōu)化處理,從而使用戶避免了同復(fù)雜的PCI接口打交道,減少犯錯(cuò)誤的可能,縮短了開發(fā)周期,。

  本數(shù)據(jù)采集卡在WINDOWS 98多任務(wù)操作系統(tǒng)下運(yùn)行數(shù)據(jù)傳輸速率可以達(dá)到140Mbps,滿足了實(shí)際要求,。

?

參考文獻(xiàn)

1 PCI Local Bus Specification (Rev 2.1). 1995.1

2 周明德.微型計(jì)算機(jī)原理及應(yīng)用.北京:清華大學(xué)出版社,1997

3 張 亮.數(shù)字電路設(shè)計(jì)與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.
本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。