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