數字電壓表的VHDL設計與實現
在硬件電子電路設計領域中,電子設計自動化(EDA)工具已成為主要的設計手段,而VHDL語言則是EDA的關鍵技術之一,它采用自頂向下的設計方法,即從系統總體要求出發,自上至下地將設計任務分解為不同的功能模塊,最后將各功能模塊連接形成頂層模塊,完成系統硬件的整體設計。本文用FPGA芯片和VHDL語言設計了一個數字電壓表,舉例說明了利用VHDL語言實現數字系統的過程。
1系統組成及工作原理
整個數字電壓表的硬件結構如圖1所示。
系統的核心電路由FPGA完成,本設計選用了Altera公司的EPlKl00QC208-3芯片,用VHDL語言對它進行設計,實現三大功能模塊:(1)控制模塊,激活A/D轉換器動作、接收A/D轉換器傳遞過來的數字轉換值;(2)數據處理模塊,將接收到的轉換值調整成對應的數字信號;(3)掃描、顯示模塊,產生數碼管的片選信號,并將數值處理模塊輸出的BCD碼譯成相應的7段數碼驅動值。
工作時,系統按一定的速率采集輸入的模擬電壓,經ADC0804轉換為8位數字量,此8位數字量經FPGA處理得到模擬電壓的數字碼,再輸入數碼管獲得被測電壓的數字顯示。
此電壓表的測量范圍:0~5V,三位數碼管顯示。
2FPGA功能模塊的設計
數字電壓表的三大模塊都是用VHDL語言編程實現的。
2.1控制模塊
用狀態機作法,產生ADC0804的片選信號、讀/寫控制信號,通過狀態信號INTR判斷轉換是否結束;轉換結束后將轉換數據鎖存并輸出。其狀態轉換圖如圖2所示。

2.2數據處理模塊
ADC0804是8位模數轉換器,它的輸出狀態共有28=256種,如果輸入信號Vin為0~5V電壓范圍,則每兩個狀態值為5/(256-1),約為0.0196V,故測量分辨率為0.02V。常用測量方法是:當讀取到DB7~DB0轉換值是XXH時,電壓測量值為U≈XXH×0.02V;考慮到直接使用乘法計算對應的電壓值將耗用大量的FPGA內部組件,本設計用查表命令來得到正確的電壓值。
在讀取到ADC0804的轉換數據后,先用查表指令算出高、低4位的兩個電壓值,并分別用12位BCD碼表示;接著設計12位的BCD碼加法,如果每4位相加結果超過9需進行加6調整。這樣得到模擬電壓的BCD碼。

本模塊的功能仿真結果如圖3所示;當轉換數據為00010101,通過查表高4位0001是0.32V,而低4位0101是0.1V,最后的電壓輸出結果是0.32V+0.1V=0.42V,它的BCD碼表示為000001000010,仿真結果正確。
2.3掃描、顯示模塊
如圖4所示,CLK是掃描時鐘,其頻率為1kHz,由給定的40MHz時鐘分頻得到;DATAIN是數據處理模塊輸出的電壓值的BCD碼;SEL是數碼管的片選信號;POINT是數碼管小數點驅動;通過掃描分別輸出3位電壓值的BCD碼DATAOUT,并通過DISP將BCD碼譯成相應的7段數碼驅動值,送數碼管顯示。

3結束語
本文設計的VHDL語言程序已在MAXPLUSⅡ工具軟件上進行了編譯、仿真和調試,并通過編程器下載到了EP1K100QC208-3芯片。經過實驗驗證,本設計是正確的,其電壓顯示值誤差沒有超過量化臺階上限(0.02V)。本文給出的設計思想也適用于其他基于PLD芯片的系統設計。
1系統組成及工作原理
整個數字電壓表的硬件結構如圖1所示。

系統的核心電路由FPGA完成,本設計選用了Altera公司的EPlKl00QC208-3芯片,用VHDL語言對它進行設計,實現三大功能模塊:(1)控制模塊,激活A/D轉換器動作、接收A/D轉換器傳遞過來的數字轉換值;(2)數據處理模塊,將接收到的轉換值調整成對應的數字信號;(3)掃描、顯示模塊,產生數碼管的片選信號,并將數值處理模塊輸出的BCD碼譯成相應的7段數碼驅動值。
工作時,系統按一定的速率采集輸入的模擬電壓,經ADC0804轉換為8位數字量,此8位數字量經FPGA處理得到模擬電壓的數字碼,再輸入數碼管獲得被測電壓的數字顯示。
此電壓表的測量范圍:0~5V,三位數碼管顯示。
2FPGA功能模塊的設計
數字電壓表的三大模塊都是用VHDL語言編程實現的。
2.1控制模塊
用狀態機作法,產生ADC0804的片選信號、讀/寫控制信號,通過狀態信號INTR判斷轉換是否結束;轉換結束后將轉換數據鎖存并輸出。其狀態轉換圖如圖2所示。

2.2數據處理模塊
ADC0804是8位模數轉換器,它的輸出狀態共有28=256種,如果輸入信號Vin為0~5V電壓范圍,則每兩個狀態值為5/(256-1),約為0.0196V,故測量分辨率為0.02V。常用測量方法是:當讀取到DB7~DB0轉換值是XXH時,電壓測量值為U≈XXH×0.02V;考慮到直接使用乘法計算對應的電壓值將耗用大量的FPGA內部組件,本設計用查表命令來得到正確的電壓值。
在讀取到ADC0804的轉換數據后,先用查表指令算出高、低4位的兩個電壓值,并分別用12位BCD碼表示;接著設計12位的BCD碼加法,如果每4位相加結果超過9需進行加6調整。這樣得到模擬電壓的BCD碼。

本模塊的功能仿真結果如圖3所示;當轉換數據為00010101,通過查表高4位0001是0.32V,而低4位0101是0.1V,最后的電壓輸出結果是0.32V+0.1V=0.42V,它的BCD碼表示為000001000010,仿真結果正確。
2.3掃描、顯示模塊
如圖4所示,CLK是掃描時鐘,其頻率為1kHz,由給定的40MHz時鐘分頻得到;DATAIN是數據處理模塊輸出的電壓值的BCD碼;SEL是數碼管的片選信號;POINT是數碼管小數點驅動;通過掃描分別輸出3位電壓值的BCD碼DATAOUT,并通過DISP將BCD碼譯成相應的7段數碼驅動值,送數碼管顯示。

3結束語
本文設計的VHDL語言程序已在MAXPLUSⅡ工具軟件上進行了編譯、仿真和調試,并通過編程器下載到了EP1K100QC208-3芯片。經過實驗驗證,本設計是正確的,其電壓顯示值誤差沒有超過量化臺階上限(0.02V)。本文給出的設計思想也適用于其他基于PLD芯片的系統設計。
文章版權歸西部工控xbgk所有,未經許可不得轉載。
上一篇:如何設計一個合適的系統電源
下一篇:中頻電源故障分析與檢修