文獻標(biāo)識碼: 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 引言
半個世紀(jì)以來,集成電路設(shè)計規(guī)模和設(shè)計復(fù)雜度不斷增加[1]。在這個過程中,集成電路片上設(shè)計對總線的要求也在不斷地提高。目前計算機中采用較多的總線標(biāo)準(zhǔn)有AMBA總線、ISA總線、SPI總線、PCI總線等。其中PCI總線作為一種系統(tǒng)總線在計算機上得到廣泛應(yīng)用[2],而AMBA總線由于其高性能、高帶寬的特點在片內(nèi)總線市場占有率最高,成為一種最流行的工業(yè)標(biāo)準(zhǔn)片內(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)化導(dǎo)致功能驗證的不一致性,同時節(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)成。當(dāng)有一個AHB主設(shè)備 (例如圖形處理器 )啟動一個事務(wù)時 ,其目標(biāo)為一個掛接在PCI總線上的從設(shè)備,則模塊 I負責(zé)相應(yīng)的協(xié)議轉(zhuǎn)換和數(shù)據(jù)緩沖,并在PCI總線上啟動一個適當(dāng)?shù)氖聞?wù)。而當(dāng)有一個PCI主設(shè)備啟動一個事務(wù)時 ,其目標(biāo)為一個掛接在AHB總線上的從設(shè)備(例如片上存儲器),模塊II負責(zé)相應(yīng)的協(xié)議轉(zhuǎn)換和數(shù)據(jù)緩沖,并在AHB總線上啟動一個適當(dāng)?shù)氖聞?wù)。
2 基于FPGA的軟硬件協(xié)同的測試平臺
2.1 測試平臺概述
本文所完成的測試平臺主要目的是對AHB-PCI橋的功能進行測試,并確保符合標(biāo)準(zhǔn)的協(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標(biāo)準(zhǔn)的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)標(biāo)識與控制設(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è)備為目標(biāo)的存儲器事務(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為高即從機準(zhǔn)備好,則將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為高即從機準(zhǔn)備好,則將htrans_s信號置為3,表示連續(xù)傳輸,否則信號持續(xù)直到hready_s拉高,從機準(zhǔn)備好接受第一個地址,控制部分將地址傳送給ram_addr,RAM一拍后出數(shù)據(jù),將數(shù)據(jù)傳給hrdata_s,如此往復(fù),直到傳輸完成,所有信號置為默認狀態(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,當(dāng) AHB作為從的計數(shù)器由9變?yōu)?0的時候,觸發(fā)一個上升沿,此時發(fā)送請求占用總線信號hbusreq_m,等到橋接電路回饋一個授權(quán)信號hgrant_m和從機準(zhǔn)備好傳輸信號hready_m,則將狀態(tài)轉(zhuǎn)到TRANS_NONSEQ,并將本次傳輸數(shù)據(jù)的計數(shù)器置零,否則維持本狀態(tài)。當(dāng)狀態(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é)果與預(yù)期的一致,下面對其中的一部分進行介紹。
(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.