<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 測試測量 > 設計應用 > 消息驅動(dòng)測試平臺可以改善測試覆蓋率

消息驅動(dòng)測試平臺可以改善測試覆蓋率

作者: 時(shí)間:2012-03-16 來(lái)源:網(wǎng)絡(luò ) 收藏

傳統的實(shí)現只能按順序設置工作參數,無(wú)法動(dòng)態(tài)響應被測設備的要求。因此這種測試方法會(huì )遺漏軟件和硬件之間的某些復雜時(shí)序交互。隨著(zhù)FPGA功能的逐漸強大,軟件和FPGA之間的交互信息量也在不斷增加。本文討論的以能夠模擬FPGA實(shí)際運行環(huán)境對FPGA進(jìn)行仿真測試。該方法除了能為所要求的物理接口模型建模外,還能對控制FPGA的部分軟件進(jìn)行建模。因此允許人們在測試平臺和FPGA之間建立動(dòng)態(tài)交互渠道,從而改善FPGA的。

本文引用地址:http://dyxdggzs.com/article/194298.htm

測試平臺應該真實(shí)反映FPGA在實(shí)際硬件環(huán)境中的工作狀況。以前也經(jīng)常出現仿真通過(guò)了但在實(shí)際在線(xiàn)使用時(shí)FPGA出故障的情況。

有時(shí)很容易找出故障原因,有時(shí)則很難。一旦找到問(wèn)題的癥結我們會(huì )捫心自問(wèn):“為什么不早點(diǎn)發(fā)現這個(gè)問(wèn)題呢?”很多時(shí)候這些問(wèn)題發(fā)生在軟件和硬件之間的灰色區域。在仿真FPGA時(shí)我們應該在何處下手呢?如果我們忽略軟件是如果使用FPGA的,那么我們以后肯定能找出問(wèn)題的原因。因此不受硬件的約束、積極吸收一些軟件功能才是明智不舉。這樣做有以下一些優(yōu)點(diǎn):

11.jpg

1. 由于覆蓋了一部分硬件與軟件之間的灰色區域,可以得到改善。

2. 能夠更好地理解軟硬件的交互以前二者之間的交互時(shí)序。

3. 能夠部分驗證FPGA的控制算法。

我們如何設計這種測試平臺呢?

在FPGA和處理器系統中,軟件設置好FPGA寄存器后就可以與FPGA進(jìn)行交互通信了。這種測試平臺可以同時(shí)滿(mǎn)足這二種情況。不過(guò)后者令人更有興趣,也更難一些。讓我們考慮一下如圖1所示的系統,它的FPGA內部有一個(gè)處理器接口和二個(gè)UART。

FPGA內部的這些模塊通過(guò)內部總線(xiàn)連接在一起。為了控制UART,外部微處理器需要通過(guò)處理器接口和FPGA內部總線(xiàn)訪(fǎng)問(wèn) UART內部的寄存器。波特率、奇偶校驗等UART參數必須由軟件先行初始化設置。在工作期間,軟件在訪(fǎng)問(wèn)數據寄存器之前必須查詢(xún)UART狀態(tài)寄存器或等待中斷,否則數據寄存器的內容可能是無(wú)效的。

測試平臺部分由三個(gè)測試模塊組成,其中有二個(gè)測試模塊與UART接口,另一個(gè)與FPGA處理器接口相接。必須配置好測試模塊,以確保UART測試模塊的工作參數和UART工作參數相同。

為了仿真通過(guò)UART給UART測試模塊發(fā)送數據的工作過(guò)程,需要二次循環(huán)。每次循環(huán)都要檢查UART的狀態(tài)寄存器,當狀態(tài)寄存器指示允許寫(xiě)入時(shí)再向發(fā)送數據寄存器寫(xiě)入數據。這二次循環(huán)需要在處理器測試模塊中完成,因為只有一個(gè)VHDL進(jìn)程可以驅動(dòng)FPGA處理器接口信號。

這種方法對簡(jiǎn)單案例很有效,但隨著(zhù)處理器測試模塊中測試模塊的增多,這種方法將變得越來(lái)越復雜。另外,因為需要比較從FPGA UART發(fā)送到UART測試模塊的數據,仍然需要在模塊之間建立一定的通信機制。

由于已經(jīng)對硬件和部分軟件作了建模,因此可以研究一下軟件在系統中是如何工作的,從而幫助我們作出正確的比較結果。

22.jpg

首先我們需要構筑能夠匹配FPGA功能的軟件,以便我們擁有能夠管理每個(gè)FPGA模塊的軟件任務(wù)。該軟件任務(wù)可以作為這種模塊的設備驅動(dòng)器。參考高級操作系統提供的功能,軟件任務(wù)之間的通信可以通過(guò)消息管道和信號機實(shí)現。在VHDL中可以使用相同的結構。軟件任務(wù)類(lèi)似于 VHDL進(jìn)程。雖然不象C等高級語(yǔ)言那樣方便,但還是可以創(chuàng )建消息隊列的。利用信號可以很簡(jiǎn)單地構建信號機,然后依靠接收進(jìn)程等待這一信號的變化。至此我們就具備了用VHDL創(chuàng )建軟件驅動(dòng)器的所有條件。

那么這樣一種測試平臺的結構是怎樣的呢?圖2是測試平臺內部消息流程的一個(gè)簡(jiǎn)單例子。

命令是由命令解析器從腳本文件中讀取的。以命令解析器為目的的命令在本地得到處理,而其它消息發(fā)送到相應的模塊。腳本命令被轉換成標準消息格式。這種消息格式一般由一條記錄組成,該記錄包含消息目的地、消息源、消息類(lèi)型和數據陣列指針等字段。消息送到目的地后再進(jìn)行進(jìn)一步處理。

目標模塊不斷查詢(xún)消息隊列是否有輸入消息。當有消息到達時(shí),它會(huì )檢查消息類(lèi)型并決定如何處理該消息。一般用case語(yǔ)句區分不同的命令。在每個(gè)case語(yǔ)句中,可以立即執行命令(比如希望用一些數據填充某些RAM的情形),也可以通過(guò)激發(fā)被某個(gè)進(jìn)程監視的脈沖信號觸發(fā)并啟動(dòng)這個(gè)進(jìn)程。

值得注意的是我們可以從測試平臺中的任何模塊向其它任何模塊發(fā)送消息。因為有這樣的反饋路徑,因此能夠構建查詢(xún)循環(huán)。圖3 給出了UART測試模塊的結構。

模塊被分成三大部分:物理接口、軟件接口和本地數據存儲模塊。

物理接口用來(lái)管理與FPGA的連接。在該模塊內有二個(gè)VHDL進(jìn)程為測試UART建模。第一個(gè)進(jìn)程收集來(lái)自FPGA UART RxD引腳的數據,并把數據存放在本地數據存儲器中。第二個(gè)進(jìn)程將來(lái)自本地數據存儲器的數據通過(guò)TxD信號發(fā)送給FPGA UART。

軟件接口對運行于實(shí)際微處理器的軟件算法進(jìn)行建模。在該模塊內也有二個(gè)進(jìn)程。第一個(gè)進(jìn)程將本地數據存儲器中的數據發(fā)送給 FPGA UART。這些進(jìn)程和物理接口進(jìn)程的區別在于這時(shí)的數據交換是通過(guò)UART數據寄存器而不是UART TxD和RxD信號完成的。這就要求我們可以從UART測試模塊訪(fǎng)問(wèn)FPGA UART寄存器。通過(guò)交換UART測試模塊和進(jìn)程接口模塊之間的消息隊列中的消息實(shí)現對FPGA UART寄存器的訪(fǎng)問(wèn)。

控制接口用于啟動(dòng)物理接口內的進(jìn)程。共享變量和信號用于軟件和物理接口模塊之間的通信。

33.jpg

例子

下面研究一下可能運行于圖1所示的FPGA上的測試。在測試中需要將緩沖數據通過(guò)每個(gè)UART發(fā)送到相應的測試模塊。對每個(gè)UART來(lái)說(shuō)測試包含以下一些步驟:

..初始化UART

..初始化UART測試模塊

..初始化發(fā)送數據的緩存

..緩存非空時(shí)循環(huán)

..比較結果

利用簡(jiǎn)單的腳本命令如WRITE_REGISTER就可完成UART和UART測試模塊的初始化。將要發(fā)送的緩存數據存放于 UART測試模塊中??梢杂媚_本命令設置該數據。循環(huán)相對要復雜些,包括將來(lái)自UART測試模塊的消息發(fā)送給處理器接口模塊,并用指令讀取UART狀態(tài)寄存器。一經(jīng)讀取,處理器接口模塊就會(huì )向UART測試模塊回送一條帶狀態(tài)寄存器值的消息。然后由UART測試模塊決定是否發(fā)送數據。

UART測試模塊的其它部分收集來(lái)自FPGA TxD引腳的數據。待收集完所有數據后,就可以比對接收數據和期望數據了。

處理器接口模塊相對簡(jiǎn)單些,它在輸入隊列和處理器上接收消息。通常這些消息要么是寫(xiě)寄存器命令,要么是讀寄存器命令。如果是寫(xiě)寄存器命令,來(lái)源于消息的數據和地址就被寫(xiě)入FPGA處理器接口,其寫(xiě)入方式與實(shí)際處理器向FPGA寫(xiě)入的方式相同。如果是讀寄存器命令,則地址來(lái)自消息。FPGA處理器接口完成讀周期,讀到的數據放在消息中再發(fā)送回請求讀的模塊。

其它測試模塊以相同的方式寫(xiě)入UART測試模塊。大多數測試模塊具有相同的結構,而由測試平臺建立的架構能使新測試模塊的插入非常容易。

本文小結

FPGA加上微處理器構成了典型系統的基礎。FPGA和微處理器之間的交互常常很難預測和查錯。測試平臺則有助于仿真這些交互,從而減少硬件測試期間可能會(huì )遇到的問(wèn)題。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>