if(clear='1')then
q1<=\ else
if(clk'event and clk='1')then
if(q1=\到59 q1<=\ elsif(q1<\ q0<=\ elsif(q0<\ q0<=q0+'1'; end if; end if; end if; k1<=q1; k0<=q0; end process; end cnt;
c 60 进制仿真波形图:
本模块端口说明:clk为脉冲信号输入端;clear为置0端,并且高电平有效,用来在校时时秒位清零;c为进位输入端;k1和k0分别是秒或分的高位或低位,定义为std_logic_vector(3 downto 0),用来分别在数码管中显示读数.
功能说明:以clk和clear而敏感变量,先判断clear是否为1,若为1则k1种k0都为”0000”;如果不为0,则执行累加;否则,再判断高位是否为5,若为5则进位输出为1、低位和高位都赋予0,若不为5则高位加1,低位赋予0.从而实现了60进制的累加.
7扫描显示及译码模块
a动态扫描模块包含一个六路选择器和一个七段译码器,其生成的元器件分别为:
b源程序代码为:
为完成动态显示模块设计了一个六路选择器和一个七段译码器。其源程序代码分别为: library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity yima_31 is -------七段译码器 port(d:in std_logic_vector(3 downto 0); y:out std_logic_vector(6 downto 0)); end yima_31;
architecture yima of yima_31 is begin process(d) begin case d is
when\ when\ when\ when\ when\ when\ when\ when\ when\ when\ when\ when others=>y<=\
end case; end process;
end yima;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity select6_1_31 is
port (clk:in std_logic;
a0,a1,a2,a3,a4,a5:in std_logic_vector(3 downto 0); sel:out std_logic_vector(3 downto 0); b0,b1,b2,b3,b4,b5:out std_logic); end select6_1_31;
architecture select6_1 of select6_1_31 is signal ss:std_logic_vector(3 downto 0); signal ww:std_logic_vector(2 downto 0); begin process(clk) begin
if(clk'event and clk='1')then if (ww<\ ww<=ww+1; else
ww<=\ end if; case ww is when \ ss<=a0; b0<='1'; b1<='0'; b2<='0'; b3<='0'; b4<='0'; b5<='0'; when \ ss<=a1; b0<='0'; b1<='1'; b2<='0'; b3<='0'; b4<='0'; b5<='0'; when \ ss<=a2; b0<='0'; b1<='0'; b2<='1'; b3<='0'; b4<='0'; b5<='0'; when \
ss<=a3; b0<='0'; b1<='0'; b2<='0'; b3<='1'; b4<='0'; b5<='0'; when \ ss<=a4; b0<='0'; b1<='0'; b2<='0'; b3<='0'; b4<='1'; b5<='0'; when \ ss<=a5; b0<='0'; b1<='0'; b2<='0'; b3<='0';
b4<='0'; b5<='1';
when others=>ss<=\ end case; end if; sel<=ss; end process; end select6_1;
c 动态显示模块的源图为:
本模块端口说明:ao、a1、a2、a3、a4、a5分别为时、分、秒的输入端,定义为std_logic_vector(3 downto 0);sel为七端显示管的输出,定义为std_logic_vector(3 downto 0); bo、b1、b2、b3、b4、b5分别为地址扫描端,定义为std_logic_vector(5 downto 0),某一时刻只有一个为1,对应的数组号即为当前扫描的数码管的编号.
六.设计中出现的问题以及体会
这次多功能数字钟的课程设计中,我出现了很多问题,尤其是当一个程序写完之后进行编译的时候出现了很多的错误,包括语法错误和算法错误,有时候在改正一个错误后又出现了很多错误,当时和灰心,但在老师和同学的帮助下,我解决了这个问题。语法错误相对比较好修改,但是算法错误就比较难找出了,比如在画顶层时,当把器件连接起来进行下载编译时,出现了比较多的问题,比如:数字钟不计数、扬声器从一开始就一直在响等等问题,这些都让我困惑了很久,后来在同学的帮助下找到了问题所在并进行了一些修改,知道问题全部解决了,这才松了口气。
在这次的数字逻辑电路的课程设计中,我出现了非常多的错误,这才深深的感觉到自己在学数字逻辑电路这门课方面的学习是非常欠缺的。
以前上课的时候只是对课本或者老师的课件进行理论学习,很少动手操作,了解的也只是单个的器件或者的某个程序的一部分,这显然是不够的,而在为期一周的课程设计中,我学会了如何利用基本器件制作综合器件,如何通过简单的器件和门电路的综合实现某种功能,并对MaxplusII软件操作有了进一步了解和熟悉。
通过这次的课程设计之后,我们的数字电路、数字系统的综合设计能流利进一步提高了,同时让我们对isp器件的开发工具—Synario软件的开发应用能力,虽然只是了解到冰山一角,但我相信在以后的学习过程中,我们一定会好好学习相关的知识以及我们其他专业课程的相关知识,争取能够更进一步的了解MaxplusII软件和isp器件的开发工具—Synario软件的开发和应用,最好能够是理论联系实际的,既能够在理论方面了解又能够实际动手自己实现一些功能。相信这也是我们学习的最终目的。