📄 sysctrl.vhd
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY sysctrl IS
PORT( clk1 : IN STD_LOGIC;
clk2 : IN STD_LOGIC;
clk3 : IN STD_LOGIC;
clk4 : IN STD_LOGIC;
rst : IN STD_LOGIC;
set : IN STD_LOGIC;
sel : IN STD_LOGIC;
adj : IN STD_LOGIC;
clock: OUT STD_LOGIC;
adjo: OUT STD_LOGIC;
adjst: OUT STD_LOGIC_VECTOR(4 DOWNTO 0);
disable:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
tsel : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
dis6 : OUT STD_LOGIC_VECTOR(5 DOWNTO 0)
);
END sysctrl;
ARCHITECTURE func1 OF sysctrl IS
SIGNAL dispb : STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL blink : STD_LOGIC_VECTOR(5 DOWNTO 0);
SIGNAL tflag : STD_LOGIC;
SIGNAL tmpset : STD_LOGIC;
SIGNAL tmpsel : STD_LOGIC;
BEGIN
PROCESS(clk4)
BEGIN
IF clk4'EVENT AND clk4 = '0' THEN
IF tmpset = '1' THEN
clock <= clk1;
ELSE
clock <= '0';
END IF;
END IF;
END PROCESS;
PROCESS(clk4,rst)
VARIABLE q6:INTEGER RANGE 0 TO 7;
BEGIN
IF(rst='0') THEN
q6:=0;
ELSIF(clk4'EVENT AND clk4='1') THEN
q6:=q6+1;
IF(q6=6) THEN
q6:=0;
END IF;
CASE q6 IS
WHEN 0 => dis6 <= "111110";
WHEN 1 => dis6 <= "111101";
WHEN 2 => dis6 <= "111011";
WHEN 3 => dis6 <= "110111";
WHEN 4 => dis6 <= "101111";
WHEN 5 => dis6 <= "011111";
WHEN OTHERS => dis6 <= "111111";
END CASE;
END IF;
dispb <=CONV_STD_LOGIC_VECTOR(q6,3);
tsel <=dispb;
END PROCESS;
PROCESS(rst,clk3)
BEGIN
IF rst = '0' THEN
tmpsel <= '1';
tmpset <= '1';
ELSIF clk3'EVENT and clk3 = '1' THEN
tmpsel <= sel;
tmpset <= set;
END IF;
END PROCESS;
PROCESS(rst,clk2)
BEGIN
IF rst = '0' THEN
tflag <= '0';
ELSIF clk2'EVENT and clk2 = '1' THEN
tflag <= NOT tflag;
END IF;
END PROCESS;
PROCESS(rst,tmpsel,tmpset)
BEGIN
IF rst = '0' OR tmpset = '1' THEN
blink <= "000001";
ELSIF tmpsel'EVENT and tmpsel = '0' THEN
IF blink = "000000" THEN
blink <= "000001";
ELSIF blink = "000001" THEN
blink <= "000010";
ELSIF blink = "000010" THEN
blink <= "000100";
ELSIF blink = "000100" THEN
blink <= "001000";
ELSIF blink = "001000" THEN
blink <= "110000";
ELSE
blink <= "000001";
END IF;
END IF;
END PROCESS;
disable <= blink WHEN tflag = '1' AND tmpset = '0' ELSE
"000000";
PROCESS(clk3)
BEGIN
IF clk3'EVENT AND clk3 = '0' THEN
IF tmpset = '0' THEN
adjst <= blink(4 DOWNTO 0);
ELSE
adjst <= "00000";
END IF;
END IF;
END PROCESS;
PROCESS(clk3,tmpset)
BEGIN
IF tmpset = '1' THEN
adjo <= '0';
ELSIF clk3'EVENT and clk3 = '1' THEN
adjo <= NOT adj;
END IF;
END PROCESS;
END func1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -