BEGIN
PROCESS(CLK)
VARIABLE COUNT1:STD_LOGIC_VECTOR(23 DOWNTO 0);
VARIABLE COUNT2:STD_LOGIC_VECTOR(13 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
COUNT1:=COUNT1+1;
COUNT2:=COUNT2+1;
IF ((COUNT1>="010110111000110110000000") AND (COUNT1<="101101110001101100000000") ) THEN
CLK_1HZ<='1';
ELSIF ((COUNT1<="010110111000110110000000") AND(COUNT1>="000000000000000000000000")) THEN
CLK_1HZ<='0';
IF COUNT1="101101110001101100000000" THEN
COUNT1:="000000000000000000000000";
END IF;
END IF;
IF ((COUNT2>="01011101110000") AND (COUNT2<="10111011100000")) THEN
CLK_1KHZ<='1';
ELSIF ((COUNT2<="01011101110000")AND(COUNT2>="00000000000000")) THEN
CLK_1KHZ<='0';
IF(COUNT2="10111011100000") THEN
COUNT2:="00000000000000";
END IF;
END IF;
END IF;
END PROCESS;
END BHV;
完整代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CLK_SEP IS
PORT(CLK:IN STD_LOGIC;
CLK_1HZ:OUT STD_LOGIC;
CLK_1KHZ:OUT STD_LOGIC);
END CLK_SEP;
ARCHITECTURE BHV OF CLK_SEP IS
BEGIN
PROCESS(CLK)
VARIABLE COUNT1:STD_LOGIC_VECTOR(23 DOWNTO 0);
VARIABLE COUNT2:STD_LOGIC_VECTOR(13 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
COUNT1:=COUNT1+1;
COUNT2:=COUNT2+1;
IF ((COUNT1>="010110111000110110000000") AND (COUNT1<="101101110001101100000000") ) THEN
CLK_1HZ<='1';
ELSIF ((COUNT1<="010110111000110110000000") AND(COUNT1>="000000000000000000000000")) THEN
CLK_1HZ<='0';
IF COUNT1="101101110001101100000000" THEN
COUNT1:="000000000000000000000000";
END IF;
END IF;
IF ((COUNT2>="01011101110000") AND (COUNT2<="10111011100000")) THEN
CLK_1KHZ<='1';
ELSIF ((COUNT2<="01011101110000")AND(COUNT2>="00000000000000")) THEN
CLK_1KHZ<='0';
IF(COUNT2="10111011100000") THEN
COUNT2:="00000000000000";
END IF;
END IF;
END IF;
END PROCESS;
END BHV;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNT_10 IS
PORT(clk,clr,en:IN STD_LOGIC;
qa1,qb1,qc1,qd1,Q_OUT:OUT STD_LOGIC);
END COUNT_10;
ARCHITECTURE rtl OF COUNT_10 IS
SIGNAL count_4:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
qa1<=count_4(0);
qb1<=count_4(1);
qc1<=count_4(2);
qd1<=count_4(3);
PROCESS(clk,clr)
BEGIN
IF(clr='1')THEN
count_4<="0000";
ELSIF(clk'EVENT AND clk='1')THEN
IF(en='1')THEN
IF(count_4="1001")THEN
count_4<="0000";Q_OUT<='1';
ELSE
count_4<=count_4+'1';Q_OUT<='0';
END IF;
END IF;
END IF;
END PROCESS;
END rtl;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SMG_WXQ IS
PORT(
CLK:IN STD_LOGIC;
C_IN1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
C_IN2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
C_IN3:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
C_IN4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
C_OUNT:BUFFER STD_LOGIC_VECTOR(6 DOWNTO 0);
SMG_WX:out std_logic_vector(7 downto 0)
);
END SMG_WXQ;
ARCHITECTURE rtl OF SMG_WXQ IS
BEGIN
process(clk)
variable cnt : integer range 0 to 3 := 0;
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
IF cnt=0 THEN
SMG_WX<="00000001";
case C_IN1 is
when "0000"=>C_OUNT<="1111110";
when "0001"=>C_OUNT<="0000110";
when "0010"=>C_OUNT<="1101101";
when "0011"=>C_OUNT<="1111001";
when "0100"=>C_OUNT<="0110011";
when "0101"=>C_OUNT<="1011011";
when "0110"=>C_OUNT<="1011111";
when "0111"=>C_OUNT<="1110000";
when "1000"=>C_OUNT<="1111111";
when "1001"=>C_OUNT<="1111011";
when others=>C_OUNT<="0000000";
end case;
cnt:=cnt+1;
ELSIF cnt=1 THEN
SMG_WX<="00000010";
case C_IN2 is
when "0000"=>C_OUNT<="1111110";
when "0001"=>C_OUNT<="0110000";
when "0010"=>C_OUNT<="1101101";
when "0011"=>C_OUNT<="1111001";
when "0100"=>C_OUNT<="0110011";
when "0101"=>C_OUNT<="1011011";
when "0110"=>C_OUNT<="1011111";
when others=>C_OUNT<="0000000";
end case;
cnt:=cnt+1;
ELSIF cnt=2 THEN
SMG_WX<="00000100";
case C_IN3 is
when "0000"=>C_OUNT<="1111110";
when "0001"=>C_OUNT<="0000110";
when "0010"=>C_OUNT<="1101101";
when "0011"=>C_OUNT<="1111001";
when "0100"=>C_OUNT<="0110011";
when "0101"=>C_OUNT<="1011011";
when "0110"=>C_OUNT<="1011111";
when "0111"=>C_OUNT<="1110000";
when "1000"=>C_OUNT<="1111111";
when "1001"=>C_OUNT<="1111011";
when others=>C_OUNT<="0000000";
end case;
cnt:=cnt+1;
ELSIF cnt=3 THEN
SMG_WX<="00001000";
case C_IN4 is
when "0000"=>C_OUNT<="1111110";
when "0001"=>C_OUNT<="0110000";
when "0010"=>C_OUNT<="1101101";
when "0011"=>C_OUNT<="1111001";
when "0100"=>C_OUNT<="0110011";
when "0101"=>C_OUNT<="1011011";
when "0110"=>C_OUNT<="1011111";
when others=>C_OUNT<="0000000";
END CASE;
cnt:=0;
END IF;
END IF;
END PROCESS;
END rtl;