CPLD在多路高速同步數(shù)據(jù)采集系統(tǒng)中的應(yīng)用
掃描二維碼
隨時隨地手機看文章
關(guān)鍵詞:VHDL CPLD 高速同步數(shù)/模轉(zhuǎn)換 容錯和自檢 并行接口 移植性
引言
CPLD(Complex Programmable Logic Device,復(fù)雜可編程邏輯器件)是在傳統(tǒng)的PAL、GAL基礎(chǔ)上發(fā)展而來的,具有多種工作方式和高集成、高速、高可靠性等明顯的特點,在超高速領(lǐng)域和實時測控方面有非常廣泛的應(yīng)用。與FPGA相比,CPLD比較適合計算機總線控制、地址譯碼、復(fù)雜狀態(tài)機、定時/計數(shù)器、存儲控制器等I/O密集型應(yīng)用,且無須外部配置ROM、時延可預(yù)測等。目前的CPLD普遍基于E2PROM和Flash電可擦技術(shù),可實現(xiàn)100次以上擦寫循環(huán)。部分CPLD支持ISP編程或者配置有JTAG口,對于批量小、品種多的模板開發(fā)極為有利。而用VHDL設(shè)計的程序,借助EDA工具可以行為仿真、功能仿真和時序仿真,最后通過綜合工具產(chǎn)生網(wǎng)表,下載到目標器件,從而生成硬件電路。
1 系統(tǒng)設(shè)計原理及框圖
以Altera公司7000S系列CPLD產(chǎn)品之一EPM7128S-10為控制核心,控制模/數(shù)轉(zhuǎn)換電路,最多可完成32路模擬數(shù)據(jù)的16位高速同步A/D轉(zhuǎn)換。
圖1為與A/D轉(zhuǎn)換電路相關(guān)的系統(tǒng)外圍電路框圖。外部32路模擬輸入通過調(diào)理電路后,CPLD控制多路切換器選通某一路信號送入A/D轉(zhuǎn)換器(AD676)進行A/D轉(zhuǎn)換,轉(zhuǎn)換結(jié)果經(jīng)過數(shù)據(jù)緩沖在合適的時候通過總線被讀入處理器。一般的設(shè)計思路如下:①主處理器直接控制A/D轉(zhuǎn)換電路,完成模擬輸入信號的采集保持、A/D轉(zhuǎn)換器的控制、通道的切換、數(shù)據(jù)的讀取以及控制注入信號完成模擬通道的自檢等。這種解決方案占用主處理器大量的I/O資源和處理時間,在高速采集與大計算量的時實系統(tǒng)中是不可取的:一方面因為處理器的I/O資源極其有限,同時又要求大量的匯編軟件配合,不利于設(shè)計的移植;另一方面由于頻繁地執(zhí)行I/O操作完成相對定時關(guān)系,來實現(xiàn)高速數(shù)據(jù)采集,不利于系統(tǒng)調(diào)度軟件的設(shè)計的其它軟件模塊的時實執(zhí)行,由于此段I/O操作類似于原子操作,很難解決其它模塊響應(yīng)時間可能較長的矛盾。②采用其它廉價的從處理器,如MCS-51單片機來控制上述過程,使之與主處理器并行化。但此時從處理器與主處理器之間的高速數(shù)據(jù)實時交換就成為瓶頸,而且由于MCS-51單片機亦為軟件化流程控制,存在跑飛的可能,兩處理器的同步又成為新的問題。應(yīng)用CPLD器件就可以很好地解決上述矛盾,實現(xiàn)配置隨意可改寫和高速硬件流控制等。隨著ISP器件的發(fā)展,CPLD已經(jīng)日益廣泛地應(yīng)用到高速數(shù)據(jù)采集系統(tǒng)中,但都是很考慮設(shè)計本身的容錯、自檢能力和使用的靈活性,不利于故障的定位和嵌入式應(yīng)用的移植。本設(shè)計中采用CPLD作為A/D轉(zhuǎn)換電路的控制器,和主處理器并行交互數(shù)據(jù),很好地解決了上述矛盾。
為突出重點,EPM7128S、AD676、LF398等器件的簡介此處不作介紹,僅列出AD676的控制時序,如圖2所示。
圖2
多路模擬信號的同步采樣一般有兩種實現(xiàn)方法:一種為多個A/D轉(zhuǎn)換器同時進行轉(zhuǎn)換;另一種為僅有一個A/D轉(zhuǎn)換器,各通道同時采樣,然后分時轉(zhuǎn)換??紤]到16位高速A/D轉(zhuǎn)換器AD676的價格因素,采用后一種方案。AD676有三個控制信號:SAMPLE、AD-CLK、CAL。它們需要一定的時序配合才能正常工作,如圖2所示。由于AD676的轉(zhuǎn)換結(jié)果不具備三態(tài)輸出功能,所以需增加74F574和總線進行隔離,為此配置控制信號WRAD、RDAD;同時要考慮到32路模擬信號的采樣保持控制S/H、多路切換器的控制信號M1A4~M1A0,以及輸入模擬信號選擇M0A1~M1A0、數(shù)據(jù)準備好信號INT1等共14個。CPLD和處理器采用并行接口,因此其輸入信號有:系統(tǒng)復(fù)位信號RST、處理器的讀/寫信號RD/WR、片選信號IOSTROBE、外部時鐘輸入CLK、輔助地址信號A20~A17和A5~A0、AD676的反饋輸入BUSY,共22個輸入。外加雙向數(shù)據(jù)總線D07~D00。設(shè)計中沒有將總線隔離器74F574集成到CPLD中,主要考慮到保留適當?shù)腎/O等資源用于系統(tǒng)的地址譯碼和其它輔助功能。地址譯碼等輔助模塊比較簡單且與特定的處理器相關(guān),故此處不作介紹。
雖然有復(fù)位默認值,但CPLD為靈活控制多路模擬量的同步A/D轉(zhuǎn)換,要求處理器正確設(shè)置兩個控制參數(shù),即進行數(shù)/模轉(zhuǎn)換的模擬量通道的總個數(shù)SUM和數(shù)/模轉(zhuǎn)換的初始通道號chan;然后再對CPLD寫入啟動A/D轉(zhuǎn)換命令,這樣CPLD即可脫離處理器,控制A/D轉(zhuǎn)換電路。CPLD首先按照LF398的時序要求產(chǎn)生其所需的采樣保持信號S/H完成32路模擬量的同步采樣,然后按照圖2所示的通常轉(zhuǎn)換時序控制AD676去完成一次轉(zhuǎn)換。一旦該次轉(zhuǎn)換完成,使能WRAD信號,鎖存轉(zhuǎn)換結(jié)果到74F574,并發(fā)出數(shù)據(jù)準備好信號INT1,同時標識內(nèi)部狀態(tài)信號,作為中斷請求通知處理器,或者供處理器查詢狀態(tài)。CPLD將一直等待處理器將該次轉(zhuǎn)換結(jié)果取走才取消此標示信號。在CPLD等待的過程中,處理器亦可命令CPLD提前結(jié)束轉(zhuǎn)換,以適應(yīng)不同的應(yīng)用要求。轉(zhuǎn)換結(jié)果取走后,CPLD清除內(nèi)部的標識信號和數(shù)據(jù)準備好信號,SUM的映像減1,若不為0,chan的映像加1,輸出到M1A[4..0]去切換至下一通道,繼續(xù)按照圖2所示的通常轉(zhuǎn)換時序工作;若為0,則該次采樣轉(zhuǎn)換完成,等待處理器的下一次啟動信號。這樣,只占用了處理器的一個中斷請求資源和少數(shù)外部空間,就實現(xiàn)了最多至32路模擬信號的同步高速數(shù)模轉(zhuǎn)換。為使設(shè)計具有一定的容錯功能,在A/D轉(zhuǎn)換器空閑時,處理器才可以啟動A/D自校準測試,但此時CPLD應(yīng)該防止處理器誤啟動A/D轉(zhuǎn)換。當A/D轉(zhuǎn)換器空閑或者A/D自校準已經(jīng)結(jié)束時,處理器才可以進行A/D轉(zhuǎn)換工作。同樣,此時CPLD應(yīng)該防止處理器誤啟動A/D自校準。為使CPLD能支持處理器的檢錯功能3,應(yīng)該使CPLD以及A/D轉(zhuǎn)換器的狀態(tài)信息可以被處理器隨時讀取,以便在系統(tǒng)級上定位故障。同時,CPLD可以選擇調(diào)理電路的模擬輸入信號源,便于處理器檢測調(diào)理電路。
圖3
為達到以上的功能,在設(shè)計中主要設(shè)置了四大功能模塊,分別為時鐘分頻模塊、控制譯碼模塊、總線接口模塊、狀態(tài)機模塊,設(shè)計原理如釁3所示。時鐘分頻模塊用于產(chǎn)生AD767的轉(zhuǎn)換時鐘。為簡化設(shè)計,達到高速和簡化的目的,此模塊的分頻系數(shù)由設(shè)計固化??刂菩盘栕g碼模塊用于完成處理器對CPLD片內(nèi)模塊的尋址和譯碼,為一簡單譯碼邏輯和觸發(fā)電路??偩€接口模塊用于完成處理器和A/D轉(zhuǎn)換控制器的數(shù)據(jù)交換;同時完成AD767的自校準信號CAL的控制,如圖2所示的自校準時序。需要注意一點的是,在自校準的過程中,SAMPLE信號必須保持低電平,否則出錯。狀態(tài)機模塊用于產(chǎn)生A/D轉(zhuǎn)換的時序,如圖2所示的通常轉(zhuǎn)換時序。在轉(zhuǎn)換的過程中,CAL信號必須保持低電平,否則出錯;狀態(tài)機模塊同時完成對多路切換器的控制。圖2所示的各信號的相對定時關(guān)系此處不作說明,請查閱AD676的數(shù)據(jù)手冊。
為達到圖2所示SAMPLE、CAL時序的相互閉鎖關(guān)系,從狀態(tài)機模塊引出其內(nèi)部狀態(tài)信號到總線接口模塊,一方面,狀態(tài)機的狀態(tài)可以隨時被處理器感知;另一方面用于閉鎖CAL信號,即閉鎖自校準。詳細地說,就是在A/D轉(zhuǎn)換期間,在圖2所示的通常轉(zhuǎn)換時序中,從SAMPLE變高到BUSY信號再次變低以前,即使處理器再次寫入了啟動自校準命令,CPLD亦閉鎖CAL信號的產(chǎn)生。為便于安全啟動CAL信號,在本次轉(zhuǎn)換完成或全部轉(zhuǎn)換完成時,滿足一定的相對時序即可啟動。同理,將總線接口模塊內(nèi)控制CAL信號的狀態(tài)機的狀態(tài)引入狀態(tài)機模塊,用于在自校準期間,閉鎖SAMPLE信號的產(chǎn)生,即閉鎖處理器啟動A/D轉(zhuǎn)換的命令。這樣,A/D轉(zhuǎn)換控制器就具有很好的容錯能力。無論何時,處理器都可以通過讀取SAMPLE、CAL、BUSY、中斷請求、狀態(tài)機的狀態(tài),來監(jiān)測CPLD、AD676等的工作和判斷損壞與否。通過處理器的配合就使CPLD支持系統(tǒng)的在線自檢,解決了以往類似設(shè)計中存在錯誤而處理器又無法進行故障定位的問題。
圖4
2 系統(tǒng)仿真和驗證
以上設(shè)計用VHDL語言描述完成后,首先在ACTIVE-HDL5.1環(huán)境下進行編譯、綜合、適配后再時序仿真;但這只是純邏輯驗證,此時時序仿真圖中沒有包含任何硬件延遲信息。結(jié)果正確后,在MAX+PLUSII 10.0環(huán)境下進行編譯、綜合、適配后,再進行時序仿真驗證。由于考慮了硬件因素,選擇MAX7000S系列的EPM7128STC100-10器件后,該器件的擺率位Turbo bit必須選中,否則在高速時鐘輸入時,MAXPLUS的仿真結(jié)果不正確。圖4即為在MAXPLUS下的時序仿真結(jié)果,模擬40 MHz的CPLD時鐘輸入和主處理器50ns的外部存儲器訪問周期,可以達到AD676的最快轉(zhuǎn)換速度。實際電路也驗證了這一點。
考慮到CPLD也完成系統(tǒng)的一部分譯碼功能,此時,MAXPLUS所產(chǎn)生的報告文件表明資源利用情況,如表1所列。在文章的最后詳細給出了狀態(tài)機模塊的時序電路的VHDL設(shè)計程序。
表1
邏輯陣列塊 | 邏輯單元 | I/O引腳 | 共享擴展項 | 外部互連 |
A:LC1-LC16 | 8/16(50%) | 10/10(100%) | 8/16(50%) | 27/36(75%) |
B:LC17-LC32 | 16/16(100%) | 10/10(100%) | 15/16(93%) | 23/36(63%) |
C:LC33-LC48 | 16/16(100%) | 8/10(80%) | 14/16(87%) | 21/36(58%) |
D:LC49-LC64 | 15/16(93%) | 7/10(70%) | 6/16(37%) | 29/36(80%) |
E:LC65-LC80 | 16/16(100%) | 0/10(0%) | 0/16(0%) | 23/36(63%) |
F:LC81-LC9 | 16/16(100%) | 10/10(100%) | 16/16(100%) | 31/36(86%) |
G:LC97-LC112 | 15/16(93%) | 9/10(90%) | 5/16(31%) | 28/36(77%) |
H:LC113-LC128 | 16/16(100%) | 8/10(80%) | 6/16(37%) | 29/36(80%) |
使用的專用輸入引腳 | 1/14(25%) | |||
使用的I/O引腳 | 62/80(77%) | |||
使用的邏輯單元 | 118/128(92%) | |||
使用的共計擴展項 | 52/128(0%) | |||
… | … |
最后,通過EPM7128STC100-10(40MHz)的JTAG口,在MAX+PLUSII 10.0環(huán)境下,下載到器件中,在TMS320C32(40MHz)和MC68332(16.78MHz)兩種CPU構(gòu)成的數(shù)據(jù)采集系統(tǒng)中得到了驗證。由于A/D轉(zhuǎn)換控制器與處理器采用并行接口,極大地減輕了CPU的負荷,解決了CPU的I/O資源嚴重不足的矛盾,提高了硬件電路的集成性、可靠性及保密性,可以很方便地移植到多種處理器,具有一定的實用性。
狀態(tài)機模塊的時序電路VHDL設(shè)計程序見網(wǎng)站(http://www.dpj.com.cn)。