文獻(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ì)以來,集成電路設(shè)計(jì)規(guī)模和設(shè)計(jì)復(fù)雜度不斷增加[1],。在這個(gè)過程中,,集成電路片上設(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é)約了開發(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)上電后,,通過軟件對(duì)PCI相應(yīng)寄存器進(jìn)行配置,然后對(duì)AHB作為從設(shè)備進(jìn)行讀寫操作,,最后啟動(dòng)AHB作為主設(shè)備,,對(duì)PCI作為從的一端進(jìn)行讀寫。通過這樣不斷地操作,,完成對(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一端通過驅(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)沒影響,系統(tǒng)將找到掛接在其上的每個(gè)PCI設(shè)備與橋接器,,并使用配置頭中的信息來配置寄存器,。如圖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空間,。想要訪問這兩個(gè)地址空間,就必須使用配置空間中的基址寄存器,。一般PCI設(shè)備或橋中涉及3種基址寄存器:內(nèi)存空間基址寄存器,、I/O空間基址寄存器和擴(kuò)展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對(duì)PCI進(jìn)行初始化流程如下:
(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ū)動(dòng)程序。
驅(qū)動(dòng)程序通過讀取和配置相應(yīng)的寄存器,,對(duì)PCI進(jìn)行配置操作和對(duì)memory/io空間的訪問,。
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è)傳輸過程hwrite_s為高,,表示橋?qū)AM進(jìn)行寫操作,。開始傳輸時(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è)傳輸過程中hwrite_s為低,,表示橋?qū)AM進(jìn)行讀操作,。開始傳輸時(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ù)拈_始由ahbs_ram中的計(jì)數(shù)器進(jìn)行控制,,即用軟件操作作從的讀寫數(shù)據(jù),來啟動(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è)試波形可以知道,軟件所讀出來的數(shù)據(jù)和開始寫入的數(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é)果波形可以看出來,,本次讀操作的傳輸類型為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)證中更有說服力,,利用FPGA對(duì)功能驗(yàn)證,極大地保證了硬件的正確性,,節(jié)約了開發(fā)時(shí)間,。平臺(tái)運(yùn)用軟硬件協(xié)同技術(shù),,對(duì)于同類的硬件測(cè)試具有非常大的借鑒意義。
本文的方法可以測(cè)試硬件的基本功能和硬件的正確性,,而未能將硬件功能測(cè)試完全,,可利用System Verilog 搭建平臺(tái)解決這個(gè)問題。
參考文獻(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.