《河北科技大学EDA课程设计报告-数字电压表设计》由会员分享,可在线阅读,更多相关《河北科技大学EDA课程设计报告-数字电压表设计(13页珍藏版)》请在金锄头文库上搜索。
1、-科技大学课程设计报告 学生:学 号:专业班级: 电科141 课程名称: EDA技术课程设计 学年学期: 2021 2021 学年第 1 学期 指导教师: 武瑞红 2 0 17 年 12 月课程设计成绩评定表学生学 号成绩专业班级电科141起止时间设计题目数字电压表的设计指导教师评语指导教师: 年 月 日目录一、课程设计目的1二、课程设计原理1一A/D转换器ADC0809控制电路2二译码,显示电路4三、课程设计容4一 ADC0809ad5二 Dataprocess7三Leddisplay9(四原理图设计10五引脚锁定11六 下载测试11四、 课程设计结果11五、 课程设计心得12. z-一、课
2、程设计目的1、加深对EDA课程的学习;2、熟练掌握PLD的根本知识、根本构造、工作原理及其设计过程;3、加深对根本EDA工具软件的使用及用VHDL进展数字电子系统描述的掌握;4、学会实际动手设计数字电路,熟练掌握VHDL语言的实际应用方法;5、了解FPGA的根本构成,利用所学培养用EDA解决实际问题的初步能力。二、课程设计原理利用ADC0809作为电压采样端口,FPGA作为系统的核心器件,用LED进展数码显示,把读取的8位二进制数据转换成便利于输出3位十进制BCD码送给数管。采用FPGA芯片作为系统的核心器件,负责ADC0809的A/D转换的启动、地址锁存、输入通道的选择、数据的读取。同时,把
3、读取的8位二进制数据转换成便于输出3位十进制的BCD码送给数码管,以显示当前测量电压值。这些工作由ADC0809转换控制模块、数据转换模块、译码模块完成。时钟信号start A/D转换器A/D转换控制模块数据转换模块译码 模块aleaddoeeoc数据输入一A/D转换器ADC0809控制电路利用ADC0809作为电压采样端口,FPGA作为系统的核心器件,用LED进展数码显示,把读取的8位二进制数据转换成便于输出3位十进制BCD码送给数码管。由FPGA设计的ASIC芯片:一方面产生ADC0809的控制信号,控制ADC0809实现05v的模拟电压到8位数字量DB0DB7的变换;另一方面将读入的数字
4、量转化成电压工程值,并转换为3位BCD码的七段数字显示字符码送到LED数码管进展显示。FPGA构成的ASIC芯片中包括三局部电路:1 用有限状态机设计的A/D转换控制电路;2 将8位数字量DB0DB7转换为3位BCD码的电压值的转换电路;3 3位LED显示器的译码显示电路EOC=1 st0st1st2st3st40/00000/1100EOC=0EOC/ALE/START/OE/LOCK0/00000/0011ADC0809芯片的控制方法及转换过程。控制ADC0809动作的信号有:ALE,START,OE,EOC。首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模
5、拟输入之一到比拟器。START上升沿将逐次逼近存放器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进展。直到A/D转换完成,EOC变为高电平,指示A/D转换完毕,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门翻开,转换结果的数字量输出到数据总线上。 转换数据的传送 A/D转换后得到的数据应及时传送给单片机进展处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进展传送。为此可采用下述三种方式。1定时传送方式 对于一种A/D转换器来说,转换时间作为一项技术指标是的和固定的。例如ADC0809转换时间为128s,相当于6M
6、Hz的MCS-51单片机共64个机器周期。可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进展数据传送。 2查询方式 A/D转换芯片由说明转换完成的状态信号,例如ADC0809的EOC端。因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进展数据传送。 3中断方式 把说明转换完成的状态信号EOC作为中断请求信号,以中断方式进展数据传送。 不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进展数据传送。首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机承受18。ADC0809的动作大致分为5个步
7、骤区间:S0,S1,S2,S3,S4。每个步骤区间的动作方式如下:步骤S0:对ADC0809进展复位操作;步骤S1:由FPGA发出信号要求ADC0809进展A/D转换;步骤S2:转换后,转换完毕后的EOC将高电位降到低电位,而转换时间100us;步骤S3:转换完毕,有FPGA发出读命令;步骤S4:有FPGA读取DB0DB7上的数字转换资料,并锁存数据。二译码,显示电路对多位数字显示采用扫描式显示可以节电,这一点在*些场合很重要。对于*些系统输出的的数据,应用扫描式译码显示,可使电路大为简化。有些系统,比方计算机,*些A/D转换器,是以这样的形式输出数据的:由选通信号控制多路开关,先后送出由高位
8、到低位或由低位到高位一位十进制的BCD码选通信号可用节拍发生器产生。1译码、显示电路可以采用动态扫描显示和静态显示两种方法。这里采用动态显示。2动态显示的字位更新采用一个计数器频率约为125Hz的信号轮流接通各位数码管的位线,并对显示字符进展扫描,应保证显示不闪烁。三、课程设计容在Quartus II中,新建工程,完成以下源程序的输入、转换,并最终以原理图设计的方式完成数字电压表的设计。(一) ADC0809adlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ad isport(cl
9、k:in std_logic; eoc:in std_logic; datain:in std_logic_vector(7 downto 0); dataout:out std_logic_vector(7 downto 0); oe:out std_logic; ale:out std_logic; start:out std_logic; add:out std_logic_vector(2 downto 0);end ad;architecture one of ad istype states is(st0,st1,st2,st3,st4); signal current_state
10、,ne*t_state:states:=st0;signal temp:std_logic_vector(7 downto 0);signal lock:std_logic;begin add=001; dataoutale=0;start=0;oe=0;lock=0;ne*t_stateale=1;start=1;oe=0;lock=0;ne*t_stateale=0;start=0;oe=0;lock=0; if (eoc=1) then ne*t_state=st3;else ne*t_stateale=0;start=0;oe=1;lock=1;ne*t_stateale=0;star
11、t=0;oe=1;lock=1;ne*t_state=st0;end case;end process;process(clk)begin if(clk event and clk=1) then current_state=ne*t_state; end if;end process;process(lock)begin if lock=1 and lock event then temp=datain; end if;end process;end one;状态机设计是一类重要的时序电路,是许多逻辑电路的核心部件,是实现高效率、高可靠性逻辑控制的重要途径。尽管状态机的设计理论并没有增加多少
12、新的容,但EDA工具的开展使状态机的设计技术和实现方法有了新的容。一般状态机分类为以下两种:MOORE型状态机:它的输出仅仅取决于现态,与输入无关。MEALY型状态机:它的输出不仅仅取决于现态,还与输入有关。尽管状态机的表达方式和功能不尽一样,但都有相对固定的语句和程序构造。 上述程序中用Case-When语句构成了一个Moore状态机,将信号oe设定为高电位,这样在下一个脉冲信号clk正沿时,才开场读取ADC0809上的数字转换信号。其生成的符号元件原理图如右图所示:调用modelsim进展门级仿真波形结果如下:Datain、EOC、CLK:输入端Dataut、OE、ALE、START、AD
13、D:输出端当输入时钟信号时,八位数字量在EOC有高电位变为低电位时,标志着A/D转换完毕。当oe为上升沿时,在dataout输出对应的datain值。(二) Dataprocesslibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dataprocess isport(b_datain:in std_logic_vector(7 downto 0); b_dataout:out std_logic_vector(11 downto 0);end dataprocess;architecture one of dataprocess issignal middata:std_logic_vector(7 downto 0);signal vdata:std_logic_vector(11 downto 0);signal hdata:std