⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysctrl.vhd

📁 vhdl写的电子钟例程
💻 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 + -