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