新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于FPGA的PCI接口控制器的設計與實現(xiàn)

基于FPGA的PCI接口控制器的設計與實現(xiàn)

——
作者:胡菲 盧益民 時間:2007-01-26 來源:《電子元器件應用》 收藏


引言

本文引用地址:http://butianyuan.cn/article/20742.htm

pci總線是高速同步總線,采用高度綜合優(yōu)化的總線結構,目前廣泛應用于各種計算機系統(tǒng)中,總線以32位(或64位)數(shù)據(jù)總線、33mhz(或66mhz)的時鐘頻率操作,具有很高的數(shù)據(jù)傳輸速率。

目前開發(fā)pci接口大體有兩種方案,一種是采用專用的pci接口芯片,實現(xiàn)完整的pci主控模塊和目標模塊接口功能,將復雜的pci總線接口轉換為相對簡單的用戶接口。采用這種方案,用戶只要設計轉換后的總線接口即可,其優(yōu)點是縮短了開發(fā)周期,缺點是用戶可能只用到pci接口的部分功能,因此而造成邏輯資源浪費,缺乏靈活性。一種是使用可編程器件,采用fpga進行pci接口設計,這樣可以依據(jù)插卡功能進行最優(yōu)化。這種方案設計靈活,不必實現(xiàn)所有pci功能,節(jié)約系統(tǒng)的邏輯資源。

本文所述設計方案是采用xilinx公司的virtex2系列xc2v6000芯片來實現(xiàn)pci主/從設備接口控制器。通過pci總線使得計算機上的視頻碼流傳送到解碼器中。對fpga的設計全部采用verilog hdl語言作為設計輸入,并且為解碼部分功能的實現(xiàn)預留了足夠的空間。

系統(tǒng)結構設計

為了對視頻流進行解碼,需要快速而大量的數(shù)據(jù)傳輸。本設計簡述了一種通過pci總線通信的解決方案。通過host主機對目標設備的控制,實驗板即可以做目標設備,也可以做主設備。圖1是本設計的系統(tǒng)框圖。

在默認情況下,實驗板目標設備處于工作狀態(tài)為主設備為空閑狀態(tài),主控host通過i/o方式進行寄存器的讀寫控制操作。當需要傳輸大量數(shù)據(jù)時,host通過寫i/o方式通過實驗板申請pci總線的使用權,pci總線申請成功后,實驗板主設備開始工作,通過dma方式與主控host進行通信。

pci總線配置空間的實現(xiàn)

當實驗板的目標設備工作時,需要對其配置空間進行配置。pci總線定義了3種物理地址空間:存儲器地址空間、i/o地址空間和配置地址空間。前兩者是普通的計算機系統(tǒng)地址空間,而配置空間是pci所特有的。根據(jù)pci總線規(guī)范[1],所有的pci設備都必須提供配置空間。pci總線仲裁器首先訪問一個目標設備的配置空間,以確定總線上存在的設備,主機host才能繼續(xù)對這個目標設備進行其他類型的訪問,如內存訪問、i/o訪問。配置空間是長度為256字節(jié)并且有特定記錄結構或模型的地址空間,可以在系統(tǒng)自舉時訪問,也可在其他時間訪問。配置空間訪問時,對配置空間讀令名為“1010”;對配置空間寫命令為“1011”。依據(jù)pci規(guī)范[1],可設定配置空間中的各寄存器值如下:

供應商id:9918h;設備id:2003h;修訂id:01h,分類代碼:078000h。這是一個非標準pci設備,所以任意使用了一個保留值。

命令字:0001h。表示只支持i/o讀寫控制。

基地址寄存器:目標設備只用到一個基地址寄存器,在此基礎上實現(xiàn)多個寄存器,定義控制寄存器地址為:基地址+2ch;數(shù)據(jù)傳輸寄存器地址為:基地址+18h。

其他沒有用到的配置寄存器在讀時全返回0。

主設備工作機制

主控host首先分配兩個內存空間,一個用于存放地址信息,一個用于存放真正的數(shù)據(jù)。當實驗板做主設備時,數(shù)據(jù)傳輸使用dma方式對存儲器空間直接進行讀寫操作,數(shù)據(jù)傳輸結構如圖2所示。

主設備先進行存儲器讀操作,以從內存空間1中讀取主控host分配的pageaddr和pagecnt。主設備得知內存空間2的地址后,即可在傳輸數(shù)據(jù)時,讀取或者寫入到這些真正的數(shù)據(jù)存儲區(qū)。實驗板做主設備時,為了不和主控host上的其他主設備沖突,設定突發(fā)長度為8,傳輸8個32位數(shù)據(jù)后釋放pci總線,然后開始申請總線使用權,以便繼續(xù)傳輸數(shù)據(jù)。上述操作均由時序狀態(tài)機進行控制。

主設備時序狀態(tài)機

時序狀態(tài)機是pci接口控制器的核心,各種令名、數(shù)據(jù)交換、控制均在狀態(tài)機的管理下進行工作。圖3是實驗板做主設備時,pci總線接口控制器時序狀態(tài)機。實驗板做目標設備的狀態(tài)機就不在這里介紹了。

這一狀態(tài)機共有8個狀態(tài),分別是:mstate_idle、mstate_req、mstate_addr、mstate_data、mstate_last、mstate_addr_p、mstate_data_p、mstate_last_p。他們代表總線作業(yè)時的不同階段,意義如下:

mstate_idle:主設備空閑狀態(tài)。實驗板目標設備工作,當host通過寫i/o方式通知目標設備需要開始以dma方式傳輸大量數(shù)據(jù)時,start信號有效,主設備開始申請總線使用權,狀態(tài)跳轉到mstate_req。

mstate_req:主設備開始申請總線使用權狀態(tài)。主設備開始申請總線使用權,使連接到仲裁器上的req_o_信號有效,通知仲裁器實驗板的主設備需要使用pci總線,等待仲裁器的裁決。實驗板主設備得到可以使用總線的通知時,必須等到前一個正在占用總線的主設備完成其傳輸,并且釋放總線后,才能真正使用pci總線,即實驗板主設備需要采集到frame_i_無效并且irdy_i無效。當pagecnt=0表示一頁數(shù)據(jù)已經(jīng)傳輸完畢,于是開始讀取下一頁數(shù)據(jù)的存放地址,狀態(tài)跳轉到mstate_addr。當pagecnt?。?表示一頁數(shù)據(jù)還未傳完,狀態(tài)跳轉到mstate_addr_p,繼續(xù)這一頁數(shù)據(jù)的傳輸。

mstate_addr:主設備頁地址狀態(tài)。這個狀態(tài)frame_o_信號有效,開始地址周期,ad上出現(xiàn)的是32位頁地址信息,cbe_o_上出現(xiàn)的是存儲器讀命令,這個狀態(tài)是準備做存儲器讀操作,在總線上送出地址后,跳轉到mstate_data。

mstate_addr_p:主設備數(shù)據(jù)地址狀態(tài)。這個狀態(tài)同mstate_addr狀態(tài)一樣的是,開始地址周期。所不同的是ad上出現(xiàn)的是在mstate_data狀態(tài)下讀到的32位數(shù)據(jù)地址信息。根據(jù)需要,可以進行讀/寫存儲器操作。

mstate_data:主設備讀頁信息狀態(tài)。這個狀態(tài)是讀存儲器,irdy_o_信號有效。數(shù)據(jù)真正的傳輸是在trdy_i_信號和irdy_o_信號同時有效時,可以讀取到數(shù)據(jù)是頁信息,代表存放數(shù)據(jù)的地址信息和存放數(shù)據(jù)的長度。數(shù)據(jù)傳輸?shù)耐话l(fā)長度是2,所以一次pci訪問讀取兩個32位數(shù)據(jù),讀完一個數(shù)據(jù)后狀態(tài)立即跳轉到mstate_last去讀取最后一個數(shù)據(jù)。當host主機要求停止數(shù)據(jù)傳輸時,通過使stop_i_信息有效告訴主設備,主設備必須放棄這次數(shù)據(jù)的傳輸,狀態(tài)跳轉到mstate_last。

mstate_data_p:主設備讀/寫數(shù)據(jù)狀態(tài)。這個狀態(tài)是數(shù)據(jù)的傳輸,突發(fā)長度是8,一次pci訪問可以讀取8個32位數(shù)據(jù),當cnt=2時,表示讀完7個數(shù)據(jù),狀態(tài)跳轉到mstate_last_p。與狀態(tài)mstate_data一樣,如果host主機要求停止數(shù)據(jù)傳輸時,主設備必須放棄這次數(shù)據(jù)的傳輸,狀態(tài)馬上跳轉到mstate_last_p。

mstate_last:主設備讀取最后一個頁信息狀態(tài)。該狀態(tài)下frame_o_信號無效,irdy_o_信號有效,表示這是最后一個讀取數(shù)據(jù)周期,數(shù)據(jù)傳輸和mstate_data狀態(tài)一樣,是在trdy_i_信號和irdy_o_信號同時有效時。當host主機要停止數(shù)據(jù)傳輸時,stop_i_有效,主設備釋放總線并回到mstate_idle狀態(tài),準備開始申請下一次總線使用權,以進行數(shù)據(jù)傳輸。

mstate_last_p:主設備讀取最后一個數(shù)據(jù)狀態(tài)。這個狀態(tài)同mstate_last一樣,讀取的是這次pci訪問的最后一個數(shù)據(jù)。

下面是用verilog hdl描述的狀態(tài)機的核心代碼:

結束語

本文介紹了在fpga上實現(xiàn)pci接口控制器的設計方案,通過實驗板做主設備進行大量數(shù)據(jù)的高速傳輸。采用對主控host內存的直接讀/寫進行數(shù)據(jù)傳輸,用突發(fā)方式使用背靠背單數(shù)據(jù)傳送,在時鐘頻率33mhz下,數(shù)據(jù)流量接近每秒33百萬次傳送,實驗中數(shù)據(jù)傳輸效果很好,完全符合pci總線的要求,這種設計提供了靈活的接口控制,為后續(xù)的視頻解碼ip核提供了良好的接口。



關鍵詞:

評論


相關推薦

技術專區(qū)

關閉