|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
为什么我的不对?为什么小时个位(cp5)是零的时候不能计数,好像是清零信号,把小时位都清零了。请高手指教下!
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity counter1000000 is
Port ( clk : in STD_LOGIC;--时钟
en : in STD_LOGIC;--使能
clr : in STD_LOGIC;--清零
set:in std_logic_vector(1 downto 0);--置数选择秒分时
data:in std_logic_vector(6 downto 0);--低4位置个位,高3位置十位
q1,q2,q3,q4,q5,q6 : out STD_LOGIC_VECTOR (3 downto 0);--分别是秒的个位和十位、分的个十位、时的个十位
cout : out STD_LOGIC);--24小时溢位输出
end counter1000000;
architecture Behavioral of counter1000000 is
signal cq1,cq2,cq3,cq4,cq5,cq6:std_logic_vector(3 downto 0);
begin
process(clk,en,clr,set,cq1,cq2,cq3,cq4,cq5,cq6)
begin
if clk'event and clk='1' then
if clr='1' then
cq1<="0000";
cq2<="0000";
cq3<="0000";
cq4<="0000";
cq5<="0000";
cq6<="0000";
elsif set/="00" then
case set is
when "01"=>cq1<=data(3 downto 0);cq2(2 downto 0)<=data(6 downto 4);
when "10"=>cq3<=data(3 downto 0);cq4(2 downto 0)<=data(6 downto 4);
when "11"=>cq5<=data(3 downto 0);cq6(2 downto 0)<=data(6 downto 4);
when others=>null;
end case;
elsif en='1' then
if cq1="1001" then cq1<="0000";
if cq2="0101" then cq2<="0000";
if cq3="1001" then cq3<="0000";
if cq4="0101" then cq4<="0000";
if cq6<="0010" and cq5<="0011" then cq5<="0000";cq6<="0000";cout<='1';--应该是这的问题,但是逻辑上没有问题啊!
elsif cq5="1001" then cq5<="0000";cq6<=cq6+1;
else cq5<=cq5+1;
end if;
else cq4<=cq4+1;
end if;
else cq3<=cq3+1;
end if;
else cq2<=cq2+1;
end if;
else cq1<=cq1+1;
end if;
end if;
end if;
q1<=cq1;
q2<=cq2;
q3<=cq3;
q4<=cq4;
q5<=cq5;
q6<=cq6;
end process;
end Behavioral; |
|