《EDA技术综合设计》课程设计报告报告题目:计数器7段数码管控制接口技术作者所在系部:作者所在专业:作者所在班级:作者姓名:作者学号:指导教师姓名:完成时间:内容摘要掌握VHDL语言基本知识,并熟练运用VHDL语言来编写程序,来下载实践到硬件上,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。
利用VHDL语言设计一个七段数码管控制引脚,在时钟信号的控制下,使6位数码管动态刷新显示十进制计数器及其进位,十二进制计数器,四位二进制可逆计数器,六十进制计数器的计数结果,这期间需要seltime分频器来动态的给各个计数器分配数码管,并显示数字的变化。
关键词:VHDL语言编程七段数码管控制引脚芯片目录一概述 (1)二方案设计与论证 (1)三单元电路设计与参数计算 (1)3.1数码管译码器 (1)3.2 十进制计数器 (2)3.3六十进制计数器 (3)3.4四位二进制可逆计数器 (5)3.5时间数据扫描分时选择模块 (6)3.6顶层文件 (8)四总的原理图 (9)五器件编程与下载 (9)六性能测试与分析(要围绕设计要求中的各项指标进行) (10)七实验设备 (10)八心得体会 (10)九参考文献 (10)课程设计任务书课题名称7段数码管控制引脚完成时间2011.12.12指导教师胡辉职称副教授学生姓名庄仲班级B09212 总体设计要求和技术要点通过本课程的学习使学生掌握可编程器件、EDA开发系统软件、硬件描述语言和电子线路设计与技能训练等各方面知识;提高工程实践能力;学会应用EDA技术解决一些简单的电子设计问题。
具体要求:1.设计一个共阴7段数码管控制接口,在硬件时钟电路的基础上,采用分频器,输出一个1S的时钟信号,同时显示2、3、4所要求的计数器。
2.设计一个带使能输入、进位输出及同步清0的增1十进制计数器。
3.设计一个带使能输入及同步清0的六十进制同步加法计数器;4.设计一个四位二进制可逆计数器;工作内容及时间进度安排第16周:周一、周二:设计项目的输入、编译、仿真周三:器件编程下载与硬件验证周四:成果验收与总结周五:撰写课程设计总结报告课程设计成果把编写好的程序下载到试验箱,使数码管能够按照编写的程序显示出正确的结果,实验成功。
一、概述设计一个共阴7段数码管控制接口,在硬件时钟电路的基础上,采用分频器,输出一个1S的时钟信号。
一个带使能输入、进位输出及同步清0的增1十进制计数器。
一个带使能输入及同步清0的六十进制同步加法计数器和一个四位二进制可逆计数器。
要求:在时钟信号的控制下,使6位数码管动态刷新显示上述计数器的计数结果。
二、方案设计与论证首先VHDL语言编写底层文件和三个计数器的程序,再编写分频器和数码管的程序,最后用例化语句编写顶层文件,分别都调试在确认无误后把顶层文件下载到试验箱,连接导线,完成后实现在时钟信号的控制下,6位数码管动态刷新显示三个计数器的技术结果。
三、单元电路设计1.数码管译码器程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity deled isport(num:in std_logic_vector(3 downto 0);led:out std_logic_vector(6 downto 0));end deled;architecture fun of deled isbegin-- abcdefgled<="1111110"when num="0000"else"0110000"when num="0001"else"1101101"when num="0010"else"1111001"when num="0011"else"0110011"when num="0100"else"1011011"when num="0101"else"1011111"when num="0110"else"1110000"when num="0111"else"1111111"when num="1000"else"1111011"when num="1001"else"1110111"when num="1010"else"0011111"when num="1011"else"1001110"when num="1100"else"0111101"when num="1101"else"1001111"when num="1110"else"1000111"when num="1111";end fun;原理图2.十进制计数器程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport(clk,clr,en:in std_logic;co:out std_logic;q:buffer std_logic_vector(3 downto 0));end cnt10;architecture behave of cnt10 isbeginprocess(clk,clr,en)beginif(en='0')then q<="0000";elsif(clk'event and clk='1')then if(clr='1')then q<="0000";elsif(q=9)then q<="0000";co<='1';else q<=q+1;co<='0';end if;end if;end process;end behave;原理图仿真波形图3.六十进制计数器程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt60 ISPORT(clk,clr,en:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END cnt60;ARCHITECTURE behave OF cnt60 ISSIGNAL qh,ql:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk,clr,en)BEGINIF(en='1')THEN ql<="0000";qh<="0000";ELSIF(clk'event and clk='1')THENIF(clr='1')THEN ql<="0000";qh<="0000"; ELSIF(ql=9)THEN ql<="0000";IF(qh=5)THEN qh<="0000";ELSE qh<=qh+1;END IF;ELSE ql<=ql+1;END IF;END IF;q<=qh&ql;END PROCESS;END behave;原理图波形图4.四位二进制可逆计数器程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity kn4 isport(clk,clr,plus_sub:in std_logic;q:buffer std_logic_vector(3 downto 0));end kn4;architecture behave of kn4 isbeginprocess(clk,clr,plus_sub)beginif(clk'event and clk='1')thenif(clr='1')then q<="0000";elsif(plus_sub='1')thenif(q=15)then q<="0000";else q<=q+1;end if;elsif(plus_sub='0')thenif(q=0)then q<="1111";else q<=q-1;end if;end if;end if;end process;end behave;原理图波形图5.时间数据扫描分时选择模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity seltime isport(clk,reset,ci:in std_logic;Kn4,cnt10:in std_logic_vector(3 downto 0);cnt60:in std_logic_vector(7 downto 0);daout:out std_logic_vector(3 downto 0); dp:out std_logic;sel:out std_logic_vector(2 downto 0)); end seltime;architecture fun of seltime issignal count:std_logic_vector(2 downto 0);beginsel<=count;process(clk,reset)beginif(reset='0')thencount<="000";elsif(clk'event and clk='1')then if(count>="101")thencount<="000";elsecount<=count+1;end if;end if;case count iswhen"000"=>daout<=cnt10(3 downto 0);dp<='0';when"001"=>daout(3 downto 1)<="000";daout(0)<=ci;dp<='0';when"010"=>daout<=kn4(3 downto 0);dp<='0';when"011"=>daout<=cnt60(7 downto 4);dp<='0';when others=>daout<=cnt60(3 downto 0);dp<='0';end case;end process;end fun;原理图6.顶层文件程序library ieee;use ieee.std_logic_1164.all;entity ss_top isport(clk,clr,en,plus_sub,clkdsp:in std_logic;a,b,c,d,e,f,g,dpout:out std_logic;sel:out std_logic_vector(2 downto 0));end ss_top;architecture one of ss_top iscomponent cnt60port(clk,clr,en:in std_logic;q:out std_logic_vector(7 downto 0));end component;component kn4port(clk,clr,plus_sub:in std_logic;q:buffer std_logic_vector(3 downto 0));end component;component cnt10port(clk,clr,en:in std_logic;co:out std_logic;q:buffer std_logic_vector(3 downto 0));end component;component deledPORT(num:in std_logic_vector(3 downto 0);led:out std_logic_vector(6 downto 0));end component;component seltimeport(clk,reset,ci:in std_logic;cnt60:in std_logic_vector(7 downto 0);kn4:in std_logic_vector(3 downto 0);cnt10:in std_logic_vector(3 downto 0); dp:out std_logic;daout:out std_logic_vector(3 downto 0);sel:out std_logic_vector(2 downto 0));end component;signal cnt60_out:std_logic_vector(7 downto 0);signal kn4_out:std_logic_vector(3 downto 0);signal cnt10_out:std_logic_vector(3 downto 0);signal cnt10_co:std_logic;signal ledout:std_logic_vector(6 downto 0);signal seltime_out:std_logic_vector(3 downto 0);Begina<=ledout(6);b<=ledout(5);c<=ledout(4);d<=ledout(3);e<=ledout(2);f<=ledout(1);g<=ledout(0);u1:deled port map(num=>seltime_out,led=>ledout);u2:cnt10 port map(clk=>clk,clr=>clr,en=>en,co=>cnt10_co,q=>cnt10_out);u3:cnt60 port map(clk=>clk,clr=>clr,en=>en,q=>cnt60_out);u4:kn4 port map(clk=>clk,clr=>clr,plus_sub=>plus_sub,q=>cnt16_out);u5:seltimeport map(clk=>clkdsp,reset=>clr,ci=>cnt10_co,cnt60=>cnt60_out,kn4=>kn4_out,cnt10=>cnt10_out,daout=>seltime_out,dp=>dpout,sel=>sel);end one;四、总的原理图五、器件编程与下载用VHDL语言编译四种计数器的、译码器和分时器的程序,然后把他们用例化语句编译成顶层文件,仿真成功以后下载到试验箱通过数码管显示出结果,试验成功。