北华航天工业学院《EDA技术综合设计》课程设计报告报告题目:计数器及数码显示综合设计作者所在系部:电子工程系作者所在专业:自动化专业作者所在班级:B11222作者姓名:指导教师姓名:崔瑞雪完成时间:内容摘要在quatrusII 中利用VHDL语言编写数码管显示程序,然后进行功能仿真,然后进行锁定引脚,然后硬件进行下载,调试。
关键词: VHDL,数码管显示,quatrusII,时序仿真图。
目录内容摘要 (I)目录................................................................................................................................................................... I I 课程设计任务书. (III)一、实验目的 (1)二、硬件要求 (1)三、方案论证 (1)四、模块说明 (2)1.计数器(counter60) (2)2.计数器(counter16) (3)3.计数器(counter12) (4)4.计数器(counter10) (5)6.译码器(deled) (7)7.分频器(div) (8)8.顶层文件 (9)五、图7计数显示的整体连接图 (11)六、实验步骤 (11)七、实验结果 (12)八、总结 (12)九、参考文献 (12)课程设计任务书一、实验目的1.熟悉QUARATEⅡ工具软件2.熟悉VHDL语言设计3.学习EDA课程的综合设计4.学习计数器的VHDL语言设计5.了解器件编程和下载及硬件接口连接.二、硬件要求1.主芯片EPF10K10LC84-4。
2.7个八段扫描共阴极数码显示管。
3.三个按键开关(使能端,清零端,可逆端)。
三、方案论证本次设计中将任务分成几个部来完成分别是:分频部分、十进制计数器、十二进制计数器、十六进制可逆计数器、六十进制计数器、译码部分、时间扫描模块和顶层文件。
分频部分:在这个部分里,接受20mhz的频率,然后分出1hz的计数频率和100hz 的扫描频率。
十进制计数器、十二进制计数器、六十进制计数器:在这个部分中要实现带使能输入、同步清0的增1十进制、十二进制、六十进制的计数器计数功能。
使能端en 高电平有效计数器开始计数,高电平停止计数,清零端CLR高电平清零低电平正常计数。
十六进制可逆计数器:在这个部分中要实现带使能输入、同步清0的增1十六进制的可逆计数器计数功能。
计数部分分为计数的个位和十位,使能端en高电平有效计数器开始计数,低电平停止计数,清零端rst高电平清零低电平计数,可逆计数器的控制端plus_sub低电平实现加法计数器的功能,高电平实现减法计数器的功能。
分时扫描及译码部分:在这个部分需设计一个共阴7段数码管控制接口,在时钟信号的控制下,分时选择数码管显示相应计数器的计数脉冲,使7位数码管动态刷新显示4个计数器的计数结果,并将送来的计数器的计算值转换为相应的段码在数码管上显示计数脉冲的个数。
顶层文件:在这一部分确定上述几个部分中相应输入输出端口的连接关系。
四、模块说明计数器及数码显示的设计共化分为3个模块:计数器,扫描电路(seltime),译码电路(deled)。
下面具体分析各个模块的原理、内容和功能。
1.计数器(counter60)能够实现60进制循环计数,带有清零端clr ,受时钟上升沿信号控制,其文本语言(文件名:count60er.vhd)为底层文本,图1为计数器的仿真波形图。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter60 isport(en,clr,clk:in std_logic;ql,qh:buffer std_logic_vector(3 downto 0));end counter60;architecture behave of counter60 isbeginprocess(en,clr,clk)beginif(en='1')thenif(clk'event and clk='1')thenif(clr='1')thenql<=(others=>'0');qh<=(others=>'0');elsif(ql=9)thenif(qh=5)thenqh<="0000";ql<="0000";elseqh<=qh+1;ql<="0000";end if;elseql<=ql+1;end if;end if;end if;end process;end behave;图1. 六十进制秒计数器的仿真波形2.计数器(counter16)能够实现16进制可逆循环计数,带有清零端clr ,受时钟上升沿信号控制,其文本语言(文件名:count16er.vhd)为底层文本,图2为计数器的仿真波形图。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter16 isport(en,clr,clk:in std_logic;plus_sub:in std_logic;ql,qh:buffer std_logic_vector(3 downto 0));end counter16;architecture behave of counter16 isbeginprocess(en,clr,clk,plus_sub)beginif(en='1')thenif(clk'event and clk='1')thenif(clr='1')thenql<=(others=>'0');qh<=(others=>'0');elsif(plus_sub='1')thenif(qh=1 and ql=5)thenql<="0000";qh<="0000";elsif(ql=9)thenqh<="0001";ql<="0000";elseql<=ql+1;end if;elsif(plus_sub='0')thenif(qh=0 and ql=0)thenql<="0101";qh<="0001";elsif(ql=0)thenql<="1001";qh<="0000";elseql<=ql-1;end if;end if;end if;end if;end process;endbehave;图2. 十六进制分计数器的仿真波形3.计数器(counter12)能够实现12进制循环计数,带有清零端clr ,受时钟上升沿信号控制,其文本语言(文件名:count12er.vhd)为底层文本,图3为计数器的仿真波形图。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter12 isport(en,clr,clk:in std_logic;ql,qh:buffer std_logic_vector(3 downto 0));end counter12;architecture behave of counter12 isbeginprocess(en,clr,clk)beginif(en='1')thenif(clk'event and clk='1')thenif(clr='1')thenqh<=(others=>'0');elsif(qh=1 and ql=1)thenql<="0000";qh<="0000";elsif(ql=9)thenqh<="0001";ql<="0000";elseql<=ql+1;end if;end if;end if;end process;end behave;图3. 十二进制分计数器的仿真波形4.计数器(counter10)能够实现10进制循环计数,带有清零端clr ,受时钟上升沿信号控制,其文本语言(文件名:count10er.vhd)为底层文本,图4为计数器的仿真波形图。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter10 isport(en,clr,clk:in std_logic;q:buffer std_logic_vector(3 downto 0));end counter10;architecture behave of counter10 isbeginprocess(clr,clk,en)beginif(en='1') thenif(clk'event and clk='1')thenif(clr='1')thenelsif(q=9)thenq<="0000";elseq<=q+1;end if;end if;end if;end process;end behave;图4. 十进制分计数器的仿真波形5.扫面器(seltime)此模块能够实现分别对前边的数值进行扫描,有清零段,复位段,以及上升沿有效,其文本语言(文件名:seltime.vhd)为底层文本,图5为计数器的仿真波形图。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity seltime isport(clk1,ret:in std_logic;q10,q12l,q12h,q16l,q16h,q60l,q60h:in std_logic_vector(3 downto 0);q:out std_logic_vector(3 downto 0);sel:out std_logic_vector( 2 downto 0));end seltime;architecture behave of seltime issignal count:std_logic_vector(2 downto 0);beginsel<=count;process(clk1,ret)beginif(ret='1')thencount<="001";elsif(clk1'event and clk1='1')thenif(count=7)thencount<="001";elsecount<=count+1;end if;end if;case count iswhen"001"=>q<=q16h;when"010"=>q<=q16l;when"011"=>q<=q60h;when"100"=>q<=q60l;when"101"=>q<=q12h;when"110"=>q<=q12l;when"111"=>q<=q10;when others=>null;end case;end process;end behave;图5. 扫描器的仿真波形6.译码器(deled)此模块能够实现分别对前边的数值进行扫描,有清零段,复位段,以及上升沿有效,其文本语言(文件名:deled.vhd)为底层文本,图6为计数器的仿真波形图。