基于CPLD的數(shù)據(jù)采集與顯示接口電路仿真設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:常規(guī)數(shù)據(jù)采集與顯示方法是應(yīng)用CPU或DSP通過(guò)軟件控制數(shù)據(jù)采集的模/數(shù)轉(zhuǎn)換,這樣將會(huì)頻繁中斷系統(tǒng)的運(yùn)行,從而降低系統(tǒng)的運(yùn)算速度,數(shù)據(jù)采集的速度也將受到限制。通過(guò)CPLD實(shí)現(xiàn)由硬件控制模/數(shù)轉(zhuǎn)換和數(shù)據(jù)顯示,最大限度地提高系統(tǒng)的信號(hào)采集和處理能力。這里運(yùn)用VHDL硬件編程語(yǔ)言,通過(guò)狀態(tài)機(jī)設(shè)計(jì)程序,完成A/D轉(zhuǎn)換芯片與可編程邏輯芯片的接口。將A/D轉(zhuǎn)換結(jié)果以BCD碼形式通過(guò)CPLD芯片進(jìn)行顯示,實(shí)時(shí)觀測(cè)轉(zhuǎn)換進(jìn)程,給出了BCD碼轉(zhuǎn)換流程圖,完成相應(yīng)電路設(shè)計(jì),通過(guò)QuartusII軟件進(jìn)行仿真,并在開(kāi)發(fā)系統(tǒng)上成功實(shí)現(xiàn)功能驗(yàn)證,提高了系統(tǒng)的運(yùn)算速度。
關(guān)鍵詞:可編程邏輯器件;模數(shù)轉(zhuǎn)換;二-十進(jìn)制碼顯示;接口電路
0 引 言
CPLD稱為復(fù)雜可編程邏輯設(shè)計(jì)芯片,它是大規(guī)模可編程器件,具有高集成度、高可靠性、高速度的特點(diǎn)。CPLD是利用EDA技術(shù)進(jìn)行電子系統(tǒng)設(shè)計(jì)的載體。硬件描述語(yǔ)言是EDA技術(shù)進(jìn)行電子系統(tǒng)設(shè)計(jì)的主要表達(dá)手段,VHDL語(yǔ)言是常用的硬件描述語(yǔ)言之一;軟件開(kāi)發(fā)工具是利用EDA技術(shù)進(jìn)行電子系統(tǒng)設(shè)計(jì)的智能化的自動(dòng)化設(shè)計(jì)工具,常用開(kāi)發(fā)工具有QuartusII,Ispexpert,F(xiàn)oundation等。CPLD以高速、高可靠性、串并行工作方式等特點(diǎn)在電子設(shè)計(jì)中廣泛應(yīng)用。它打破了軟硬件之間的界限,加速了產(chǎn)品的開(kāi)發(fā)過(guò)程。同樣單片機(jī)具有性價(jià)比高、功能靈活、良好的數(shù)據(jù)處理能力等特點(diǎn)。CPLD芯片與單片機(jī)結(jié)合在高性能儀器儀表中應(yīng)用廣泛。
1 電路的仿真設(shè)計(jì)
1.1 硬件電路功能
用一片MCS-51芯片、一片CPLD/FPGA芯片、模/數(shù)轉(zhuǎn)換器ADC0809和數(shù)/模轉(zhuǎn)換器DAC0832構(gòu)成一個(gè)數(shù)據(jù)采集系統(tǒng),并用CPLD/FPGA實(shí)現(xiàn)數(shù)據(jù)采樣、D/A轉(zhuǎn)換輸出、有關(guān)數(shù)據(jù)顯示的控制,單片機(jī)完成對(duì)A/D轉(zhuǎn)換數(shù)據(jù)運(yùn)算。電路如圖1所示。
系統(tǒng)功能如下:系統(tǒng)按一定速率采集輸入電壓Ui,經(jīng)AD0809轉(zhuǎn)換為8位數(shù)字量data;輸入數(shù)據(jù)與通過(guò)CPLD/FPGA采樣后輸入單片機(jī)進(jìn)行相關(guān)運(yùn)算,最后通過(guò)CPLD/FPGA送至DAC0832轉(zhuǎn)換為△U;數(shù)據(jù)采集和處理均在數(shù)據(jù)采集系統(tǒng)控制器的管理下有序進(jìn)行。工作速率由時(shí)鐘信號(hào)CLK的速率決定。
1.2 單片機(jī)與CPLD/FPGA接口設(shè)計(jì)
單片機(jī)采用以總線方式與可編程芯片進(jìn)行數(shù)據(jù)與控制信息通信,此方式有許多優(yōu)點(diǎn):
(1)速度快。其通信工作時(shí)序是純硬件行為,對(duì)于MCS-51單片機(jī)只需一條單字節(jié)指令就能完成所需的讀/寫時(shí)序如MOV@DPTR A和MOVA@DPTR。
(2)節(jié)省CPLD芯片的I/O口線。如果將圖中的譯碼器設(shè)置足夠的譯碼輸出以及安排足夠的鎖存器就能僅通過(guò)19根I/O口線在FPGA/CPLD與單片機(jī)之間進(jìn)行各種類型的數(shù)據(jù)與控制信息交換。
(3)相對(duì)于非總線方式單片機(jī)的編程簡(jiǎn)捷控制可靠。
(4)在FPGA/CPLD中通過(guò)邏輯切換單片機(jī)易于與SRAM或ROM接口。這種方式首先由FPGA/CPLD與接口的高速A/D等器件進(jìn)行高速數(shù)據(jù)采樣并將數(shù)據(jù)暫存于SRAM中。采樣結(jié)束后通過(guò)切換使單片機(jī)與SRAM以總線方式進(jìn)行數(shù)據(jù)通信以便發(fā)揮單片機(jī)強(qiáng)大的數(shù)據(jù)處理能力。
系統(tǒng)工作過(guò)程如下:ALE為地址鎖存使能信號(hào),當(dāng)下降沿來(lái)時(shí),將P0口將低8位地址送入可編程芯片CPLD/FPGA中的地址鎖存器,然后在P2口和P0口形成的16位地址及WR信號(hào)共同作用下,將P0口的數(shù)據(jù)送入可編程芯片。單片機(jī)通過(guò)兩條指令MOVXDPTR@ ADDR和MOVX @DPTR A將數(shù)據(jù)寫入芯片。在P2口和P0口形成的16位地址及RD信號(hào)共同作用下,將AD0809轉(zhuǎn)換后數(shù)據(jù)data送入單片機(jī)的P0口。單片機(jī)通過(guò)兩條指令 MOVX DPTR @ADDR和MOVXA@ DPTR將數(shù)據(jù)讀入P0口。設(shè)置A/D轉(zhuǎn)換器件片選信號(hào)ad_e和DA轉(zhuǎn)換器件片選信號(hào)da_e,設(shè)置數(shù)據(jù)輸入/輸出口data[7..0]。單片機(jī)與FPGA通信接口程序(名為MCS51)通過(guò)編譯后,生成的邏輯符號(hào)如圖2所示。
CPLD使用EPM7128時(shí)鐘為16 MHz有源晶振,首先使用CLK對(duì)復(fù)位信號(hào)采樣,8051的復(fù)位信號(hào)要求是高電平維持2個(gè)機(jī)器周期,2個(gè)機(jī)器周期就是2×12=24個(gè)振蕩周期,對(duì)復(fù)位信號(hào)連續(xù)采樣10次,若是一直為高電平,就產(chǎn)生片內(nèi)復(fù)位使能信號(hào)。其他片內(nèi)寄存器以這個(gè)復(fù)位信號(hào)做同步復(fù)位,對(duì)WR.RD,ALE都做了采樣,避免毛刺干擾。
1.3 AD0809與CPLD/FPGA狀態(tài)機(jī)接口設(shè)計(jì)
1.3.1 AD0809狀態(tài)機(jī)功能設(shè)計(jì)
狀態(tài)機(jī)的最簡(jiǎn)結(jié)構(gòu)一般由兩個(gè)進(jìn)程構(gòu)成,即主控時(shí)序進(jìn)程和主控組合進(jìn)程。一個(gè)進(jìn)程描述時(shí)序邏輯輸出,另一個(gè)進(jìn)程描述組合邏輯包括進(jìn)程問(wèn)狀態(tài)值的傳遞邏輯以及狀態(tài)轉(zhuǎn)換值的輸出。將AD0809與CPLD/FPGA的接口設(shè)計(jì)系統(tǒng)劃分為兩部分,即數(shù)據(jù)單元和控制單元。數(shù)據(jù)單元包括保存運(yùn)算數(shù)據(jù)和運(yùn)算結(jié)果的數(shù)據(jù)寄存器,也包括完成數(shù)據(jù)運(yùn)算的組合邏輯電路。控制單元用來(lái)產(chǎn)生信號(hào)序列,以決定何時(shí)進(jìn)行何種數(shù)據(jù)運(yùn)算,控制單元要從數(shù)據(jù)單元得到條件信號(hào),以決定繼續(xù)進(jìn)行那些數(shù)據(jù)運(yùn)算。數(shù)據(jù)單元要產(chǎn)生輸出信號(hào)、數(shù)據(jù)運(yùn)算狀態(tài)等有用信號(hào)。數(shù)據(jù)單元和控制單元中,有兩個(gè)非常重要的信號(hào),即復(fù)位信號(hào)和時(shí)鐘信號(hào)。復(fù)位信號(hào)保證了系統(tǒng)初始狀態(tài)的確定性,時(shí)鐘信號(hào)則是時(shí)序系統(tǒng)工作的必要條件。狀態(tài)機(jī)通常在復(fù)位信號(hào)到來(lái)的時(shí)候恢復(fù)到初始狀態(tài),每個(gè)時(shí)鐘到來(lái)的時(shí)候內(nèi)部狀態(tài)發(fā)生變化。從AD0809的初始狀態(tài)開(kāi)始,也就是狀態(tài)機(jī)復(fù)位以后開(kāi)始的狀態(tài)。在建立每個(gè)狀態(tài)時(shí)都寫出關(guān)于這個(gè)狀態(tài)的文字功能描述,AD0809狀態(tài)機(jī)功能描述與相應(yīng)引腳的取值如下:
1. 3.2 ADC0809狀態(tài)機(jī)程序設(shè)計(jì)
ADC0809為單極性輸入,8位轉(zhuǎn)換精度逐次逼進(jìn)式A/D轉(zhuǎn)換器。其采樣速度為每次轉(zhuǎn)換約100μs。在轉(zhuǎn)換開(kāi)始前由地址鎖存允許信號(hào)ALE將3位地址鎖入鎖存器中以確定轉(zhuǎn)換信號(hào)通道。EOC為轉(zhuǎn)換結(jié)束狀態(tài)信號(hào),由低電平轉(zhuǎn)為高電平時(shí)指示轉(zhuǎn)換結(jié)束,此時(shí)可讀人轉(zhuǎn)換好的8位數(shù)據(jù)。EOC在低電平時(shí)指示正在進(jìn)行轉(zhuǎn)換。START為轉(zhuǎn)換啟動(dòng)信號(hào),上升沿啟動(dòng)。OE為數(shù)據(jù)輸出允許高電平有效。CLK為ADC轉(zhuǎn)換時(shí)鐘輸入端口500 kHz左右。為了達(dá)到A/D器件的最高轉(zhuǎn)換速度,A/D轉(zhuǎn)換控制器必須包含監(jiān)測(cè)EOC信號(hào)的邏輯,一旦EOC從低電平變?yōu)楦唠娖郊纯蓪E置為高電平,然后傳送或顯示已轉(zhuǎn)換好的數(shù)據(jù)[DO..D7]。狀態(tài)機(jī)由三個(gè)進(jìn)程組成ADC,AD_STATE和DATA_LOCK。ADC是此狀態(tài)機(jī)的主控組合邏輯進(jìn)程,確定狀態(tài)的轉(zhuǎn)換方式和反饋控制信號(hào)的輸出工作過(guò)程中首先監(jiān)測(cè)系統(tǒng)復(fù)位信號(hào)RST,當(dāng)其為高電平時(shí)使此進(jìn)程復(fù)位至初始態(tài)ST0。啟動(dòng)A/D轉(zhuǎn)換信號(hào)START在狀態(tài)ST3搜索轉(zhuǎn)換狀態(tài)信號(hào)EOC由0變1時(shí)即在狀態(tài)ST4開(kāi)啟輸出。使能信號(hào)OE在下一狀態(tài)使LOCK產(chǎn)生一個(gè)上跳沿從而在此時(shí)啟動(dòng)進(jìn)程DATA_LOCK將由0809轉(zhuǎn)換好的8位數(shù)據(jù)鎖進(jìn)鎖存器ADC_DATA。根據(jù)時(shí)序電路圖通過(guò)狀態(tài)機(jī)設(shè)計(jì)程序完成與CPLD/FPGA芯片的連接。圖3為狀態(tài)機(jī)程序仿真結(jié)果。
1.4 BCD碼轉(zhuǎn)換與顯示電路設(shè)計(jì)
當(dāng)ADC0809的基準(zhǔn)電壓(Vref)為5.12V時(shí),最小電壓準(zhǔn)位是5.12/28=O.2V。分析模擬輸入電壓與輸出電壓的對(duì)應(yīng)關(guān)系可知,當(dāng)ADC0809的D[7..0]收到的數(shù)據(jù)信號(hào)為10000110(即86H)時(shí),則高4位1000為2.56V,而低4位0110為O.12V,所以最后的電壓輸出結(jié)果是2.68V。為了方便后續(xù)的電壓數(shù)據(jù)顯示,在此將輸出電壓表示成12位的BCD碼形式。將高4位數(shù)據(jù)D(7..4)轉(zhuǎn)換為對(duì)應(yīng)的高12位BCD碼H(11..0);將低4位數(shù)據(jù)D(3..0)轉(zhuǎn)換為對(duì)應(yīng)的低12位BCD碼L(11..O)。在程序中首先用VHDL語(yǔ)言描述一個(gè)新的進(jìn)程Process(regl),然后采用case…when …語(yǔ)句,生成并行結(jié)構(gòu)的電路。
將生成的高12位BCD碼與低12位的BCD碼相加,得到12位的BCD碼,該結(jié)果即為所求的BCD碼結(jié)果。如上述的2.56V的BCD碼是0010 0101 0110,O.12V的BCD碼是0000 0001 00lO。所以相加的結(jié)果是0010 0110 1000,即為2.68V。因此在電路中必須設(shè)計(jì)一個(gè)12位的BCD碼加法程序,實(shí)現(xiàn)由8位二進(jìn)制轉(zhuǎn)換為12位BCD碼硬件電路。在程序設(shè)計(jì)中應(yīng)當(dāng)注意的是BCD碼相加時(shí),由最低4位加起,且每4位相加的結(jié)果超過(guò)1001時(shí),應(yīng)加0110調(diào)整。該段程序的描述是通過(guò)一個(gè)進(jìn)程Process(HB,LB,CEN)來(lái)實(shí)現(xiàn)。其中HB表示生成的高12位BCD碼,LB表示生成的低12位BCD碼.CEN表示系統(tǒng)提供的時(shí)鐘信號(hào)。在時(shí)鐘上升沿時(shí)刻進(jìn)行BCD碼相加,并判斷結(jié)果是否超過(guò)1001,判斷程序采用if…then…語(yǔ)句,實(shí)現(xiàn)條件判斷電路。按照?qǐng)D4完成BCD碼程序轉(zhuǎn)換設(shè)計(jì)。將以上兩段程序進(jìn)行組合,最終獲得由VHDL語(yǔ)言描述的BCD碼轉(zhuǎn)換程序。
1.5 A/D轉(zhuǎn)換與BCD碼合成系統(tǒng)電路
將A/D轉(zhuǎn)換電路與BCD碼轉(zhuǎn)換電路組成統(tǒng)一系統(tǒng),通過(guò)硬件編程語(yǔ)言VHDL中的進(jìn)程語(yǔ)句將編制成功的A/D轉(zhuǎn)換電路描述語(yǔ)句和BCD碼轉(zhuǎn)換電路描述語(yǔ)句組合成一個(gè)整體程序,通過(guò)QuartusⅡ軟件生成系統(tǒng)圖,如圖5所示。
A/D轉(zhuǎn)換結(jié)果由3位十進(jìn)制數(shù)表示,每位十進(jìn)制數(shù)由4位BCD碼表示,總共有12位BCD碼輸出。將電路輸出BCDOUT(11..0)分成BCDOUT(11..8),BCDOUT(7..4)和BCDOUT(3..0)三部分,通過(guò)三個(gè)進(jìn)程Process()分別用VHDL語(yǔ)言編程描述LED顯示驅(qū)動(dòng)。對(duì)整個(gè)系統(tǒng)進(jìn)行波形仿真,得到仿真波形如圖6所示,最后在GW48-CK實(shí)訓(xùn)開(kāi)發(fā)系統(tǒng)完成功能驗(yàn)證。
2 結(jié) 語(yǔ)
將CPLD和微機(jī)控制技術(shù)相結(jié)合,在智能儀表設(shè)計(jì)和控制系統(tǒng)設(shè)計(jì)領(lǐng)域提高了系統(tǒng)設(shè)計(jì)的靈活性,縮短了產(chǎn)品開(kāi)發(fā)周期,同時(shí)使系統(tǒng)易于升級(jí)和擴(kuò)展。因?yàn)椴捎昧?strong>CPLD(復(fù)雜可編程邏輯器件),極大提高了系統(tǒng)I/O口利用率,縮小了印刷電路板面積,提高了系統(tǒng)集成度,在多輸入/多輸出的數(shù)據(jù)采集和控制系統(tǒng)領(lǐng)域有十分廣闊應(yīng)用前景。