河北科技大学EDA课程设计数字电压表的设计.docx
- 文档编号:10066520
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:17
- 大小:757.98KB
河北科技大学EDA课程设计数字电压表的设计.docx
《河北科技大学EDA课程设计数字电压表的设计.docx》由会员分享,可在线阅读,更多相关《河北科技大学EDA课程设计数字电压表的设计.docx(17页珍藏版)》请在冰点文库上搜索。
河北科技大学EDA课程设计数字电压表的设计
河北科技大学
课程设计报告
学生姓名:
学号:
专业班级:
电科141
课程名称:
EDA技术课程设计
学年学期:
2017—2018学年第1学期
指导教师:
武瑞红
2017年12月
课程设计成绩评定表
学生姓名
学号
成绩
专业班级
电科141
起止时间
2017.11.27——2017.12.8
设计题目
数字电压表的设计
指
导
教
师
评
语
指导教师:
年月日
目录
一、课程设计目的1
二、课程设计原理1
(一)A/D转换器ADC0809控制电路2
(二)译码,显示电路4
三、课程设计内容4
(一)ADC0809(ad)5
(二)Dataprocess7
(三)Leddisplay9
(四)原理图设计10
(五)引脚锁定11
(六)下载测试11
四、课程设计结果11
五、课程设计心得12
一、课程设计目的
1、加深对EDA课程的学习;
2、熟练掌握PLD的基本知识、基本结构、工作原理及其设计过程;
3、加深对基本EDA工具软件的使用及用VHDL进行数字电子系统描述的掌握;
4、学会实际动手设计数字电路,熟练掌握VHDL语言的实际应用方法;
5、了解FPGA的基本构成,利用所学培养用EDA解决实际问题的初步能力。
二、课程设计原理
利用ADC0809作为电压采样端口,FPGA作为系统的核心器件,用LED进行数码显示,把读取的8位二进制数据转换成便利于输出3位十进制BCD码送给数管。
采用FPGA芯片作为系统的核心器件,负责ADC0809的A/D转换的启动、地址锁存、输入通道的选择、数据的读取。
同时,把读取的8位二进制数据转换成便于输出3位十进制的BCD码送给数码管,以显示当前测量电压值。
这些工作由ADC0809转换控制模块、数据转换模块、译码模块完成。
(一)A/D转换器ADC0809控制电路
利用ADC0809作为电压采样端口,FPGA作为系统的核心器件,用LED进行数码显示,把读取的8位二进制数据转换成便于输出3位十进制BCD码送给数码管。
由FPGA设计的ASIC芯片:
一方面产生ADC0809的控制信号,控制ADC0809实现0~5v的模拟电压到8位数字量DB0~DB7的变换;
另一方面将读入的数字量转化成电压工程值,并转换为3位BCD码的七段数字显示字符码送到LED数码管进行显示。
FPGA构成的ASIC芯片中包括三部分电路:
(1)用有限状态机设计的A/D转换控制电路;
(2)将8位数字量DB0~DB7转换为3位BCD码的电压值的转换电路;
(3)3位LED显示器的译码显示电路
ADC0809芯片的控制方法及转换过程。
控制ADC0809动作的信号有:
ALE,START,OE,EOC。
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
转换数据的传送A/D转换后得到的数据应及时传送给单片机进行处理。
数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。
为此可采用下述三种方式。
(1)定时传送方式
对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。
例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。
可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
(2)查询方式
A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。
因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。
(3)中断方式
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。
首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受[18]。
ADC0809的动作大致分为5个步骤区间:
S0,S1,S2,S3,S4。
每个步骤区间的动作方式如下:
步骤S0:
对ADC0809进行复位操作;
步骤S1:
由FPGA发出信号要求ADC0809进行A/D转换;
步骤S2:
转换后,转换完毕后的EOC将高电位降到低电位,而转换时间>100us;
步骤S3:
转换结束,有FPGA发出读命令;
步骤S4:
有FPGA读取DB0~DB7上的数字转换资料,并锁存数据。
(二)译码,显示电路
对多位数字显示采用扫描式显示可以节电,这一点在某些场合很重要。
对于某些系统输出的的数据,应用扫描式译码显示,可使电路大为简化。
有些系统,比如计算机,某些A/D转换器,是以这样的形式输出数据的:
由选通信号控制多路开关,先后送出(由高位到低位或由低位到高位)一位十进制的BCD码选通信号可用节拍发生器产生。
(1)译码、显示电路可以采用动态扫描显示和静态显示两种方法。
这里采用动态显示。
(2)动态显示的字位更新采用一个计数器频率约为125Hz的信号轮流接通各位数码管的位线,并对显示字符进行扫描,应保证显示不闪烁。
三、课程设计内容
在QuartusII中,新建工程,完成以下源程序的输入、转换,并最终以原理图设计的方式完成数字电压表的设计。
(1)ADC0809(ad)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityadis
port(clk:
instd_logic;
eoc:
instd_logic;
datain:
instd_logic_vector(7downto0);
dataout:
outstd_logic_vector(7downto0);
oe:
outstd_logic;
ale:
outstd_logic;
start:
outstd_logic;
add:
outstd_logic_vector(2downto0));
endad;
architectureoneofadis
typestatesis(st0,st1,st2,st3,st4);
signalcurrent_state,next_state:
states:
=st0;
signaltemp:
std_logic_vector(7downto0);
signallock:
std_logic;
begin
add<="001";
dataout<=temp;
process(current_state,eoc)
begin
casecurrent_stateis
whenst0=>ale<='0';start<='0';oe<='0';lock<='0';next_state<=st1;
whenst1=>ale<='1';start<='1';oe<='0';lock<='0';next_state<=st2;
whenst2=>ale<='0';start<='0';oe<='0';lock<='0';
if(eoc='1')then
next_state<=st3;
elsenext_state<=st2;
endif;
whenst3=>ale<='0';start<='0';oe<='1';lock<='1';next_state<=st4;
whenst4=>ale<='0';start<='0';oe<='1';lock<='1';next_state<=st0;
endcase;
endprocess;
process(clk)
begin
if(clk'eventandclk='1')then
current_state<=next_state;
endif;
endprocess;
process(lock)
begin
iflock='1'andlock'event
thentemp<=datain;
endif;
endprocess;
endone;
状态机设计是一类重要的时序电路,是许多逻辑电路的核心部件,是实现高效率、高可靠性逻辑控制的重要途径。
尽管状态机的设计理论并没有增加多少新的内容,但EDA工具的发展使状态机的设计技术和实现方法有了新的内容。
一般状态机分类为以下两种:
MOORE型状态机:
它的输出仅仅取决于现态,与输入无关。
MEALY型状态机:
它的输出不仅仅取决于现态,还与输入有关。
尽管状态机的表达方式和功能不尽相同,但都有相对固定的语句和程序结构。
上述程序中用Case-When语句构成了一个Moore状态机,将信号oe设定为高电位,这样在下一个脉冲信号clk正沿时,才开始读取ADC0809上的数字转换信号。
其生成的符号元件原理图如右图所示:
调用modelsim进行门级仿真波形结果如下:
Datain、EOC、CLK:
输入端
Dataut、OE、ALE、START、ADD:
输出端
当输入时钟信号时,八位数字量在EOC有高电位变为低电位时,标志着A/D转换结束。
当oe为上升沿时,在dataout输出对应的datain值。
(2)Dataprocess
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydataprocessis
port(b_datain:
instd_logic_vector(7downto0);
b_dataout:
outstd_logic_vector(11downto0));
enddataprocess;
architectureoneofdataprocessis
signalmiddata:
std_logic_vector(7downto0);
signalvdata:
std_logic_vector(11downto0);
signalhdata:
std_logic_vector(11downto0);
signalldata:
std_logic_vector(11downto0);
signalc0:
std_logic;
signalc1,c2:
std_logic;
begin
middata<=b_datain;--
(1)ForA/DConversionDataHighByte
hdata<="010010000000"whenmiddata(7downto4)="1111"else
"010001001000"whenmiddata(7downto4)="1110"else
"010000010110"whenmiddata(7downto4)="1101"else
"001110000100"whenmiddata(7downto4)="1100"else
"001101010010"whenmiddata(7downto4)="1011"else
"001100100000"whenmiddata(7downto4)="1010"else
"001010001000"whenmiddata(7downto4)="1001"else
"001001010110"whenmiddata(7downto4)="1000"else
"001000100100"whenmiddata(7downto4)="0111"else
"000110010010"whenmiddata(7downto4)="0110"else
"000101100000"whenmiddata(7downto4)="0101"else
"000100101000"whenmiddata(7downto4)="0100"else
"000010010110"whenmiddata(7downto4)="0011"else
"000001100100"whenmiddata(7downto4)="0010"else
"000000110010"whenmiddata(7downto4)="0001"else
"000000000000";--ForA/DConversionDataLowByte
ldata<="000000110000"whenmiddata(3downto0)="1111"else
"000000101000"whenmiddata(3downto0)="1110"else
"000000100100"whenmiddata(3downto0)="1101"else
"000000100100"whenmiddata(3downto0)="1100"else
"000000100010"whenmiddata(3downto0)="1011"else
"000000100000"whenmiddata(3downto0)="1010"else
"000000011000"whenmiddata(3downto0)="1001"else
"000000010110"whenmiddata(3downto0)="1000"else
"000000010100"whenmiddata(3downto0)="0111"else
"000000010010"whenmiddata(3downto0)="0110"else
"000000010000"whenmiddata(3downto0)="0101"else
"000000001000"whenmiddata(3downto0)="0100"else
"000000000110"whenmiddata(3downto0)="0011"else
"000000000100"whenmiddata(3downto0)="0010"else
"000000000010"whenmiddata(3downto0)="0001"else
"000000000000";--(3)CheckBCDAdditionCarry
c0<='1'whenhdata(3downto0)+ldata(3downto0)>"01001"else'0';
c1<='1'whenhdata(7downto4)+ldata(7downto4)>"01001"else'0';
c2<='1'whenhdata(11downto8)+ldata(11downto8)>"01001"else'0';
--(4)BCDAddition(3~0)
vdata(3downto0)<=hdata(3downto0)+ldata(3downto0)+"0110"whenc0='1'elsehdata(3downto0)+ldata(3downto0);--(5)BCDAddition(7~4)
vdata(7downto4)<=hdata(7downto4)+ldata(7downto4)+"0111"whenc1='1'andc0='1'elsehdata(7downto4)+ldata(7downto4)+"0110"whenc1='1'andc0='0'elsehdata(7downto4)+ldata(7downto4)+"0001"whenc1='0'andc0='1'
elsehdata(7downto4)+ldata(7downto4);--(6)BCDAddition(11~8)
vdata(11downto8)<=hdata(11downto8)+ldata(11downto8)+"0111"whenc2='1'andc1='1'elsehdata(11downto8)+ldata(11downto8)+"0110"whenc2='1'andc1='0'elsehdata(11downto8)+ldata(11downto8)+"0001"whenc2='0'andc1='1'
elsehdata(11downto8)+ldata(11downto8);
b_dataout<=vdata;
endone;
上述程序
(1)、
(2)区块分别是高、低4位的电压查表转换,转换结果各是12位的BCD码;程序(3)区块是在BCD码相加前,先行判断那几个4位相加会有几位,并做进位记录;程序)(4)~(6)区块分别是由第4位、中4位、高4位作BCD码相加。
其生成的符号元件原理图如右图所示:
调用ModelSim进行门级仿真波形结果如下:
(三)Leddisplay
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityleddisplayis
port(bcdcode:
instd_logic_vector(11downto0);
ck:
instd_logic;
led_dp:
outstd_logic;
seg:
outstd_logic_vector(6downto0);
sel:
outstd_logic_vector(1downto0));
endleddisplay;
architectureoneofleddisplayis
signalnum:
std_logic_vector(3downto0);
signalcount:
std_logic_vector(1downto0);
begin
process(ck)
begin
ifck'eventandck='1'thencount<=count+1;
endif;
endprocess;
sel<=count;--
(1)
num<=bcdcode(3downto0)whencount=0else
bcdcode(7downto4)whencount=1else
bcdcode(11downto8)whencount=2else
"0000";--
(2)
led_dp<='1'whencount=2else'0';
seg<="0111111"whennum=0else
"0000110"whennum=1else
"1011011"whennum=2else
"1001111"whennum=3else
"1100110"whennum=4else
"1101101"whennum=5else
"1111101"whennum=6else
"0000111"whennum=7else
"1111111"whennum=8else
"1101111"whennum=9else
"1110111"whennum=10else
"1111100"whennum=11else
"0111001"whennum=12else
"1011110"whennum=13else
"1111001"whennum=14else
"1110001"whennum=15else
"0000000";
endone;
程序
(1)是位选代码,当count是0的时候,输出BCD码的低四位;当count是1的时候,输出BCD码的中四位;当count是2的时候输出BCD码的高四位;当count是其他值的时候输出值是0。
程序
(2)是LED各数字的位选代码。
其生成符号元件原理图如右图所示:
调用ModelSim进行门级仿真波形结果如下:
(四)原理图设计
调用ModelSim进行门级仿真波形结果如下:
(五)引脚锁定
(6)下载测试
再次编译,正确连接实验箱与电脑,下载测试。
4、课程设计结果
测试结果与预期的一致,测试完成,验证成功。
5、课程设计心得
本次课程设计是在武瑞红老师的细心指导下完成的,从最初的定题,到搜集资料,到写作、修改,老师给了我耐心和无私的帮助。
还有就是其中遇到了很多困难和障碍,但是在老师帮助下我最终完成了此次课程设计,在此表示衷心的感谢。
同时也感谢学校为我们提供了良好的学习环境,使我们能够在此专心的学习。
经过两周的课程设计,在老师的辅导下,查阅了相关资料,对课题内容有了更深一步的了解。
在VHDL硬件描述语言下,设计了该数字式电压表。
并进行了硬件设计,以及在Quartus编译平台上仿真得出结果,验证了系统的可行性。
由测试结果,可看出该仪表测量范围较宽,测量精度较高,能够满足物理实验中电量的测量要求。
经实际使用证明,系统运行稳定、操作方便。
最后,在老师指导下经过自己的努力完成了课程设计,心中也会有一丝丝喜悦,同时也为自己将来的发展打下了基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 河北 科技大学 EDA 课程设计 数字 电压表 设计