文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.10.009
中文引用格式: 劉歡,韓俊剛,,李卯良,,等. 基于軟硬件協(xié)同技術(shù)的AHB-PCI測試平臺[J].電子技術(shù)應(yīng)用,2016,,42(10):40-43.
英文引用格式: Liu Huan,,Han Jungang,Li Maoliang,,et al. Built AHB-PCI test platform based on hardware/software codesign[J].Application of Electronic Technique,2016,,42(10):40-43.
0 引言
半個世紀以來,,集成電路設(shè)計規(guī)模和設(shè)計復雜度不斷增加[1],。在這個過程中,集成電路片上設(shè)計對總線的要求也在不斷地提高,。目前計算機中采用較多的總線標準有AMBA總線,、ISA總線、SPI總線,、PCI總線等,。其中PCI總線作為一種系統(tǒng)總線在計算機上得到廣泛應(yīng)用[2],而AMBA總線由于其高性能,、高帶寬的特點在片內(nèi)總線市場占有率最高,,成為一種最流行的工業(yè)標準片內(nèi)總線結(jié)構(gòu)[3]。
AMBA Rev2.0 規(guī)范中包含兩級總線[4]:AHB(Advanced High Performance Bus)系統(tǒng)總線和APB(Advanced Peripheral Bus)外圍總線,。其中,,AHB 總線采用地址/數(shù)據(jù)分離的流水式操作,支持突發(fā)傳送,,分裂事務(wù)傳送特性和多個主設(shè)備的總線管理,,具有高帶寬、高性能特性,,適合于嵌入式處理器與高性能外圍設(shè)備,,片內(nèi)存儲器及接口功能單元的連接[5]。
PCI總線之所以成為局部總線的主流[6],,是由一些顯著特點決定的,,如運行速度快、可擴展性好,、兼容性好,、穩(wěn)定可靠等特點,。
本文利用軟硬件協(xié)同的技術(shù),搭建了一個對AHB-PCI[7]橋功能驗證的平臺,。與常用的Verilog驗證相比,,本文中的方法更能保證硬件的正確性,減少了從仿真到綜合中由于綜合工具優(yōu)化導致功能驗證的不一致性,,同時節(jié)約了開發(fā)周期,。
1 AHB-PCI橋的結(jié)構(gòu)
AHB-PCI橋?qū)崿F(xiàn)AHB到PCI的協(xié)議轉(zhuǎn)換。主要包括兩部分,,即AHB一端作為主機,,完成AHB到PCI的信號轉(zhuǎn)換;另一個PCI一端作為主機,,能夠?qū)崿F(xiàn)PCI相關(guān)寄存器的配置和數(shù)據(jù)的傳輸,。兩個模塊均需要進行時鐘的同步。拓撲結(jié)構(gòu)如圖1所示,。
圖中最大矩形方框為AHB_PCI橋轉(zhuǎn)換電路的頂,。它由模塊I和模塊II兩個模塊構(gòu)成。當有一個AHB主設(shè)備 (例如圖形處理器 )啟動一個事務(wù)時 ,其目標為一個掛接在PCI總線上的從設(shè)備,,則模塊 I負責相應(yīng)的協(xié)議轉(zhuǎn)換和數(shù)據(jù)緩沖,,并在PCI總線上啟動一個適當?shù)氖聞?wù)。而當有一個PCI主設(shè)備啟動一個事務(wù)時 ,其目標為一個掛接在AHB總線上的從設(shè)備(例如片上存儲器),,模塊II負責相應(yīng)的協(xié)議轉(zhuǎn)換和數(shù)據(jù)緩沖,,并在AHB總線上啟動一個適當?shù)氖聞?wù)。
2 基于FPGA的軟硬件協(xié)同的測試平臺
2.1 測試平臺概述
本文所完成的測試平臺主要目的是對AHB-PCI橋的功能進行測試,,并確保符合標準的協(xié)議,。系統(tǒng)上電后,通過軟件對PCI相應(yīng)寄存器進行配置,,然后對AHB作為從設(shè)備進行讀寫操作,,最后啟動AHB作為主設(shè)備,對PCI作為從的一端進行讀寫,。通過這樣不斷地操作,,完成對橋的功能驗證。平臺使用操作系統(tǒng)版本Red Hat2.16.0,,vivado版本15.4,,F(xiàn)PGA為Xllinx的7vx690tffg1930-1,帶有PCI插槽的主機,。
2.2 基于FPGA的測試平臺設(shè)計與實現(xiàn)
2.2.1 測試平臺的結(jié)構(gòu)
基于FPGA的測試平臺所實現(xiàn)的所有測試電路必須可綜合,。測試平臺主要由軟件和硬件兩部分構(gòu)成。軟件部分主要實現(xiàn)對PCI一端通過驅(qū)動程序進行驅(qū)動,,實現(xiàn)PCI主從的時序,,硬件部分主要由兩個符合AHB標準的RAM構(gòu)成,。平臺硬件結(jié)構(gòu)如圖2所示。
2.2.2 測試軟件設(shè)計
在系統(tǒng)中所有的PCI設(shè)備,,包括PCI-PCI橋接器在內(nèi),都有一個需要配置的數(shù)據(jù)結(jié)構(gòu),,它通常位于PCI配置地址空間中,。PCI的配置頭是用于系統(tǒng)標識與控制設(shè)備。配置頭在PCI配置空間的位置取決于系統(tǒng)中PCI設(shè)備的拓撲結(jié)構(gòu),。例如將一個PCI網(wǎng)卡插入不同的PCI插槽,,雖然其配置頭的位置會變化,但是對整個系統(tǒng)沒影響,,系統(tǒng)將找到掛接在其上的每個PCI設(shè)備與橋接器,,并使用配置頭中的信息來配置寄存器。如圖3所示為普通PCI的配置寄存器分布,。
命令寄存器是一個必備的寄存器,,該寄存器可讀/寫,格式如圖4所示,。根據(jù)使用中的需要將該寄存器利用驅(qū)動程序配置為0x0246,,bit 1寫為1,存儲器地址空間使能,,接受以該設(shè)備為目標的存儲器事務(wù),;bit 2寫為1,總線主設(shè)備使能,,允許該設(shè)備發(fā)出請求,,占用總線;bit 6奇偶校驗使能,;bit 10寫為0,,中斷使能,允許產(chǎn)生INTX的中斷消息,。
狀態(tài)寄存器為只讀寄存器,,記錄PCI總線有關(guān)的狀態(tài)信息,格式如圖5所示,。
在一般PCI設(shè)備中,,除了擁有配置空間外,還具有兩個物理空間:memory空間和I/O空間,。想要訪問這兩個地址空間,,就必須使用配置空間中的基址寄存器。一般PCI設(shè)備或橋中涉及3種基址寄存器:內(nèi)存空間基址寄存器,、I/O空間基址寄存器和擴展ROM基址寄存器,。
Linux內(nèi)核提供了3種數(shù)據(jù)結(jié)構(gòu)來描述PCI控制器,、PCI設(shè)備以及PCI總線。其中PCI控制器用pci_controller結(jié)構(gòu)來描述,,PCI總線用pci_bus結(jié)構(gòu)來描述,,PCI設(shè)備用pci_dev結(jié)構(gòu)來描述。PC對PCI進行初始化流程如下:
(1)Linux分配數(shù)據(jù)結(jié)構(gòu)pci_contoller,,并且初始化,,包括PCI的memory/io空間和訪問PCI配置空間所需的handler。
(2)PCI設(shè)備的枚舉:掃描系統(tǒng)上所有PCI設(shè)備,,包括PCI橋,,并初始化它們的配置空間(硬件上的初始化)。
(3)用數(shù)據(jù)結(jié)構(gòu)將PCI設(shè)備信息聯(lián)系起來,,在系統(tǒng)中構(gòu)建PCI樹(軟件上的初始化),。
(4)加載PCI設(shè)備的驅(qū)動程序。
驅(qū)動程序通過讀取和配置相應(yīng)的寄存器,,對PCI進行配置操作和對memory/io空間的訪問,。
2.2.3 AHB作從RAM的硬件電路設(shè)計
AHB作為從的RAM由AHB控制部分和RAM部分構(gòu)成。其中RAM由vivado的IP核生成,??刂撇糠种饕歉鶕?jù)AHB的時序生成RAM的讀寫時序并對橋做出相應(yīng)的操作。結(jié)構(gòu)如圖6所示,。
該RAM支持AHB的所有傳輸類型,,接受的傳輸字大小為32 bit,即hsize_s為010b,。寫時序如圖7所示,,寫時序以一個INCR的傳輸類型為例,寫4個32 bit的數(shù)據(jù),。整個傳輸過程hwrite_s為高,,表示橋?qū)AM進行寫操作。開始傳輸時,,主機會將htrans_s的信號置為2,,表示非連續(xù)傳輸,并且發(fā)送地址a0和傳輸類型hburst_s,,如果hready_s為高即從機準備好,,則將htrans_s信號置為3,表示連續(xù)傳輸,,并發(fā)送第二個地址a2和第一個地址對應(yīng)的數(shù)據(jù)d1,此時RAM控制部分將地址a0發(fā)給ram_addr,,并將數(shù)據(jù)d0發(fā)給ram_wdata,ram_write置高,將數(shù)據(jù)寫入RAM,,直到等到傳輸完成,,所有信號置為默認狀態(tài)。
如圖8所示為讀時序,,讀時序以一個INCR的傳輸為例,,讀取4個32 bit的數(shù)據(jù)。整個傳輸過程中hwrite_s為低,,表示橋?qū)AM進行讀操作,。開始傳輸時,主機會將htrans_s的信號置為2,,表示非連續(xù)傳輸,并且發(fā)送地址a0和傳輸類型hburst_s,,如果hready_s為高即從機準備好,,則將htrans_s信號置為3,表示連續(xù)傳輸,,否則信號持續(xù)直到hready_s拉高,,從機準備好接受第一個地址,控制部分將地址傳送給ram_addr,,RAM一拍后出數(shù)據(jù),,將數(shù)據(jù)傳給hrdata_s,如此往復,,直到傳輸完成,,所有信號置為默認狀態(tài)。
控制部分內(nèi)部實現(xiàn)了一個同步的FIFO,。該FIFO的主要功能是統(tǒng)計AHB作為從進行的讀寫次數(shù),,將這個計數(shù)器的值發(fā)送給AHB作為主的硬件電路,這樣方便軟件對作主電路的控制,。
2.2.4 AHB作主RAM的硬件電路設(shè)計
AHB作主的硬件電路主要由AHB作為主的控制部分和RAM部分構(gòu)成,。這部分的RAM是由vivado的IP核生成,保證存儲數(shù)據(jù)的正確性,??刂撇糠稚葾HB需要的時序和RAM的讀寫時序。
用狀態(tài)機實現(xiàn)生成AHB作主的時序,,如圖9所示,。初始狀態(tài)為IDLE,當 AHB作為從的計數(shù)器由9變?yōu)?0的時候,,觸發(fā)一個上升沿,,此時發(fā)送請求占用總線信號hbusreq_m,等到橋接電路回饋一個授權(quán)信號hgrant_m和從機準備好傳輸信號hready_m,,則將狀態(tài)轉(zhuǎn)到TRANS_NONSEQ,,并將本次傳輸數(shù)據(jù)的計數(shù)器置零,,否則維持本狀態(tài)。當狀態(tài)機處于TRANS_NONSEQ時,,會判斷傳輸數(shù)據(jù)的計數(shù)器和本次要傳輸?shù)臄?shù)據(jù)是否相等,,如果相等則進入狀態(tài)TRANS_END,否則進入狀態(tài)TRANS_SEQ,。在TRANS_SEQ的狀態(tài)時,,處理辦法和在狀態(tài)TRANS_NONSEQ相同。狀態(tài)TRANS_END完成本次傳輸,,狀態(tài)機進入初始狀態(tài),。
該部分硬件能夠?qū)崿F(xiàn)AHB傳輸類型中比較常用的幾種傳輸方式,單一傳輸(single),、增量傳輸(INCR),、4個數(shù)據(jù)增量傳輸(INCR4)、8個數(shù)據(jù)增量傳輸(INCR8),、16個數(shù)據(jù)的增量傳輸(INCR16),。每次傳輸?shù)拈_始由ahbs_ram中的計數(shù)器進行控制,即用軟件操作作從的讀寫數(shù)據(jù),,來啟動AHB作主的電路,。
3 測試結(jié)果與分析
利用該平臺在FPGA上對AHB-PCI橋進行驗證,使用vivado15.4進行綜合,,添加Debug core對信號進行采樣,,生成bit,在FPGA上驗證,。實驗進行了大量的測試,,測試結(jié)果與預期的一致,下面對其中的一部分進行介紹,。
(1)PCI的寫操作:軟件由驅(qū)動發(fā)出對PCI進行寫操作,,從測試波形可以看出,所采的地址和數(shù)據(jù)與軟件發(fā)出的一致,,從而測試了橋PCI到AHB的寫通路正確,。
(2)PCI的讀操作:軟件由驅(qū)動對PCI進行讀操作,從測試波形可以知道,,軟件所讀出來的數(shù)據(jù)和開始寫入的數(shù)據(jù)一致,,從而測試了橋PCI到AHB的讀通路正確。
(3)AHB的寫操作:此處AHB的觸發(fā)由ahbs_ram中的計數(shù)器進行控制,,所以利用軟件寫固定個數(shù),,觸發(fā)了一次寫操作,實驗結(jié)果波形可以看出寫操作的傳輸類型為INCR,傳輸了32個32 bit的數(shù)據(jù),。利用軟件讀取該部分存儲的值,,和硬件寫入的值一致,從而測試了橋AHB到PCI的寫通路正確,。
(4)AHB的讀操作:同寫操作一樣,,軟件做相應(yīng)的操作,觸發(fā)一次讀操作,,實驗結(jié)果波形可以看出來,,本次讀操作的傳輸類型為INCR,讀取了32個32 bit的數(shù)據(jù),,利用軟件寫入的數(shù)據(jù)和波形上讀取的數(shù)據(jù)一致,,從而測試了橋AHB到PCI的讀通路正確。
4 總結(jié)
本文運用軟件與硬件相結(jié)合的技術(shù)搭建的測試平臺對AHB-PCI橋進行了功能驗證,。該平臺相對于modelsim搭建的測試平臺在硬件的驗證中更有說服力,,利用FPGA對功能驗證,極大地保證了硬件的正確性,,節(jié)約了開發(fā)時間。平臺運用軟硬件協(xié)同技術(shù),,對于同類的硬件測試具有非常大的借鑒意義,。
本文的方法可以測試硬件的基本功能和硬件的正確性,而未能將硬件功能測試完全,,可利用System Verilog 搭建平臺解決這個問題,。
參考文獻
[1] 詹文法,李麗,,程作仁,,等.一種基于總線的可重用驗證平臺研究[J].電子技術(shù)應(yīng)用,2006,,32(5):92-96.
[2] 史茂森,,邵翠萍,龔龍慶.一種PCI總線Master模塊接口設(shè)計[J].計算機技術(shù)與發(fā)展,,2012,,22(7):207-210.
[3] 顏偉成,陳朝陽,,沈緒榜.AMBA-AHB總線接口的設(shè)計與實現(xiàn)[J].計算機與數(shù)字工程,,2005,33(10):130-136.
[4] AMBA(tm) Specification.Revision 2.0.May,,1999.http://www.arm.com/.
[5] 王晨旭,,桑勝田,王進祥,等.AHB-PCI橋的設(shè)計及其驗證方法[J].微處理機,,2004,,2(1):8-13.
[6] 李鑒.PCI系列總線及其應(yīng)用[J].現(xiàn)代電子技術(shù),2002,,135(2):76-79.
[7] PRASHANT D,,PITHADIYA N,VAIBHAV C,,et al.Designing PCI/AHB bridge[J].International Journal for Scientific Research & Development,,2013,1(2):388-390.