歡迎您光臨本站 登入註冊首頁

FPGA 實現PCI 匯流排介面技術

admin @ 2014-03-26 , reply:0

概述

摘要:PCI匯流排廣泛應用於計算機系統中,是目前主流匯流排標準。FPGA是當前電子系統設計中最熱門的話題之一。本文介紹了一種簡單、靈活、佔用資源少、基於FPGA實現的PCI匯流排介面技術,並且在自製的……

摘 要:PCI 匯流排廣泛應用於計算機系統中,是目前主流匯流排標準。FPGA 是當前電子系統設計中最熱門的話題之一。本文介紹了一種簡單、靈活、佔用資源少、基於FPGA 實現的PCI 匯流排介面技術,並且在自製的多媒體通信卡中得到了應用。

    PCI(Peripheral Component Interconnect)是一種高性能的局部匯流排,採用高度綜合優化的匯流排結構,保證系統各部件之間的運行可靠,目前廣泛應用於各種計算機系統中。PCI匯流排可同時支持多組外圍設備,具有很高的數據傳輸速率,峰值傳輸速率可達132MB/s(32位、33MHz)。
    目前開發PCI 介面大體有兩種方式:一是使用專用的PCI介面晶元,二是使用可編程器件。如果使用廠家提供的專用介面晶元,用戶可能只使用到它的部分功能,會造成一定的資源浪費,而且專用晶元價格高,不經濟。而使用可編程器件比前者具有以下兩個優點:一方面用戶可以根據需要設計PCI介面,不會浪費資源;另外一方面用戶邏輯和介面部分可以做在同一個器件內,PCI介面和用戶邏輯會結合得更緊密。現在已經有越來越多的用戶使用可編程器件如FPGA、CPLD 等進行PCI 設備的開發。對可編程器件進行PCI 介面開發的研究具有很強的實際意義。
    PCI 介面的實現包括配置空間和數據介面兩方面。

PCI 匯流排配置空間的實現
配置空間
    PCI匯流排定義了3種物理地址空間:存儲器地址空間、I/O地址空間和配置地址空間。前兩者是普通的計算機系統地址空間,而配置空間是PCI所特有的一種空間。根據PCI 匯流排規範[1],所有的PCI 設備都必須提供配置空間。定義PCI 配置空間的目的在於:提供一套適當的配置措
施,使之滿足現行的和可預見的系統配置機構。配置空間是一長度為256 位元組並且有特定記錄結構或模型的地址空間,可以在系統自舉時訪問,也可在其他時間訪問。該空間分為首部區和設備有關區兩部分。設備在每個區中只須實現必要的和與之相關的寄存器。首部區的長度為64 位元組,每個設備都必須支持該區的寄存器分配,這個區包括進行設備識別的唯一標示碼,和允許對設備進行控制的若干區域。表1 所示為64 位元組首部區的布局情況。
 
    表中顏色較深部分為強制性的首部寄存器,包括供應商代碼寄存器、設備代碼寄存器、命令寄存器、狀態寄存器、修改版本寄存器、類別寄存器和首部類型寄存器。供應商代碼由PCI SIG 分配,設備代碼由設備製造商分配;設備代碼和供應商代碼一起用於定位設備指定的驅動程序。命令寄存器用於存放PCI命令;狀態寄存器包含PCI 的狀態信息。修改版本寄存器包含版本標識號;類別代碼寄存器是只讀寄存器,用來說明設備的通用功能。首部類型寄存器包含兩個欄位,D6-D0 位定義配置空間首部區位元組10H-13H 的格式,D7 位表示該PCI 設備是多功能還是單功能設備,如果為1表示是多功能設備,反之則是單功能設備。
     除了上面所說的強制性首部類型寄存器以外,還有一些寄存器是經常用到的,比如基地址、中斷線和中斷引腳寄存器等。基地址寄存器提供了一種為設備指定存儲空間或I/O空間的機制。操作系統在啟動的時候要判斷系統中有多少存儲器、系統中的I/O 設備需要多少地址空間,然後根據得到的結果,自動配置系統的存儲空間和I/O 空間,實現設備無關管理。基地址寄存器中的值有兩個含義,一是存儲空間或I/O空
間的基地址;二是存放定義空間的長度。它的D31 位用來區分是基地址還是長度,如果為1則是基地址,反之是長度;另外D0位用來區分存
儲器空間和I/O空間,如果為1則是I/O空間,反之是存儲器空間。
    另外如果要實現中斷,必須對中斷線寄存器和中斷引腳寄存器進行設置。中斷線寄存器由系統中的所有中斷源共同使用,它的值說明設備的中斷引腳連接到中斷控制器的哪個輸入上。中斷引腳寄存器說明設備使用PCI匯流排上的哪一個中斷引腳。

實現方法
    我們以一實例說明如何在FPGA 中實現PCI 匯流排的配置空間。系統要求為:實現一個PCI從設備,把設備上的存儲器資源映射到系統的I/O空間,大小為16位元組;實現中斷功能( 單中斷) 。
     配置空間的實現,首先是實現強制性寄存器,然後根據需要實現一個或多個可選寄存器。在本例系統中,要求把設備上的資源映射到I/O空間,所以要實現一個基地址寄存器;另外要實現中斷功能就還需要實現中斷線寄存器和中斷引腳寄存器。在本例中要實現的配置寄存器
包括所有強制性寄存器以及一個基地址寄存器、中斷線寄存器和中斷引腳寄存器。
     在FPGA 中資源有限,如果配置空間全部用FPGA 內部的寄存器實現要佔用很多資源,其它功能勢必要受到削弱,並且會帶來布局、布線上的麻煩。所以對一些只讀配置寄存器或者不需要修改的配置寄存器,我們可以採用硬連線的方式實現,比如強制性寄存器當中的設備代碼、供應商代碼、命令、狀態、類別碼、修改版本、首部類型寄存器,以及可選寄存器當中的中斷引腳寄存器都可以用硬連線的方式實現。至於基地址寄存器和中斷線寄存器,因為系統在啟動過程中要寫入分配的起始地址和中斷號,所以必須用寄存器實現。其它不用實現的配置
寄存器給一個初始值0 就可以了。這樣64 位元組的配置空間首部,我們只需要用40個寄存器以及若干硬連線就可以實現,大大節省了資源。具體方案如圖1 所示。
 
    圖中基地址寄存器由32 個D 觸發器實現,中斷線寄存器由8 個D 觸發器實現,其它寄存器都為硬連線實現。輸出選擇由三態門完成。AD[7:2]在配置交易時為配置寄存器號。各個寄存器值的確定請參看參考文獻1。
    採用這種方式我們在設備上實現了要求的PCI 配置空間,佔用資源很少,並且可以利用FPGA 的可編程性很容易實現不同的配置空間。

PCI 匯流排數據傳輸介面設計
PCI 匯流排讀寫時序
     PCI匯流排上的基本傳輸機制是突發分組傳輸,一個突發分組由一個地址周期和一個( 或多個) 數據周期組成。PCI支持存儲空間和I/O空間的突發傳輸,它所有的數據傳輸基本上都是由以下三條信號線控制的:FRAME# 、IRDY# 和TRDY# 。
    當數據有效時,數據資源需要無條件設置xRDY#信號(寫操作為IRDY#,讀操作為TRDY#)。接受方可在適當時間發出它的xRDY# 信號。FRAME# 信號有效后的第一個時鐘上升沿是地址周期的開始,此時傳送地址信息和匯流排命令。下一個時鐘上升沿開始一個(或多個)數據周期,每當IRDY# 和TRDY# 同時有效時,所對應的時鐘上升沿使數據在主、從設備之間傳送。在此期間,可由主設備或從設備分別利用IRDY# 和TRDY# 的無效而插入等待周期。
    PCI 匯流排的讀時序如圖2 所示。
 
    當FRAME# 信號有效時,讀傳輸開始,在AD[31:00]匯流排上保持有效的地址信號,同時C/BE#[3:0]上包含有效的匯流排命令。如果匯流排命令為0110(存儲器讀命令)或者0010(I/O讀命令),同時AD[31:00]匯流排上的地址又在目標設備的地址範圍內,該設備將設置DEVSEL# 信號有效。然後主設備停止驅動AD[31:00]匯流排,置IRDY# 為低,表明主設備準備好接收數據。第一個數據節拍產生於第三個時鐘周期。第二個時鐘周期是匯流排轉換周期,目的是為了避免主設備和從設備因競爭匯流排發生衝突。在數據節拍里,主設備在每個時鐘周期的上升沿檢查TRDY# 信號,如果它無效表示從設備沒有準備好,主設備自動插入等待周期;反之將傳送數據,完成一個數據節拍。當主設備使FRAME# 信號無效,表示當前是最後一個數據節拍。在數據節拍里,C/BE[3:0]匯流排上為位元組允許信號。
    DEVSEL# 信號和TRDY# 信號是由從設備提供的,但必須保證TRDY# 信號在DEVSEL# 信號之後出現。數據的真正傳輸是在IRDY# 和TRDY# 信號同時有效的時鐘上升沿進行的,這兩個信號中的一個無效表示插入等待周期,此時不進行數據傳輸。例如在時鐘7 處,儘管是最後一個數據周期,但由於IRDY# 無效,FRAME# 不能變為無效,只有在時鐘8 處IRDY# 有效后,FRAME# 信號才能撤消。
    PCI匯流排的寫操作時序如圖3所示。
 
    PCI 匯流排上的寫操作與讀操作相類似,FRAME# 信號有效表示地址周期的開始,且在時鐘2 的上升沿處達到穩定有效。從圖中可看出,主設備在時鐘5處因撤消了IRDY# 而插入等待周期,表明要寫的數據將延時發送,但此時位元組使能信號不受等待周期的影響,不得延遲發送。從設備在時鐘5、時鐘6 和時鐘7插入3 個等待周期。AD[31:00]匯流排在地址周期后沒有象讀操作那樣插入轉換周期,這是因為地址和數據都是由主設備發出的。

介面設計
    介面的設計還是以上述系統為例。設計思路如下:在時鐘的上升沿採樣FRAME#、地址和命令,如果FRAME#有效則解碼地址和命令,如果匯流排命令為001x,並且匯流排上的地址在目標地址範圍內,表明這是對本設備的I/O操作;或者匯流排命令為101x,且IDSEL 信號有效,表明這是對本設備配置空間的操作。在這兩種情況下,根據匯流排命令的最後一位確定是讀操作還是寫操作,有效DEVSEL# 和TRDY# 信號,開始數據傳輸;並在傳輸過程中採樣FRAME# 和IRDY# 信號,確認最後一個數據周期,無效DEVSEL# 和TRDY# 信號,結束數據傳輸。圖4 為介面電路的設計框圖。
 
 
    從圖5的模擬波形看,完全符合PCI規範要求的時序。讀操作與此類似,這裡我們就不再給出波形了。在實際應用中,這個介面電路也得到了檢驗,不論是單周期還是突發數據傳輸都能很好地完成。

結語
    本文介紹了在FPGA 上實現PCI 介面技術,並且在自製的多媒體通信卡上得到了應用。我們使用的FPGA器件是Xilinx 公司的XCS20,PCI 介面部分佔用的資源為55個CLB,256 個TBUF,相當於1543 個邏輯門。經測試通信卡的速度可以達到32MB/s,完全滿足應用的要求。這種PCI介面實現技術較簡單、佔用資源少、具有很強的靈活性,並且可以很方便地移植到其它可編程器件上,具有較強的實用價值。

參考文獻
1 Tom Shanley,Don Anderson,PCI系統結構 第四版,電子工業出版社,2000
2 陳利學,孫彪,趙玉連,微機匯流排與介面設計,電子科技大學出版社,1998
3 Xilinx,The Programmable Logic Data Book,1999


[admin via 研發互助社區 ] FPGA 實現PCI 匯流排介面技術已經有2007次圍觀

http://cocdig.com/docs/show-post-43157.html