模6计数器的VHDL源程序如下:
process(clear,clk)
begin
if (clear='1') then
tmp<="0000";
carryout<='0';
elsif(clk'event and clk='1') then
if (rst='0') then
if (tmp="0101") then
carryout<='1';
tmp<="0000";
else
tmp<=tmp 1;
carryout<='0';
end if;
end if;
end if;
process(datainput)
begin
case datainput is
when "0000"=>dataoutput<="0000010";
when "0001"=>dataoutput<="1001111";
when "0010"=>dataoutput<="0010001";
when "0011"=>dataoutput<="0000101";
when "0100"=>dataoutput<="1001100";
when "0101"=>dataoutput<="0100100";
when "0110"=>dataoutput<="0100000";
when "0111"=>dataoutput<="0001111";
when "1000"=>dataoutput<="0000000";
when "1001"=>dataoutput<="0000100";
when others=>dataoutput<="1111111";
end case;
end process;
3 功能验证以及下载实现
完成以上各个子模块的设计后,该数字秒表的模块设计就基本完成了,剩下的工作就是通过一个顶层文件将各个子模块连接起来。在顶层文件中可以将以上各个子模块看作一个个黑匣子,只将其输入输出端对应相连就可以了。下面是该顶层文件的VHDL源程序:
architecture Behavioral of topfile is
signal clk:std_logic:='0';
signal enableout:std_logic:='0';
signal data0,data1,data2,
data3,data4,data5:std_logic_vector(3
downto 0):="0000";
component abc
port(clk:in std_logic;
dout:out std_logic);
end component;
component enable
port(enablein:in std_logic;
enableout:out std_logic);
end component;
component highlevel
port(rst,clk,clear:in std_logic;
output1,output2,output3,
output4,output5,output6:out
std_logic_vector(3 downto 0);
carryout:out std_logic);
end component;
component yima
port(datainput:in std_logic_vector(3 downto 0);
dataoutput: out std_logic_vector(6 downto 0));
end component;
begin
u0:abc port map(clkin,clk);
u1:enable port map(enablein,enableout);
u2:highlevel port map(enableout,clk,clear,data0,data1,data2,data3,data4,data5);
u3:yima port map(data0,dataout0);
u4:yima port map(data1,dataout1);
u5:yima port map(data2,dataout2);
u6:yima port map(data3,dataout3);
u7:yima port map(data4,dataout4);
u8:yima port map(data5,dataout5);
end Behavioral;