发布时间 : 星期六 文章基于FPGA的数字电压表设计更新完毕开始阅读a001073b376baf1ffc4fadd4
2.2.2 显示控制及驱动模块
电压值的显示可由LCD实现。本系统选用了一块8×5字符型液晶显示模块LMB162ABA实现了低功耗,而且可带单位双排显示,字体美观大方。整个电路十分简洁。系统工作过程首先由 FPGA对ADC0809及LCD进行初始化,然后当有输入信号V i,由FPGA通过接口向ADC0809控制信号控制字,使其对输入的模拟信号进行转换,变为8位的数字信号送到输出端,由FPGA经过码制变换等处理后,再通过与LCD的接口驱动并发送数据。当ADC0809采样完成后,由码字变换模块将采样数字信号转换为LCD可识别的字符型数据后,送至驱动模块,再由其驱动LCD,将字符型数据送到LCD的D0~D7端,实现显示。
3、软件设计
3.1 开发软件及编程语言简介
系统采用硬件描述语言VHDL按模块化方式进行设计,并将各模块集成于FPGA芯片中,然后通过Xilinx ISE 4.2软件开发平台和ModelSim Xilinx Edition 5.3d XE仿真工具,对设计文件自动地完成逻辑编译、逻辑化简、综合及优化、逻辑布局布线、逻辑仿真,最后对FPGA芯片进行编程,实现系统的设计要求。
采用VHDL(Very High Speed Integrated Circuit Hardware Descriptipon Language)超高速集成电路硬件描述语言设计复杂数字电路的方法具有很多优点,VHDL语言的设计技术齐全、方法灵活、支持广泛。
VHDL语言的系统硬件描述能力很强,具有多层次描述系统硬件功能的能力,可以从系统级到门级电路,而且高层次的行为描述可以与低层次的RTL描述混合使用。VHDL在描述数字系统时,可以使用前后一致的语义和语法跨越多层次,并且使用跨越多个级别的混合描述模拟该系统。因此,可以对高层次行为描述的子系统及低层次详细实现子系统所组成的系统进行模拟。
3.2程序流程图
9
图3.2.1 系统程序流程图
4、系统测试
4.1测试仪器清单
测试使用的仪器设备如表4.1.1所示
表4.1.1测试使用的仪器设备
序号 1 2 名称 3位半数字万用表 直流稳压电源 型号 UNI-T DF1731SC2A 数量 1 1 备注 深圳胜利公司 江苏扬中电子仪器厂 4.2测试及误差计算
系统的测试主要是测试硬件是否能正常工作,软件和硬件是否匹配,是否合乎设计的要求。在频率测试过程中,系统的测量范围系统的精度是两个较重要的指标。系统的测量结果如表4.2.1所示
表4.2.1 系统测量数据表
序号 1 2
标准电压值(U/V) 测量电压值(Ux/V) 误差(%) 10
3 4 5 6 7 8 9 10
参考文献
[1]潘松,黄继业.EDA实用教程.北京.科学出版社.2002年10月第一版
[2]黄智伟.全国大学生电子设计竞赛训练教程.北京:电子工业出版式社.2005年1月第1版; [3]高吉祥,〈〈数字电子技术〉〉北京:电子工业出版社,2003年8谭浩强月第1版;
附录1: 源程序清单
顶层:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following lines to use the declarations that are -- provided for instantiating Xilinx primitive components. --library UNISIM;
--use UNISIM.VComponents.all;
entity top is
Port ( clk,reset:in std_logic;
key1,eoc:in std_logic;
D:in std_logic_vector(7 downto 0); ale,start,oe,clk500k:out std_logic;
cba:out std_logic_vector(2 downto 0);---0809通道选择 xs:out std_logic_vector(8 downto 0); ---发光二极管显示状态 lcden:out std_logic; --接LCD使能端
lcdda:out std_logic; --接LCD_da信号输入端 lcdrw:out std_logic; --接LCD读写信号输入端
lcddata:inout std_logic_vector(7 downto 0));--接LCD数据输入位 end top;
architecture Behavioral of top is
11
component key is
Port (clk,reset:in std_logic; key1:in std_logic; clkz:out std_logic;
dw1:out integer range 0 to 2;
cba:out std_logic_vector(2 downto 0));
end component;
component ad0809 is
Port ( clk,reset:in std_logic; eoc:in std_logic;
D:in std_logic_vector(7 downto 0); ale,start,oe,clk500k:out std_logic; xs:out std_logic_vector(8 downto 0);---0809工作状态显示
Q:out std_logic_vector(7 downto 0));
end component;
component yima is
Port ( clk:in std_logic; clkz:in std_logic;
Q:in std_logic_vector(7 downto 0);
v1,v2,v3,v4,v5:out integer range 0 to 9);
end component;
component lcd is
generic(delay:integer:=100); ---类属说明 Port ( clk,reset:in std_logic; dw1:in integer range 0 to 2;
v1,v2,v3,v4,v5:in integer range 0 to 9;
lcden:out std_logic; --接LCD使能端
lcdda:out std_logic; --接LCD_da信号输入端 lcdrw:out std_logic; --接LCD读写信号输入端
lcddata:inout std_logic_vector(7 downto 0));--接LCD数据输入位 end component;
signal clkz_load:std_logic;
signal dw1_load:integer range 0 to 2; signal Q_load:std_logic_vector(7 downto 0);
signal v1_load,v2_load,v3_load,v4_load,v5_load:integer range 0 to 9; begin
u1:key port map
(clk=>clk,reset=>reset,key1=>key1,clkz=>clkz_load,dw1=>dw1_load,cba=>cba); u2:ad0809 port map
12