邵阳学院课程设计
本设中秒、分的六十进制是由个位的十进制和十位的六进制进行组合实现的。当个位记到9时自动向高位进一,同时个位自动清零。当十位记到5并且个位记到9时,自动产生一个进位脉冲,同时个位和十位分别从零开始重新计数。
由VHDL语言生成的模块图和程序说明如下:
图3.4六十进制模块
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity cantsixty is port(clk:in std_logic; reset:in std_logic;
out1:out std_logic_vector(3 downto 0); out2:out std_logic_vector(3 downto 0); c:out std_logic); end;
architecture beh of cantsixty is
signal ss1,ss2:std_logic_vector( 3 downto 0); begin
p1:process(clk,reset) begin
if(reset='0')then ss1<=\ elsif(clk'event and clk='1')then
if ss1=\--当计数到59时产生进位信号 else c<='0';--否则不产生 end if;
if ss1=\
8
邵阳学院课程设计
if ss2=\ else ss2<=ss2+1; end if;
else ss1<=ss1+1;--计数过程 end if; end if;
end process p1;--结束进程
out1<=ss1;out2<=ss2;--把信号送输出 end beh;
3.1.5时计数模块hourtwenty
时计数模块是二十四进制相对复杂一点,因为当十位0或着1时个位需要记到9并产生进位信号,当十位是2时,个位记到3时,就全部从零开始重新计数。即是在十位为不同值时个位两种计数过程。
由VHDL语言生成的模块图和程序说明如下:
图3.5时计数模块
3.1.6秒、分、时组合后的模块
把设计的秒、分、时模块连接起来,再通过仿真验证,各模块间的进位是否正确 连接后的原理图如下
图3.6秒、分、时组合后原理图
9
邵阳学院课程设计
3.1.7数码管显示模块
本模块中包含数码管的段选和位选设计,Led灯循环设计,以及整点报时的设计。模块的输入信号有数码管扫描频率clk2ms,秒、分、时各模块的个位和十位输入,以及由分模块向时模块产生的进位脉冲信号。
由VHDL语言生成的模块图和程序说明如下:
图3.7数码管显示原理图
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity qudong is
port(s1,s2,m1,m2,h1,h2:in std_logic_vector(3 downto 0); clk2ms: in std_logic; xiang:in std_logic;
signal sel:std_logic_vector( 2 downto 0); signal A:std_logic_vector( 3 downto 0); signal t:std_logic_vector ( 11 downto 0); signal f:std_logic_vector(1 downto 0); signal count1:std_logic_vector(1 downto 0); begin
p1:process(clk2ms) begin
if clk2ms'event and clk2ms='1' then sel<=sel+1;t<=t+1; if t=\
10
邵阳学院课程设计
end if; end if; f<=t(11)&t(10);
if f=\ then led(3)<='0';else led(3)<='1'; end if;
if f=\ then led(2)<='0';else led(2)<='1'; end if;
if f=\end if;--led的循环显示设计 end process p1;
p2:process(sel,s1,s2,m1,m2,h1,h2) begin case sel is
when \--秒个位在数码管1上显示 when \--秒十位在数码管2上显示 when \--数码管3上显示横杠 when \--分个位在数码管4上显示 when \--分十位在数码管5上显示 when \--数码管6上显示横杠 when \--时个位在数码管7上显示 when \--时十位在数码管8上显示 when others =>null; end case; end process p2; p3:process(A) begin case A is
when \ --显示0 when \ --显示1 when \ --显示2 when \ --显示3
11

