数字电压表的VHDL设计与实现
时间:2012-03-12 阅读:2330
整个数字电压表的硬件结构如图1所示。
工作时,系统按一定的速率采集输入的模拟电压,经ADC0804转换为8位数字量,此8位数字量经FPGA处理得到模拟电压的数字码,再输入数码管获得被测电压的数字显示。
此电压表的测量范围:0~5V,三位数码管显示。
数字电压表的三大模块都是用VHDL语言编程实现的。
1、控制模块
用状态机作法,产生ADC0804的片选信号、读/写控制信号,通过状态信号INTR判断转换是否结束;转换结束后将转换数据锁存并输出。其状态转换图如图2所示。
在读取到ADC0804的转换数据后,先用查表指令算出高、低4位的两个电压值,并分别用12位BCD码表示;接着设计12位的BCD码加法,如果每4位相加结果超过9需进行加6调整。这样得到模拟电压的BCD码。
本模块的功能仿真结果如图3所示;当转换数据为00010101,通过查表高4位0001是0.32V,而低4位0101是0.1V,zui后的电压输出结果是0.32V+0.1V=0.42V,它的BCD码表示为000001000010,仿真结果正确。
2、扫描、显示模块
如图4所示,CLK是扫描时钟,其频率为1kHz,由给定的40MHz时钟分频得到;DATAIN是数据处理模块输出的电压值的BCD码;SEL是数码管的片选信号;POINT是数码管小数点驱动;通过扫描分别输出3位电压值的BCD码DATAOUT,并通过DISP将BCD码译成相应的7段数码驱动值,送数码管显示。
本文设计的VHDL语言程序已在MAXPLUSⅡ工具软件上进行了编译、仿真和调试,并通过编程器下载到了EP1K100QC208-3芯片。经过实验验证,本设计是正确的,其电压显示值误差没有超过量化台阶上限(0.02V)。本文给出的设计思想也适用于其他基于PLD芯片的系统设计。