數(shù)字電壓表的VHDL設(shè)計(jì)與實(shí)現(xiàn)
介紹數(shù)字電壓表的組成及工作原理,論述了基于VHDL語言和FPGA芯片的數(shù)字系統(tǒng)的設(shè)計(jì)思想和實(shí)現(xiàn)過程。
關(guān)鍵詞:數(shù)字電壓表;VHDL語言;FPGA
VHDL Realization of Digital Voltmeter
ZHAO Xiaobo, LIU Zhanwei, LI Sujuan
(Department of Computer, Shijiazhuang Railway Institute, Shijiazhuang050043, China)
Key words: digital voltmeter; VHDL; FPGA
在硬件電子電路設(shè)計(jì)領(lǐng)域中,電子設(shè)計(jì)自動(dòng)化(EDA)工具已成為主要的設(shè)計(jì)手段,而VHDL語言則是EDA的關(guān)鍵技術(shù)之一,它采用自頂向下的設(shè)計(jì)方法,即從系統(tǒng)總體要求出發(fā),自上至下地將設(shè)計(jì)任務(wù)分解為不同的功能模塊,最后將各功能模塊連接形成頂層模塊,完成系統(tǒng)硬件的整體設(shè)計(jì)。本文用FPGA芯片和VHDL語言設(shè)計(jì)了一個(gè)數(shù)字電壓表,舉例說明了利用VHDL語言實(shí)現(xiàn)數(shù)字系統(tǒng)的過程。
整個(gè)數(shù)字電壓表的硬件結(jié)構(gòu)如圖1所示。
工作時(shí),系統(tǒng)按一定的速率采集輸入的模擬電壓,經(jīng)ADC0804轉(zhuǎn)換為8位數(shù)字量,此8位數(shù)字量經(jīng)FPGA處理得到模擬電壓的數(shù)字碼,再輸入數(shù)碼管獲得被測電壓的數(shù)字顯示。
此電壓表的測量范圍:0~5V,三位數(shù)碼管顯示。
此電壓表的測量范圍:0~5V,三位數(shù)碼管顯示。
數(shù)字電壓表的三大模塊都是用VHDL語言編程實(shí)現(xiàn)的。
2.1控制模塊
用狀態(tài)機(jī)作法,產(chǎn)生ADC0804的片選信號(hào)、讀/寫控制信號(hào),通過狀態(tài)信號(hào)INTR判斷轉(zhuǎn)換是否結(jié)束;轉(zhuǎn)換結(jié)束后將轉(zhuǎn)換數(shù)據(jù)鎖存并輸出。其狀態(tài)轉(zhuǎn)換圖如圖2所示。
2.1控制模塊
用狀態(tài)機(jī)作法,產(chǎn)生ADC0804的片選信號(hào)、讀/寫控制信號(hào),通過狀態(tài)信號(hào)INTR判斷轉(zhuǎn)換是否結(jié)束;轉(zhuǎn)換結(jié)束后將轉(zhuǎn)換數(shù)據(jù)鎖存并輸出。其狀態(tài)轉(zhuǎn)換圖如圖2所示。
ADC0804是8位模數(shù)轉(zhuǎn)換器,它的輸出狀態(tài)共有28=256種,如果輸入信號(hào)Vin為0~5V電壓范圍,則每兩個(gè)狀態(tài)值為5/(256-1),約為0.0196V,故測量分辨率為0.02V。常用測量方法是:當(dāng)讀取到DB7~DB0轉(zhuǎn)換值是XXH時(shí),電壓測量值為U≈XXH×0.02V;考慮到直接使用乘法計(jì)算對應(yīng)的電壓值將耗用大量的FPGA內(nèi)部組件,本設(shè)計(jì)用查表命令來得到正確的電壓值。
在讀取到ADC0804的轉(zhuǎn)換數(shù)據(jù)后,先用查表指令算出高、低4位的兩個(gè)電壓值,并分別用12位BCD碼表示;接著設(shè)計(jì)12位的BCD碼加法,如果每4位相加結(jié)果超過9需進(jìn)行加6調(diào)整。這樣得到模擬電壓的BCD碼。
本模塊的功能仿真結(jié)果如圖3所示;當(dāng)轉(zhuǎn)換數(shù)據(jù)為00010101,通過查表高4位0001是0.32V,而低4位0101是0.1V,最后的電壓輸出結(jié)果是0.32V+0.1V=0.42V,它的BCD碼表示為000001000010,仿真結(jié)果正確。
2.3掃描、顯示模塊
如圖4所示,CLK是掃描時(shí)鐘,其頻率為1kHz,由給定的40MHz時(shí)鐘分頻得到;DATAIN是數(shù)據(jù)處理模塊輸出的電壓值的BCD碼;SEL是數(shù)碼管的片選信號(hào);POINT是數(shù)碼管小數(shù)點(diǎn)驅(qū)動(dòng);通過掃描分別輸出3位電壓值的BCD碼DATAOUT,并通過DISP將BCD碼譯成相應(yīng)的7段數(shù)碼驅(qū)動(dòng)值,送數(shù)碼管顯示。
在讀取到ADC0804的轉(zhuǎn)換數(shù)據(jù)后,先用查表指令算出高、低4位的兩個(gè)電壓值,并分別用12位BCD碼表示;接著設(shè)計(jì)12位的BCD碼加法,如果每4位相加結(jié)果超過9需進(jìn)行加6調(diào)整。這樣得到模擬電壓的BCD碼。
本模塊的功能仿真結(jié)果如圖3所示;當(dāng)轉(zhuǎn)換數(shù)據(jù)為00010101,通過查表高4位0001是0.32V,而低4位0101是0.1V,最后的電壓輸出結(jié)果是0.32V+0.1V=0.42V,它的BCD碼表示為000001000010,仿真結(jié)果正確。
2.3掃描、顯示模塊
如圖4所示,CLK是掃描時(shí)鐘,其頻率為1kHz,由給定的40MHz時(shí)鐘分頻得到;DATAIN是數(shù)據(jù)處理模塊輸出的電壓值的BCD碼;SEL是數(shù)碼管的片選信號(hào);POINT是數(shù)碼管小數(shù)點(diǎn)驅(qū)動(dòng);通過掃描分別輸出3位電壓值的BCD碼DATAOUT,并通過DISP將BCD碼譯成相應(yīng)的7段數(shù)碼驅(qū)動(dòng)值,送數(shù)碼管顯示。
本文設(shè)計(jì)的VHDL語言程序已在MAXPLUSⅡ工具軟件上進(jìn)行了編譯、仿真和調(diào)試,并通過編程器下載到了EP1K100QC208-3芯片。經(jīng)過實(shí)驗(yàn)驗(yàn)證,本設(shè)計(jì)是正確的,其電壓顯示值誤差沒有超過量化臺(tái)階上限(0.02V)。本文給出的設(shè)計(jì)思想也適用于其他基于PLD芯片的系統(tǒng)設(shè)計(jì)。
關(guān)鍵詞:
實(shí)現(xiàn)
設(shè)計(jì)
VHDL
電壓表
數(shù)字
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論