基于P89C52RD2和FPGA的可調(diào)延時(shí)模塊設(shè)計(jì)
引言
基于P89C51RD2和FPGA的信號(hào)延時(shí)模塊主要用在傳輸時(shí)鐘信號(hào)、數(shù)字同步信號(hào)等對(duì)信號(hào)延遲有高要求的點(diǎn)對(duì)點(diǎn)傳輸系統(tǒng)中,它可對(duì)多路信號(hào)進(jìn)行單獨(dú)的適當(dāng)延時(shí)調(diào)整。造成信號(hào)的延遲原因有:不同的傳輸線路、信號(hào)處理時(shí)間不同以及器件速度存在差異等。無論何種原因,延時(shí)模塊可以對(duì)輸入的已存在有延時(shí)積累的信號(hào)進(jìn)行不同精度、不同范圍的延時(shí)量調(diào)節(jié),使信號(hào)到達(dá)終端后相對(duì)延遲時(shí)間符合要求。由于利用了可編程器件FPGA和增強(qiáng)型單片機(jī),延時(shí)模塊不僅能較好地實(shí)現(xiàn)其功能,而且實(shí)現(xiàn)了系統(tǒng)的模塊化和微型化,利于模塊在系統(tǒng)中的使用和模塊的二次開發(fā)。
系統(tǒng)結(jié)構(gòu)及硬件設(shè)計(jì)
系統(tǒng)結(jié)構(gòu)框圖如圖1。其硬件結(jié)構(gòu)比較簡(jiǎn)單,主要由單片機(jī)P89C51RD、RS-232/TTL接口電路MAX232和可編程邏輯器件FPGA三部分組成。單片機(jī)P89C51RD2是上位PC機(jī)和FPGA的連接紐帶,它通過并口發(fā)送數(shù)據(jù)給FPGA,另一邊通過RS-232/TTL接口芯片與PC機(jī)進(jìn)行串行通訊;PC機(jī)主要功能是實(shí)現(xiàn)延時(shí)調(diào)整的可視化操作;FPGA是延時(shí)調(diào)整處理的硬件實(shí)現(xiàn),單片機(jī)將PC送過來的延時(shí)調(diào)整參數(shù)輸入FPGA,F(xiàn)PGA在單片機(jī)的控制下對(duì)信號(hào)進(jìn)行延遲處理,最后送入相應(yīng)傳輸通道。某些系統(tǒng)使用現(xiàn)場(chǎng)存在較強(qiáng)的電磁干擾,模塊的設(shè)計(jì)考慮信號(hào)隔離問題,故對(duì)串行接口進(jìn)行了電氣隔離,強(qiáng)化了PC機(jī)和模塊通訊的安全系數(shù)。
延時(shí)模塊正常上電后,單片機(jī)P89C51RD2首先從數(shù)據(jù)存儲(chǔ)區(qū)讀出最近一次存儲(chǔ)的延遲時(shí)間、信號(hào)通道等參數(shù),并轉(zhuǎn)發(fā)到FPGA數(shù)據(jù)接口。FPGA根據(jù)接收到的參數(shù),首先篩選出目標(biāo)地址以便切換到對(duì)應(yīng)的信號(hào)通道,然后再根據(jù)時(shí)間對(duì)該通道進(jìn)行預(yù)定的延時(shí),恢復(fù)先前調(diào)整好的延時(shí)信號(hào)。在模塊運(yùn)行期間,P89C51RD2實(shí)時(shí)監(jiān)測(cè)、接收來自上位PC機(jī)發(fā)送的新延時(shí)數(shù)據(jù)。如果需要對(duì)某一路信號(hào)的延時(shí)量進(jìn)行調(diào)節(jié),通過PC機(jī)的串口發(fā)新數(shù)據(jù),P89C51RD2中斷收到新數(shù)據(jù)后,將數(shù)據(jù)分成兩路處理:一路進(jìn)入到單片機(jī)的數(shù)據(jù)存儲(chǔ)區(qū),待下次上電讀取使用;另一路則轉(zhuǎn)發(fā)至由FPGA控制的延時(shí)控制,實(shí)現(xiàn)信號(hào)的延遲時(shí)間調(diào)整。
塊使用的P89C51RD2是PHILIPS公司內(nèi)核基于8 位80C51單片機(jī)的派生產(chǎn)品,它們?cè)谕耆A?0C51 指令系統(tǒng)和硬件結(jié)構(gòu)的大框架外,還具有多方面的功能加強(qiáng)、擴(kuò)展、翻新和創(chuàng)新,其中在應(yīng)用中編程(IAP:In-Application Programming)是最顯著特點(diǎn)之一。在應(yīng)用中可編程是指MCU可以在系統(tǒng)中獲取新代碼并對(duì)自己重新編程,即用程序來改變程序。P89C51RD2的IAP功能實(shí)現(xiàn)是通過PHILIPS 公司提供的BootROM 固件來完成的,它位于0FC00H?0FFFFH空間,與閃存空間重疊(見圖2)。固件中已經(jīng)固化有擦除和編程等子程序,PHILIPS 公司提供了尋址該固件的方法,只要用戶程序簡(jiǎn)單調(diào)用BootROM中帶適當(dāng)參數(shù)的公共入口,即可實(shí)現(xiàn)所需要的操作。
P89C51RD2閃存結(jié)構(gòu)見圖2,它具有如下特點(diǎn):
1. 其閃存空間是分塊的64kB的閃存空間,共分5塊,由低到高分別為8kB(BLOCK0)、8kB(BLOCK1)、16kB(BLOCK2)、16kB(BLOCK3)以及16kB( BLOCK4);
2. 每一塊都可以單獨(dú)擦除;
3. 在程序中可以調(diào)用IAP功能對(duì)閃存中的每一字節(jié)進(jìn)行單獨(dú)編程。
正是由于上述三個(gè)特點(diǎn),在不外擴(kuò)展存儲(chǔ)器情況下,將程序空間剩余下的閃存空間作為數(shù)據(jù)空間,把單片機(jī)接收中斷采集到的信號(hào)通道、延遲時(shí)間等參數(shù)存儲(chǔ)下來,實(shí)現(xiàn)掉電數(shù)據(jù)保存。
軟件設(shè)計(jì)
整個(gè)延時(shí)模塊的軟件包括了PC機(jī)發(fā)送參數(shù)程序,單片機(jī)接收并存儲(chǔ)參數(shù)程序和FPGA信號(hào)延時(shí)處理程序。
PC機(jī)發(fā)送參數(shù)程序是用戶將PC機(jī)的串口與模塊連接,通過PC機(jī)的發(fā)送程序界面,很容易對(duì)信號(hào)進(jìn)行延時(shí)調(diào)整。發(fā)送程序采用VC作為編程語言,調(diào)用串口控件,設(shè)計(jì)方便且界面簡(jiǎn)潔,界面如圖3所示。發(fā)送的每個(gè)數(shù)據(jù)幀8位,包括延遲時(shí)間和信號(hào)通道兩個(gè)參數(shù),其中高三位是要調(diào)整的信號(hào)通道,后五位表示延遲的時(shí)間。發(fā)送程序中,對(duì)界面中的“+”或“?”進(jìn)行一次操作,PC就通過串口向單片機(jī)連續(xù)發(fā)送8路信號(hào)延時(shí)參數(shù),即只要調(diào)節(jié)了任一路信號(hào)的延時(shí),PC機(jī)就會(huì)連續(xù)發(fā)送8個(gè)數(shù)據(jù)幀。
單片機(jī)軟件設(shè)計(jì)
單片機(jī)主要完成與PC之間的通信,數(shù)據(jù)的存儲(chǔ)和上電數(shù)據(jù)的讀取。程序采用C51編寫,編譯采用當(dāng)前編譯效率最高的C51編譯器KEIL。軟件流程圖見圖4。
在P89C51RD2的64k閃存空間中,地址為0000H-7FFFH的32kB閃存空間作為程序空間,整個(gè)單片機(jī)程序編譯后為15k,所以32k的程序空間足夠大。余下的8000H?FFFFH的32kB 閃存空間留作數(shù)據(jù)存儲(chǔ)空間。兩塊數(shù)據(jù)存儲(chǔ)空間輪流使用,當(dāng)數(shù)據(jù)量存滿其中一塊時(shí)通過程序跳轉(zhuǎn)到另一塊,在使用前先將該塊擦除。
各函數(shù)介紹如下:
main()——主程序;
InitUart(void)——串口初始化;
IapInit(void)——IAP功能初始化,使用IAP功能前必調(diào)用;
PowerOnRead(void)——上電讀取最近一次存儲(chǔ)的參數(shù)。模塊對(duì)上電時(shí)間要求不苛刻,最新數(shù)據(jù)的地址可通過查表方式尋找。每一個(gè)數(shù)據(jù)幀占一個(gè)數(shù)據(jù)存儲(chǔ)空間,由于單片機(jī)每次中斷都接收到8個(gè)數(shù)據(jù)幀,所以將每8個(gè)數(shù)據(jù)存儲(chǔ)空間劃分成一組,這樣只要查詢每組的頭一個(gè)地址就能快捷地完成查詢,大大節(jié)省了查詢時(shí)間。
EraseBlock (uint AddressRestore)——判斷當(dāng)前數(shù)據(jù)存儲(chǔ)空間塊滿,并擦除;
RestoreData(void)——數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)存儲(chǔ)空間;
FPGADataUp(uchar DataRec)——更新FPGA接口數(shù)據(jù)。
在程序中,要多次調(diào)用BootROM固件中的子程序。由于IAP子程序接口是匯編語言,為了編寫方便,同時(shí)使程序框架明了,編寫了一個(gè)IAPLIB.A51匯編語言接口函數(shù)庫和IAPLIB.H頭文件。在程序中加上IAP.H頭文件,調(diào)用固件程序時(shí)就不需在C51程序中嵌入?yún)R編,而是像調(diào)用C語言函數(shù)一樣簡(jiǎn)單,這大大簡(jiǎn)化了編程。
FPGA設(shè)計(jì)
FPGA主要設(shè)計(jì)了DECODE延時(shí)通道譯碼器、CS片選信號(hào)控制器、N階SHIFTER移位寄存器。其中譯碼器用于完成對(duì)單片機(jī)并口送來的數(shù)據(jù)進(jìn)行通道、時(shí)間參數(shù)的分離,用通道參數(shù)進(jìn)行尋址和譯碼,這是一種簡(jiǎn)單的譯碼邏輯和觸發(fā)電路。N階移位寄存器用于完成對(duì)信號(hào)進(jìn)行N階的延時(shí)處理,是延時(shí)處理的核心單元。單路信號(hào)延時(shí)調(diào)節(jié)的基本框圖見圖5。
延時(shí)通道譯碼器將單片機(jī)并口送來的延時(shí)參數(shù)送入鎖存器,同時(shí)輸出控制電路將移位寄存器對(duì)應(yīng)的延時(shí)階切換到輸出端。從不同的階引出信號(hào)即可獲得不同的延時(shí)量??刂茣r(shí)鐘和移位寄存器的階數(shù)決定了延時(shí)步進(jìn)調(diào)節(jié)精度和延時(shí)調(diào)節(jié)范圍。如果定時(shí)模塊有N個(gè)信號(hào)通道,每個(gè)定時(shí)模塊集成N個(gè)完全相同的延時(shí)調(diào)節(jié)單元,就可實(shí)現(xiàn)獨(dú)立調(diào)節(jié)各個(gè)通道信號(hào)延時(shí)大小的功能。集成的延時(shí)調(diào)節(jié)單元越多,占用可編程芯片的資源就越多,這可以根據(jù)實(shí)際需要選擇可編程邏輯器件。
FPAG軟件的設(shè)計(jì)采用“自頂向下”、“軟硬兼施”的設(shè)計(jì)方法,主要的各單元設(shè)計(jì)采用VHDL語言描述完成,而整個(gè)多路信號(hào)的延時(shí)功能處理采用圖形輸入設(shè)計(jì)方法。軟件設(shè)計(jì)完成后,根據(jù)電路原理圖進(jìn)行引腳鎖定,然后啟動(dòng)編譯程序來編譯項(xiàng)目。編譯器將進(jìn)行錯(cuò)誤檢查、網(wǎng)表提取、邏輯綜合和器件適配,然后進(jìn)行行為仿真、功能仿真和時(shí)序仿真。最后通過編程器方式將POF文件下載到EPROM中。加電后,F(xiàn)PGA將EPROM中數(shù)據(jù)讀入片內(nèi)編程RAM中,完成配置,從而生成硬件電路。
模塊功能調(diào)試實(shí)現(xiàn)
模塊在調(diào)試中出現(xiàn)P89C51RD2有時(shí)上電程序運(yùn)行不正常,讀取程序空間是空的。但是只要上電工作起來,就恢復(fù)正常。懷疑由于上電復(fù)位時(shí)序混亂,造成誤調(diào)用固件擦除芯片子程序。采用專用復(fù)位芯片替換電容電阻加二極管的復(fù)位電路,使問題得到了解決。同樣,在單片機(jī)正確送數(shù)情況下,F(xiàn)PGA上電出現(xiàn)不能正常恢復(fù)預(yù)設(shè)好的延時(shí)信號(hào),信號(hào)總是零延遲(第一次上電,單片機(jī)數(shù)據(jù)存儲(chǔ)空間內(nèi)沒有數(shù)據(jù),信號(hào)就處于零延時(shí)狀態(tài)),但在工作狀態(tài)下,能夠很好地實(shí)現(xiàn)延時(shí)調(diào)節(jié)。懷疑這種情況是因存在復(fù)位問題而導(dǎo)致,但專用復(fù)位芯片不能解決問題。經(jīng)多次檢查程序,發(fā)現(xiàn)硬件語言程序中觸發(fā)語句是電平觸發(fā),改寫為脈沖上升觸發(fā)后問題得以解決。
結(jié)束語
采用單片機(jī)和FPGA設(shè)計(jì)的延時(shí)調(diào)節(jié)模塊,硬件結(jié)構(gòu)簡(jiǎn)單,設(shè)計(jì)集成度高。軟件方面,單片機(jī)程序?qū)語言和匯編語言很好地結(jié)合,F(xiàn)PGA充分發(fā)揮了硬件語言易改變電路結(jié)構(gòu)和算法的優(yōu)越性。提高FPGA中移位寄存器的時(shí)鐘頻率,同時(shí)相應(yīng)增加移位寄存器程序輸出階數(shù),可實(shí)現(xiàn)更高精度的延時(shí)步進(jìn)調(diào)節(jié)和增大延時(shí)調(diào)節(jié)范圍。因此可以在不改變模塊硬件結(jié)構(gòu)基礎(chǔ)的上,通過軟件升級(jí)來提高模塊的性能,從而擴(kuò)大模塊的應(yīng)用領(lǐng)域。
評(píng)論