基于單片機(jī)的高速信號測試接口板的實現(xiàn)
在數(shù)字電路設(shè)計和調(diào)試中,對設(shè)計單元電路的性能進(jìn)行實時測試是必不可少的環(huán)節(jié)。很多情況下,需要通過計算機(jī)的比較和分析,來測試設(shè)計的電路的性能是否達(dá)到要求。這就需要設(shè)計一個測試接口板,將計算機(jī)產(chǎn)生的測試數(shù)據(jù)送入單元電路,再將單元電路的輸出結(jié)果送回計算機(jī)。
在電路測試接口板的設(shè)計過程中,常常會遇到總線時鐘頻率較高(如40 MHz以上)、總線寬度較寬(如36 b)、要求測試的數(shù)據(jù)量較大(幾Mb/s)的單元電路。這時實時地進(jìn)行數(shù)據(jù)的雙向傳輸比較困難,因為不論采用總線頻率較高的PCI數(shù)據(jù)總線或USB總線[1],都達(dá)不到系統(tǒng)要求的數(shù)據(jù)傳輸速率,所以必須進(jìn)行數(shù)據(jù)的緩存??紤]到PCI總線和USB總線的接口電路復(fù)雜、開發(fā)周期長,本文介紹一種采用單片機(jī)為控制單元,通過RS232C接口,使用高速FIFO存儲器件作為緩沖,在單元電路與計算機(jī)之間傳輸數(shù)據(jù)的方案。該方案實現(xiàn)簡單,開發(fā)周期短,完全可以滿足對于上述的數(shù)字單元電路的測試要求。
這里以測試總線頻率40 MHz,數(shù)據(jù)寬度32 b的單元電路為例,介紹用單片機(jī)和FIFO實現(xiàn)的高速信號測試接口板方案,整個測試系統(tǒng)結(jié)構(gòu)如圖1所示。
1 系統(tǒng)概述
整個系統(tǒng)主要由單片機(jī)、FIFO芯片、MAX232芯片以及D觸發(fā)器芯片構(gòu)成。圖2是系統(tǒng)的原理簡圖,圖中給出 了一些重要的器件和控制信號。
系統(tǒng)的工作流程如下:首先將測試數(shù)據(jù)從計算機(jī)的RS232C口送入單片機(jī),單片機(jī)將其變?yōu)? b并行數(shù)據(jù)寫入FIFO1,這期間不對FIFO1進(jìn)行讀操作。FIFO1滿后,被測板以40 MHz的總線時鐘頻率并行讀取FIFO1,同時被測板的輸出以同樣速率寫入FIFO2。FIFO2滿后,再通過RS232C口將FIFO2中的數(shù)據(jù)讀入PC機(jī),其中的控制操作由單片機(jī)及外圍電路來完成。下面將分4個步驟介紹系統(tǒng)的工作過程,其中前2個步驟是測試數(shù)據(jù)從計算機(jī)傳送到被測板的過程,后面2個步驟描述了被測板的輸出結(jié)果送回計算機(jī)的過程。
1.1 RS232C口與FIFO1的通信(數(shù)據(jù)從RS232C口輸入)
測試數(shù)據(jù)以串行方式從計算機(jī)的RS232C口輸出,通過MAX232電平轉(zhuǎn)換后進(jìn)入單片機(jī)的RXD口,再轉(zhuǎn)換為 8 b并行數(shù)據(jù)從P2口寫入到FIFO1。單片機(jī)除了控制FIFO1和FIFO2的復(fù)位RES(圖2中未標(biāo)出)、FIFO1的寫使能WEN1以及FIFO1的寫時鐘WCLK,還發(fā)出一個信號用來輔助讀取FIFO1。
由于FIFO1的讀取被設(shè)置為在數(shù)據(jù)寫入時無效,只有寫滿了以后才允許被測板讀取,因此對于FIFO1滿狀態(tài)的判斷及控制非常重要。這里通過計數(shù)方式和查詢方式同時確定其滿狀態(tài),方法如下:在單片機(jī)內(nèi)設(shè)置一個計數(shù)值為256 k的計數(shù)器,每送出一個字節(jié),計數(shù)器值減1。當(dāng)計數(shù)器減到0,查詢FIFO1的管腳的狀態(tài),若為低電平,則開啟,允許被測板從FIFO1中讀出數(shù)據(jù),否則向計算機(jī)發(fā)出錯誤信號,重新接收數(shù)據(jù)。
1.2 FIFO1與被測板的通信(數(shù)據(jù)輸入被測板)
FIFO1與被測板的通信連接包括數(shù)據(jù)線以及讀允許REN1。REN1的的作用是控制被測板的讀取過程,只有當(dāng)此信號為低電平,被測板才能從FIFO1中讀數(shù)據(jù)。
由于被測板的讀取速度很高,而單片機(jī)的指令周期相對慢得多,當(dāng)FIFO1被讀空后,如果使用單片機(jī)來控制讀允許使其恢復(fù)到高電平,可能在關(guān)閉讀允許以前被測板已經(jīng)讀入了很多無用數(shù)據(jù),所以這里采用FIFO1的空標(biāo)志位通過D觸發(fā)器,和單片機(jī)的讀允許端一起組成控制信號具體電路如圖3(a)所示。
當(dāng)單片機(jī)發(fā)出讀允許信號,被測板開始讀取數(shù)據(jù),當(dāng)FIFO1為空,EF1通過D觸發(fā)器關(guān)斷使被測板停止讀數(shù),同時,單片機(jī)關(guān)閉FIFO1的讀有效信號。
1.3 被測板與FIFO2的通信(數(shù)據(jù)從被測板輸出)
被測板與FIFO2的通信連接包括數(shù)據(jù)線、寫允許、反饋線NW、部分復(fù)位PRS以及時鐘CLK。PRS 的作用是部分復(fù)位FIFO,即將FIFO的讀寫指針歸零,其他設(shè)置不變。CLK由被測板提供,作為FIFO1的讀時鐘和FIFO2的寫時鐘,這里為40 MHz,當(dāng)測試不同的單元電路時,CLK的頻率也可以隨著被測對象的總線頻率改變而改變。
被測板對測試信號進(jìn)行處理后,首先通過PRS將 FIFO2部分復(fù)位,防止由于兩者沒有同時復(fù)位帶來的數(shù)據(jù)誤讀。接著被測板將BWEN2置為低,開始向FIFO2寫數(shù)據(jù)。
當(dāng)FIFO2被寫滿,同樣存在一個及時關(guān)閉其寫允許的問題。這里采用FIFO2的滿標(biāo)志位FF2通過D觸發(fā)器關(guān)斷同時觸發(fā)NW信號反饋給被測板,通知被測板停止輸出數(shù)據(jù),如圖3(b)所示。
1.4 FIFO2與RS232口通信(數(shù)據(jù)從RS232口輸出)
FIFO2的滿狀態(tài)除關(guān)斷其寫允許WEN2外,還給單片機(jī)一個中斷信號,單片機(jī)收到此中斷后,立即開啟讀允許REN2(將其置為低電平),開始從FIFO2的空讀取數(shù)據(jù),F(xiàn)IFO2的空狀態(tài)判別同樣由計數(shù)方式和查詢方式同時確定,當(dāng)計數(shù)器為0時,測試FIFO2的空狀態(tài)輸出管腳EF2,若結(jié)果為低電平,則通知計算機(jī)讀取過程結(jié)束,同時關(guān)閉REN2,禁止讀出數(shù)據(jù),否則通知計算機(jī)出錯。
至此,一次完整的測試數(shù)據(jù)處理傳輸過程已經(jīng)全部完成。單片機(jī)對FIFO進(jìn)行復(fù)位,準(zhǔn)備下一次工作。用戶可以分析被測板送回的數(shù)據(jù),從而測試單元電路的性能。
2 器件選擇
本方案中單片機(jī)采用AT89C51芯片,包括4個8 b并行I/O口、1個全雙工的串行口、2個16 b的定時/計數(shù)器以及2個中斷源。晶振的工作頻率選用11.095 2 MHz,每個機(jī)器周期約1μs。單片機(jī)在這里主要完成與RS232C口和FIFO通信以及整體流程控制的工作。相對于被測電路的數(shù)據(jù)速率,單片機(jī)的處理速度很低,因此如何用相對低速的器件控制高速信號是本方案要解決的關(guān)鍵問題之一。本文的方法是采用FIFO和TTL芯片來實現(xiàn)數(shù)據(jù)緩沖和輔助控制。輔助控制器件中的D觸發(fā)器采用速度較高的74S系列芯片,最高工作頻率為110 MHz。
FIFO是一種先進(jìn)先出存儲器,允許同時異步進(jìn)行讀寫操作,讀寫之間互相獨(dú)立。這里選用的FIFO為IDT72V36100芯片,容量為64 k×36 b,工作頻率高達(dá)133 MHz,是IDT公司SuperSyncⅡ系列高性能同步FIFO中的一種。該系列芯片相比以前的FIFO器件有很多獨(dú)特的優(yōu)點(diǎn)。例如具有總線匹配功能(即輸入輸出數(shù)據(jù)總線寬度可以不同,有幾種匹配方式供用戶設(shè)置),還有標(biāo)志位可編程功能以及重發(fā)功能,使得設(shè)計者能夠根據(jù)需要設(shè)置標(biāo)志位的地址,并且可以重新讀取已經(jīng)讀過的數(shù)據(jù)。這些 優(yōu)點(diǎn)大大增加了設(shè)計靈活性,給使用者帶來很大方便。
本方案中用到FIFO的主要管腳包括寫使能WEN1(低有效)、讀使能REN1(低有效)、數(shù)據(jù)輸入/輸出、總線匹配設(shè)置、空標(biāo)志位(低有效)、滿標(biāo)志位(低有效)以及讀寫時鐘等。IDT72V36100芯片的總線寬度有5種匹配方式,分別為36 b/36 b,36 b/18 b,36 b/9 b,18 b/36 b及9 b/36 b,本方案選用的是36 b/9 b和9 b/36 b的總線匹配方式。實際應(yīng)用中,根據(jù)被測電路的實際情況可以選擇不同的總線匹配方式,使用者根據(jù)所選的匹配方式將相應(yīng)的FIFO總線設(shè)置管腳置為高電平或低電平。
3 軟件流程
系統(tǒng)所用到的軟件包括PC機(jī)的串口通信程序與單片機(jī)程序。PC機(jī)的串口通信程序完成的是單純的通過RS232口與單片機(jī)通信的功能,這方面的技術(shù)資料很多,因此不再贅述。這里主要介紹的是單片機(jī)程序,該程序執(zhí)行流程控制功能和與PC機(jī)通信功能。
單片機(jī)與PC機(jī)通信時,接收采用中斷方式,發(fā)送采用查詢方式。圖4是單片機(jī)主程序流程圖。單片機(jī)程序中要用到兩個標(biāo)志位,即聯(lián)絡(luò)標(biāo)志位和數(shù)據(jù)結(jié)束標(biāo)志位,主程序在初始化過程中應(yīng)該先將這兩個標(biāo)志位清零并設(shè)置好計數(shù)器。經(jīng)過初始化以及開中斷后,單片機(jī)處于等待方式,不斷查詢數(shù)據(jù)結(jié)束標(biāo)志位,判斷數(shù)據(jù)是否接收完畢。當(dāng)查詢到標(biāo)志位被置1后,繼續(xù)查詢FIFO1的滿狀態(tài)管腳,若FIFO1為滿,證明數(shù)據(jù)接收正確,單片機(jī)允許讀FIFO2,進(jìn)入等待狀態(tài),等待FIFO2變滿產(chǎn)生的中斷,然后轉(zhuǎn)向發(fā)送子程序。
圖5是中斷接收子程序的流程圖。串口每進(jìn)入一個字節(jié)就產(chǎn)生一次串口中斷,進(jìn)入到該子程序中。每次中斷都要先檢查聯(lián)絡(luò)標(biāo)志位,若該標(biāo)志位為0,則表明送入的是聯(lián)絡(luò)字節(jié),檢查該字節(jié)和約定的聯(lián)絡(luò)信號是否一致,若一致, 表明通信正常,將聯(lián)絡(luò)標(biāo)志位置1;如果聯(lián)絡(luò)標(biāo)志位已被置1,則檢查數(shù)據(jù)結(jié)束標(biāo)志位,若該標(biāo)志位為0,則將數(shù)據(jù)以字節(jié)為單位寫入FIFO1,每次中斷寫入一個字節(jié),并將計數(shù)器減1,若計數(shù)器減到零,表明數(shù)據(jù)傳輸結(jié)束,將數(shù)據(jù)結(jié)束標(biāo)志位置1并跳出中斷。
發(fā)送子程序執(zhí)行的是將數(shù)據(jù)從FIFO2發(fā)送到PC機(jī)的過程,與接收子程序流程基本相同,只是前者為查詢方式,后者為中斷方式,故不贅述。
4 測試結(jié)果
根據(jù)以上方案進(jìn)行了電路設(shè)計和調(diào)試。被測FPGA(Field Programme Gate Array)單元電路的數(shù)據(jù)總線頻率為40 MHz,數(shù)據(jù)總線寬度為32 b,要求測試的數(shù)據(jù)量為2 Mb。RS232口采用19.2 k的波特率,數(shù)據(jù)輸出或輸入需要約2.5 min,但比起使用PCI或USB接口的開發(fā)代價,這種時間上的微耗是完全可以接受的。
為了驗證測試接口板,先令單元電路不對數(shù)據(jù)做任何處理,只與測試接口板進(jìn)行時序上的配合,兩者進(jìn)行聯(lián)調(diào)??梢钥吹綇挠嬎銠C(jī)產(chǎn)生的數(shù)據(jù)文件與送回的數(shù)據(jù)文件完全相同,這就證明該測試接口板能夠準(zhǔn)確無誤地傳送數(shù)據(jù)。然后再令單元電路在時序配合的基礎(chǔ)上加載自己的功能程序,就可以在計算機(jī)內(nèi)分析和比較單元電路的輸出結(jié)果了,測試結(jié)果表明單元電路的輸出與計算機(jī)仿真的結(jié)果完全符合,進(jìn)一步證明了該測試方案的正確性。
如果需要測試不同數(shù)據(jù)總線寬度的電路,只需根據(jù)需要改變FIFO的總線匹配設(shè)置管腳的電平,并修改單片機(jī)程序中的相應(yīng)語句即可。可以看出,該測試接口板在應(yīng)用方面有較大的靈活性。
5 結(jié)語
迄今為止,基于本方案的測試接口板已經(jīng)成功地完成了多項單元電路的性能測試工作。實踐證明其工作穩(wěn)定可靠,實現(xiàn)簡單,并且可以測試不同數(shù)據(jù)總線速率(110 MHz以下)、數(shù)據(jù)寬度(36 b以下)以及各種不同功能的單元電路。這種以相對低廉的控制器件為主測試較高速數(shù)字單元電路的方案,在通信系統(tǒng)的設(shè)計和調(diào)試方面有重要的實際應(yīng)用價值。