引言
隨著星載電子系統復雜度、小型化需求的提高,片上系統(System on Chip SoC)已 經成為應對未來星載電子系統設計需求的解決途徑。為了簡化設計流程并且提高部件的可重 用性,在目前的SoC 設計中引入了稱之為平臺的體系結構模板,用它來描述采用已有的標準 核來開發SoC 的方法。本文所作的工作主要是按照建立SoC 集成設計平臺的需求,根據當前 國際航天領域的技術現狀,選擇PCI(Peripheral Component Interconnect)總線作為SoC 集成設計平臺所能提供的一種總線模塊,根據可重用的IP(Intellectual Property)設計 思想對PCI 總線從設備控制器進行設計實現。
1 、PCI 總線從設備控制器的設計
1.1 控制器的基本功能
(1)數據傳輸功能:PCI 總線的傳輸包括PCI 與I/O 之間的傳輸(I/O 讀和I/O 寫)和 PCI 與存儲器之間的傳輸(存儲器讀和存儲器寫)。
(2)錯誤檢測與處理功能:在交易的地址段和數據段中,PCI 總線是被奇偶校驗保護 的。在交易的地址段和數據段中,驅動AD 總線的設備負責為本階段計算和提供奇偶校驗位, 接收AD 總線數據的設備負責進行奇偶校驗的檢測、處理并給出相應的信息。
(3)命令/地址譯碼功能:根據一些控制信號將地址/數據和命令/字節使能線上的地址 和命令信號分離出來,得到相應的命令信號和讀寫操作的地址。
(4)配置功能:當機器第一次上電時,配置軟件必須掃描在系統中的不同總線(PCI 和 其它),確定什么設備存在和它們有什么配置要求。為了實現這個過程,每個PCI 設備必須 實現由PCI 規范定義的一組配置寄存器。依賴其操作特性、功能還可以實現由PCI 規范定義 的其它要求的或可選的配置寄存器。另外,還應保留許多附加的配置單元,以實現指定功能 的配置寄存器。
1.2 控制器的設計
在用Verilog HDL 語言進行PCI 總線從設備控制器設計之前, 首先要對PCI 總線從設備控制器的功能進行頂層設計[3], 將總線接口控制器按照功能分為有限狀態機模塊、奇偶校驗 模塊、配置空間配置模塊、基地址檢查模塊、計數器模塊、地址鎖存模塊和頂層模塊這7 個模塊[4], 控制器頂層模塊設計中有pci_clk、pci_cbe_l 、bkend_abort_l、bkend_ad、 bkend_int_l、data_stop_l、data_read_l、pci_frame_l、data_write_l、pci_idsel、pci_devsel、 pci_irdy_l、pci_inta_l、pci_rst_l、pci_par、ready_l、pci_ad 等信號, 其中_ L 表示信號低電 平有效。
各個模塊完成功能如下:
配置空間模塊:PCI總線支持即插即用,從硬件的角度來看,其技術手段是為每一個PCI 設備提供一個配置空間,操作系統在自檢(POST Power-On-Self Test)的過程中檢測所有 PCI設備,讀取設備的配置信息,并給每一個設備分配系統資源,如中斷、I/O空間、存儲器 空間等。配置空間包括一系列配置寄存器, 一般占用256個I/O地址,直接影響PCI 設備特性 的是PCI空間的前16個雙字節的配置, 該區域稱為PCI 配置頭,一般PCI設備都要進行“類型 0”配置[1]。
配置空間是PCI地址空間中重要的一部分,主要有設備標識、設備控制、設備狀態、基 地址定位及其它一些由特定設備所描述的功能這五部分。
這個模塊中售主ID 用語句DEVICE_ID= 16’h0120 來定義,其它設備標識類似,命令寄 存器提供了產生和響應PCI 周期、粗略控制設備的能力。當idsel_reg, pci_irdy_l 有效, 且 pci_addr[7:2] == 6’h04 時,信號stat_com_en 有效,表示可以在配置寫周期內對設備狀 態及命令寄存器進行配置。將pci_dat[1:0]的值賦給com,由端口com 來控制一個設備響應 I/O 或是內存的訪問。用輸出信號ba0_size[31:4]、ba1_size[31:4]表示定義的I/O、內存 空間的大小。pci_dat_out[31:0] 在配置讀時表示輸出的設備配置信息,在其它情況下將從 設備產生的數據輸出。ba0_en、ba1_en 分別表示在配置寫時I/O、內存基地址寄存器的有效 性。ba0_en 或ba1_en 有效是在配置寫期間對從設備進行配置的一個必要條件,int_line_en 是中斷線寄存器有效位。
在所有的基地址寄存器中,第0 位均為只讀位并且用來決定是存儲器空間還是I/O 空間。 如果該位為0 則是映射到存儲器空間,否則,若為1 表示映射到I/O 空間。
映射到I/O 空間的基地址寄存器寬度總是32 位,其中0 位恒為1(用硬件實現),1 位 為保留位并且其讀出值必須為0,其余位用來把設備映射到I/O 空間。映射到存儲器空間的 基地址寄存器可以是32 位或64 位。對于存儲器基地址寄存器,在0 位上設置為0,位2 和 位1 將其設為00,表示基地址寄存器為32 位寬。將位3 設為1,表示數據可預取。在設計 中將內存空間定義為1M 大小,1M 地址空間的設備應構造地址寄存器的高12 位為1(使用 32 位基址寄存器),其它位置為0。對于I/O 基地址寄存器為了簡便將其配置為與內存基地 址寄存器一樣的狀態。
基地址檢查模塊:如果PCI 設備要占用一定的I/O 空間或存儲器空間, 就必須實現基址 寄存器, 以便系統設置軟件在對系統進行自動設置時, 對其地址譯碼器進行編程,使設備能 獲得所要求的空間,在利用Verilog HDL進行PCI 總線接口設計時, 必須對基址寄存器的每 一位都能正確譯碼, 這樣才能確定PCI 設備是申請I/O 空間, 還是申請存儲器空間, 申請 空間的大小及其在系統中占據的位置, 是否可預取等。
在基地址檢查模塊中首先判斷系統是否要求復位,若要求復位則需對存儲交易地址的寄 存器(ba0、ba1)清0;反之則說明需要對給定的基地址進行判斷,當I/O 基地址寄存器有 效時,將總線上的數據pci_ad[31:4]的值賦給寄存器ba0;同樣的當內存基地址寄存器有效 時將pci_ad[31:4]的值賦給寄存器ba1。這時ba0 和ba1 中的值就是系統配置的I/O 和內存 在系統中具體的位置。接下來當設備要選擇申請的空間時,通過判斷式pci_addr & ba0_size的值是否與ba0 或ba1 相等,來判斷是否選中I/O 或內存空間。
奇偶生成模塊: PCI總線的奇偶校驗提供了一種檢驗數據傳輸正確與否的機制, 在任何 給定的總線周期內,哪個設備驅動了pci_ad[31::00]線,它就必須驅動PAR線,而且在時間 上要比相應的地址或數據推遲一個時鐘周期。奇偶校驗主要用來確定主設備是否成功地尋址 到它所希望的從設備,以及數據傳輸的正確與否。因此,PCI總線進行奇偶校驗的檢測是必 需的。而奇偶校驗生成就是解決以上問題的一個必要的步驟,從而使PCI總線設備控制器能 夠為PCI總線提供正確的與奇偶校驗有關的信息。
在交易中,從設備驅動數據到pci_dat_out 端口上,并通過par_out 信號向主設備提供 正確的奇偶效驗信息。PCI 總線奇偶校驗位的產生是采用偶校驗,參與奇偶校驗的位包括 pci_ad[31::00]及pci_cbe_l[3:0],檢驗pci_ad[31::00] 及pci_cbe_l[3:0] 上‘1’的 個數是否為偶數。如果為偶數則為par_out 端口賦‘0’,如果為奇數則為par_out 端口賦‘1’, 再將這個值傳回主設備,在主設備中與主設備產生的奇偶校驗值做比較,這樣做的目的是為 保證總線命令的正常執行和數據傳輸的正確性。如果兩個值相等說明尋址及數據的傳輸是正 確的,如果不相等,則說明尋址或數據的傳輸過程中發生了問題,此次交易的數據必須重新 傳送。而對于那些實際并不傳送數據的字節所對應的線,必須被驅動到穩定狀態,也要包含 于奇偶計算之中。
有限狀態機模塊:PCI 總線接口芯片是多功能和時序復雜的時序邏輯電路,它的復雜性 由PCI 總線操作的多樣性決定。為了便于利用硬件描述語言進行設計,將這一復雜的時序邏 輯抽象成有限狀態機,并利用有限狀態機實現復雜的總線操作。存儲器讀寫操作、I/O 讀寫 操作、配置空間讀寫操作和中斷操作都要通過一種設計合理的有限狀態機實現,根據PCI 總 線操作的時序關系給出了一種簡捷明了的有限狀態機, 實現了存儲器的讀寫、I/O 讀寫等各 種操作。如圖1 所示為有限狀態機的狀態轉移圖。
空閑狀態(Idle):根據當前命令為配置命令或讀寫命令而進入配置讀寫等待狀態或存 儲器、I/O 讀寫等待狀態、其它情況則繼續在空閑狀態等待。
配置讀寫等待(con_wait)狀態:系統進入配置讀寫等待狀態后根據pci_irdy_l 的值 判斷直接進入配置讀寫(con)狀態,還是繼續在配置讀寫等待(con_wait)狀態循環,如 果pci_irdy_l=0,則進入配置讀寫(con)狀態,否則繼續在配置讀寫等待(con_wait)狀 態循環。
配置讀寫(con)狀態:在這一狀態中將par_oe 設為有效,開始奇偶校驗生成;并將 trdy_l 設為有效表示從設備準備好。下來判斷pci_irdy_l 信號是否有效,即主設備是否準備好,如果該信號有效則傳輸配置信息,在下一時鐘延到來時轉入backoff 狀態,準備返回 空閑狀態;否則進行等待,直到pci_irdy_l 有效為止。
存儲器或I/O 讀寫等待(rw_wait)狀態:在進入這一狀態前首先應判斷是要進行讀操 作還是寫操作,下一步控制器要根據基地址譯碼模塊的譯碼結果決定控制器是對存儲器還是 I/O 讀寫,若譯碼結果顯示存儲器或I/O 都未選中,則進入傳輸中止狀態。
存儲器或I/O 讀寫等待2(rw_wait2)狀態:進入該狀態的同時開始計數,根據read_flag 的值,決定進行讀操作還是寫操作。
存儲器或I/O 讀等待(read_wait)狀態:在存儲器或I/O 讀寫等待2(rw_wait2)狀 態時判斷若為讀操作,則狀態機轉入存儲器或I/O 讀等待(read_wait)狀態,存儲器或I/O 讀等待(read_wait)狀態是在從設備trdy_l 有效之前讀取從設備的第一個數據段,也就是 地址段。
存儲器或I/O 讀寫(rw)狀態: 在這一狀態中進行存儲器或I/O 讀寫。
傳輸中止(abort)狀態:使從設備停止響應,傳輸中止。
存儲器或I/O 讀寫停止等待(last_rw)狀態:這是數據傳輸結束的前一個周期,表示即將停止數據傳輸。
重試(retry)狀態:當信息未準備好時,系統進入重試狀態。
結束狀態:結束此次交易。
計數器模塊:在DEVSEL確定以后,必須在16個總線周期內提供或者接收數據,這一模塊 用來實現一個周期計數功能,當在第12個周期時數據仍然未就緒時提供一個“retry”信號 來要求數據,同時在16個周期到來時通知終端設備此次交易結束。
地址鎖存模塊:在總線交易的地址段對PCI總線的地址、C/BE信號、IDSEL信號實現鎖存, 提供了這些信號的寄存器。
2 、PCI總線從設備控制器的FPGA實現
FPGA 是當前復雜數字硬件電路設計的理想首選。設計選用Xilinx 公司生產的Sparten —Ⅱ 200 PCI 驗證板。集成軟件環境為Xilinx ISE6.1i。
設計中有源代碼輸入、綜合、實現等3 個比較大的階段,而電路仿真的切入點也基本與 這些階段吻合 。選用XST(Xilinx Synthesis Technology)作為綜合工具。PCI 驗證板電 源、管教電壓、晶振分別選為5V、 2.5V、50MHz,下載模式選擇為JTAG 模式,并通過ISP PROM 配置FPGA。
3 、PCI總線設備控制器的驗證
硬件系統通常是通過信號來驅動的,在不同的輸入信號下其行為表現是產生不同的輸出 結果,因此,仿真輸入信息的產生是對系統進行仿真的重要前提和必須進行的步驟,PCI 總線控制器的仿真是由一段Verilog HDL 語言程序直接產生仿真的輸入信息,將此外部激勵信 號施加于PCI 總線控制器模型,通過觀察其在外部激勵信號作用下的反應來判斷PCI 總線控 制器是否能實現預期的功能。對PCI 總線控制器的仿真,主要是按照PCI 總線操作命令來進 行的,對于正常的總線操作結束和由主設備及從設備提出的操作終止都作了測試,其仿真結 果實現了預期的要求。由于仿真項目比較多,我們選取其中具有代表性的一個項目來舉例說 明。圖2 是存儲器空間沒有等待周期的突發數據段寫這一過程的仿真結果。
4、 結論
PCI總線從設備控制器的設計按照自頂向下的設計流程,實現了PCI 從設備控制器的設計目標,完成了PCI 總線協議所要求的基本功能,目前已是一個完整可用的PCI 總線從設備 控制器IP 核,有很高的工程價值。
該設計方案將PCI從設備控制器作為IP核來設計,將總線接口控制器 按照功能分為有限狀態機模塊、奇偶校驗模塊、配置空間配置模塊、基地址檢查模塊、計數 器模塊、地址鎖存模塊和頂層模塊這7個模塊,編寫了測試文件,測試表明,設計完全符合功能要求。
-
控制器
+關注
關注
112文章
16395瀏覽量
178482 -
總線
+關注
關注
10文章
2891瀏覽量
88162 -
機器
+關注
關注
0文章
784瀏覽量
40757
發布評論請先 登錄
相關推薦
評論