西电 数字电路课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字电路课程设计报告课题:基于FPGA的高低位数字测温计学院:机电工程学院
专业:自动化
班级:
姓名:
学号:
指导老师:
2014年10月14日星期二
一、引言
课题确定过程:最初在网上搜过不少课题,如自动售货机、3层电梯控制器、声控电子锁等,但每一个的信号采集模块的设计以我现在的水平而言都很复杂,于是在尝试了一段时间后就放弃了。

后来我觉得自己必须先了解点关于FPGA 、EDA 、VHDL 的一些基础知识,于是到图书馆借阅了一些相关书籍,同时想到平时生活里测物体温度时因为导热不均匀使得两端极的温度有较大的不同,于是就有了做高低位数字测温计的想法。

系统总体介绍:系统由FPGA 器件实现数字测温,利用温度传感器AD590采集温度信号,产生的温度信号经调零、放大处理后,利用A/D 转换器ADC0809将模拟信号转换成分高低位的数字信号,最后将高4位和低4位的数字信号分别连接到7段共阴极数码显示管上输出温度大小(以十六进制的形式)。

二、硬件描述
2.1系统组成框图
2.2测温模块(采集电路)
温度传感器AD590简介
AD590是美国ANALOG DEVICES 公司的单片集成两端感温电流源,AD590适用于150°C 以下、目前采用传统电气温度传感器的任何温度检测应用。

低成本的单芯片集成电路及无需支持电路的特点,使它成为许多温度测量应用的一种很有吸引力的备选方案。

2.3模数转换模块
A/D 转换器ADC0809简介
ADC0809是美国国家半导体公司生产的CMOS 工艺8通道,8位逐次逼近式A/D 模数转换器。

其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D 转换。

2.4七段数码管显示模块(执行电路)
数码管的一种是半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点的发光二极管单元DP(decimal point),其基本单元是发光二极管。

三、软件仿真
3.1模数转换模块
3.1.1VHDL语言描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADC0809 IS
PORT(CLK:IN STD_LOGIC;--时钟信号
EOC:IN STD_LOGIC;--转换结束信号
DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);--采集温度信号
ALE:OUT STD_LOGIC;--地址锁存允许信号
START:OUT STD_LOGIC;-- A/D转换启动脉冲输入端
OE:OUT STD_LOGIC;--数据输出允许信号
LOCK0:OUT STD_LOGIC;--观察数据锁存信号
ADDA:OUT STD_LOGIC;--3条地址输入线
ADDB:OUT STD_LOGIC;
ADDC:OUT STD_LOGIC;
DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--输出8位数字信号
END ADC0809;
ARCHITECTURE BEHA V OF ADC0809 IS
TYPE STATE IS (S0,S1,S2,S3,S4);
SIGNAL CURRENT_STATE,NEXT_STATE:STATE:=S0;
SIGNAL REGL:STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK:STD_LOGIC;
BEGIN
ADDA<='0'; --进入通道1
ADDB<='0';
ADDC<='0';
DOUT<=REGL;
LOCK0<=LOCK; --转换后输出锁存信号
COM:PROCESS(CURRENT_STA TE,EOC)
BEGIN
CASE CURRENT_STATE IS --5个状态
WHEN S0=>ALE<='0'; --初始化
START<='0';
LOCK<='0';
OE<='0';
NEXT_STA TE<=S1;
WHEN S1=>ALE<='1'; --打开输入通道
START<='1';
LOCK<='0';
OE<='0';
NEXT_STA TE<=S2;
WHEN S2=>ALE<='0'; --开始转换
START<='0';
LOCK<='0';
OE<='0';
IF (EOC='1')THEN
NEXT_STATE<=S3;
ELSE NEXT_STA TE<=S2;
END IF;
WHEN S3=>ALE<='0';
START<='0';
LOCK<='0'; --输出数据
OE<='1';
NEXT_STA TE<=S4;
WHEN S4=>ALE<='0';
START<='0';
LOCK<='1'; --锁存输出数据
NEXT_STA TE<=S0;
WHEN OTHERS=>NEXT_STA TE<=S0;
END CASE;
END PROCESS COM;
REG:PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
CURRENT_STA TE<=NEXT_STATE;
END IF;
END PROCESS REG;
LATCH:PROCESS(LOCK) --数据锁存
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN
REGL<=DIN; --lock上升沿锁入转换好的数据
END IF;
END PROCESS LATCH;
END BEHA V;
3.1.2统计报告
3.1.3仿真波形
注:(1)(2)(3)(4)(5)代表先后顺序
3.2七段数码管显示模块
3.2.1VHDL语言描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY YIMA7 IS
PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --4位输入信号
LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); --7位输出控制数码管END;
ARCHITECTURE ART OF YIMA7 IS
BEGIN
PROCESS(A)
BEGIN
CASE A IS --输入信号与数码管显示数字之间的关系
WHEN"0000"=> LED7S<="0111111"; --分别对应管脚图中GFEDCBA
WHEN"0001"=> LED7S<="0000110";
WHEN"0010"=> LED7S<="1011011";
WHEN"0011"=> LED7S<="1001111";
WHEN"0100"=> LED7S<="1100110";
WHEN"0101"=> LED7S<="1101101";
WHEN"0110"=> LED7S<="1111101";
WHEN"0111"=> LED7S<="0000111";
WHEN"1000"=> LED7S<="1111111";
WHEN"1001"=> LED7S<="1101111";
WHEN"1010"=> LED7S<="1110111";
WHEN"1011"=> LED7S<="1111100";
WHEN"1100"=> LED7S<="0111001";
WHEN"1101"=> LED7S<="1011110";
WHEN"1110"=> LED7S<="1111001";
WHEN"1111"=> LED7S<="1110001";
WHEN OTHERS=> NULL;
END CASE;
END PROCESS;
END;
3.2.2统计报告
3.2.3波形仿真
3.3顶层文件模块
3.3.1VHDL 语言描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DCWJ IS
PORT( CLK:IN STD_LOGIC;
EOC:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
ALE:OUT STD_LOGIC;
START:OUT STD_LOGIC;
OE:OUT STD_LOGIC;
LOCK0:OUT STD_LOGIC;
ADDA:OUT STD_LOGIC;
ADDB:OUT STD_LOGIC;
ADDC:OUT STD_LOGIC;--以上输入输出与ADC0809类似
LED7SL:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--低位数码显示管
LED7SH:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));--高位数码显示管
END DCWJ;
ARCHITECTURE LINK OF DCWJ IS
COMPONENT ADC0809 --ADC0809的端口
PORT( CLK:IN STD_LOGIC;
EOC:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
ALE:OUT STD_LOGIC;
START:OUT STD_LOGIC;
OE:OUT STD_LOGIC;
LOCK0:OUT STD_LOGIC;
ADDA:OUT STD_LOGIC;
ADDB:OUT STD_LOGIC;
ADDC:OUT STD_LOGIC;
DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
COMPONENT YIMA7 --YIMA7的端口
PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END COMPONENT;
SIGNAL CARRY_OUTL:STD_LOGIC_VECTOR(3 DOWNTO 0); --采用名称映射方法SIGNAL CARRY_OUTH:STD_LOGIC_VECTOR(3 DOWNTO 0); --CARRY_OUTL和
--CARRY_OUTH为中间信号BEGIN
U1:ADC0809 PORT MAP(CLK=>CLK,
EOC=>EOC,
DIN=>DIN,
ALE=>ALE,
START=>START,
OE=>OE,
LOCK0=>LOCK0,
ADDA=>ADDA,
ADDB=>ADDB,
ADDC=>ADDC,
DOUT(7 DOWNTO 4)=>CARRY_OUTH, --高4位输入
DOUT(3 DOWNTO 0)=>CARRY_OUTL); --低4位输入
U2:YIMA7 PORT MAP(A(3 DOWNTO 0)=>CARRY_OUTL,--低4位输出与低4位输入连接
LED7S=>LED7SL);--低位数码管显示
U3:YIMA7 PORT MAP(A(3 DOWNTO 0)=>CARRY_OUTH, --高4位输出与高4位输入连接
LED7S=>LED7SH);--高位数码管显示
END LINK;
3.3.2统计报告
3.3.3波形仿真
3.4总体模块封装图
3.5总结
本系统通过AD590采集温度信号,后经ADC0809进行模数转换,最后分高低位输出到数码显示管上读出温度,以达到测量温度的功能。

四、感悟与思考
最初听到“数字电路课程设计”这门课的时候,我以为与上学期的数电实验是差不多的东西,于是就没把课程设计放在心上,可是经过一番了解后,才发现这对于我来说完全是一个未知的领域,像是FPGA、VHDL这种词汇我之前是完全没有听过的。

虽然9月就知道了设计的要求,但真正开始进行课程设计是从10月份开始的,无论是VHDL语言的编写还是软件的使用都是从零开始,甚至连上学期自认为学的挺好的数电也忘得差不多了,时间紧任务重,所以最后完成的课程设计显得比较简单,一些问题也被搁置了下来,比如波形中出现的毛刺自己不会消除。

说实话,设计过程中真的好多次想要放弃,VHDL语言不会描述,模块不会连接,仿真波形一直在出错,这些都一点一点打击着自己的信心,消磨着自己的耐心。

但即便如此,我还是咬咬牙过来了,也许是受到了同学的感染,也许是因为自己内心中小小的自尊,反正当整个系统完成的时候,在自己长舒一口气的同时,也体会到了激动与喜悦,还有小小的骄傲。

如果时间能在充裕一点,我相信自己肯定能做得更好。

最后,向那些在课程设计过程中帮助过我的老师和同学们表示衷心的感谢。

参考文献
[1] 杨颂华等,数字电子技术基础(第二版).西安:西安电子科技大学出版社,2008
[2] 唐小华等,数字电路与EDA实践教程.北京:科学出版社,2010
[3] 王革思,数字电路原理设计与实践教程.哈尔滨:哈尔滨工程大学出版社,2007
[4] 贾秀美,数字电路硬件设计实践.北京:高等教育出版社,2008
[5] 齐洪喜,陆颖,VHDL电路设计.北京:清华大学出版社,2004
[6] 崔葛谨,基于FPGA的数字电路系统设计.西安:西安电子科技大学出版社,2008。

相关文档
最新文档