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

📄 cpld

📁 《CPLD开发实例》的配套光盘文件
💻
字号:
library IEEE ;
use IEEE.std_logic_1164.all ;
use IEEE.std_logic_arith.all ;
ENTITY counters IS
	PORT
	(
		d		: IN 	INTEGER RANGE 0 TO 255;
		clk		: IN	BIT;
		clear	: IN	BIT;
		ld		: IN	BIT;
		enable	: IN	BIT;
		up_down	: IN	BIT;
		qa		: OUT 	INTEGER RANGE 0 TO 255;
		qb		: OUT 	INTEGER RANGE 0 TO 255;
		qc		: OUT 	INTEGER RANGE 0 TO 255;
		qd		: OUT 	INTEGER RANGE 0 TO 255;
		qe		: OUT 	INTEGER RANGE 0 TO 255;
		qf		: OUT 	INTEGER RANGE 0 TO 255;
		qg		: OUT 	INTEGER RANGE 0 TO 255;
		qh		: OUT 	INTEGER RANGE 0 TO 255;
		qi		: OUT 	INTEGER RANGE 0 TO 255;
		qj		: OUT 	INTEGER RANGE 0 TO 255;
		qk		: OUT 	INTEGER RANGE 0 TO 255;
		ql		: OUT 	INTEGER RANGE 0 TO 255;
		qm		: OUT 	INTEGER RANGE 0 TO 255;
		qn		: OUT 	INTEGER RANGE 0 TO 255
	);
END counters;

ARCHITECTURE a OF counters IS
BEGIN
	                                                --带使能的计数器
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
	BEGIN
		IF (clk'EVENT AND clk = '1') THEN
			IF enable = '1' THEN
				cnt := cnt + 1;
			END IF;
		END IF;
				qa	<= cnt;
	END PROCESS;

	                                                --带同步的计数器
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
	BEGIN
		IF (clk'EVENT AND clk = '1') THEN
			IF ld = '0' THEN
				cnt := d;
			ELSE
				cnt := cnt + 1;
			END IF;
		END IF;
		qb	<=	cnt;
	END PROCESS;
	                                                --带同步清零的计数器
	
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
	BEGIN
		IF (clk'EVENT AND clk = '1') THEN
			IF clear = '0' THEN
				cnt := 0;
			ELSE
				cnt := cnt + 1;
			END IF;
		END IF;
		qc	<=	cnt;
	END PROCESS;
	                                                --带up/down的计数器
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
		VARIABLE	direction 	: INTEGER;
	BEGIN
		IF (up_down = '1') THEN
			direction := 1;
		ELSE
			direction := -1;
		END IF;
			IF (clk'EVENT AND clk = '1') THEN
			cnt := cnt + direction;
		END IF;
		qd	<=	cnt;
	END PROCESS;
	                                                --带同步预置的计数器
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
	BEGIN
		IF (clk'EVENT AND clk = '1') THEN
			IF ld = '0' THEN
				cnt := d;
			ELSE
				IF enable = '1' THEN
					cnt := cnt + 1;
				END IF;
			END IF;
		END IF;
		qe	<=	cnt;
	END PROCESS;
	                                                --带up/down使能的计数器
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
		VARIABLE	direction 	: INTEGER;
	BEGIN
		IF (up_down = '1') THEN
			direction := 1;
		ELSE
			direction := -1;
		END IF;
		
		IF (clk'EVENT AND clk = '1') THEN
			IF enable = '1' THEN
				cnt := cnt + direction;
			END IF;
		END IF;
		qf	<=	cnt;
	END PROCESS;
	                                                --带同步清零的计数器
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
	BEGIN
		IF (clk'EVENT AND clk = '1') THEN
			IF clear = '0' THEN
				cnt := 0;
			ELSE
				IF enable = '1' THEN
					cnt := cnt + 1;
				END IF;
			END IF;
		END IF;
		qg	<=	cnt;
	END PROCESS;
	                                                --带同步预置清零的计数器
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
	BEGIN
		IF (clk'EVENT AND clk = '1') THEN
			IF clear = '0' THEN
				cnt := 0;
			ELSE
				IF ld = '0' THEN
					cnt := d;
				ELSE
					cnt := cnt + 1;
				END IF;
			END IF;
		END IF;
		qh	<=	cnt;
	END PROCESS;
	                                                --带up/down同步预置的计数器
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
		VARIABLE	direction 	: INTEGER;
	BEGIN
		IF (up_down = '1') THEN
			direction := 1;
		ELSE
			direction := -1;
		END IF;
		IF (clk'EVENT AND clk = '1') THEN
			IF ld = '0' THEN
				cnt := d;
			ELSE
				cnt := cnt + direction;
			END IF;
		END IF;
		qi	<=	cnt;
	END PROCESS;
	                                                --带up/down同步预置、使能的计数器
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
		VARIABLE	direction 	: INTEGER;
	BEGIN
		IF (up_down = '1') THEN
			direction := 1;
		ELSE
			direction := -1;
		END IF;
		
		IF (clk'EVENT AND clk = '1') THEN
			IF ld = '0' THEN
				cnt := d;
			ELSE
				IF enable = '1' THEN
					cnt := cnt + direction;
				END IF;
			END IF;
		END IF;
		qj	<=	cnt;
	END PROCESS;
	                                                --带同步预置清零、使能的计数器
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
	BEGIN
		IF (clk'EVENT AND clk = '1') THEN
			IF clear = '0' THEN
				cnt := 0;
			ELSE
				IF ld = '0' THEN
					cnt := d;
				ELSE
					IF enable = '1' THEN
						cnt := cnt + 1;
					END IF;
				END IF;
			END IF;
		END IF;
		qk	<=	cnt;
	END PROCESS;
	                                                --带up/down同步清零、使能的计数器

	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
		VARIABLE	direction 	: INTEGER;
	BEGIN
		IF (up_down = '1') THEN
			direction := 1;
		ELSE
			direction := -1;
		END IF;
		IF (clk'EVENT AND clk = '1') THEN
			IF clear = '0' THEN
				cnt := 0;
			ELSE
				cnt := cnt + direction;
			END IF;
		END IF;
		ql	<=	cnt;
	END PROCESS;
	                                                --带up/down同步清零、使能的计数器
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
		VARIABLE	direction 	: INTEGER;
	BEGIN
		IF (up_down = '1') THEN
			direction := 1;
		ELSE
			direction := -1;
		END IF;
		IF (clk'EVENT AND clk = '1') THEN
			IF clear = '0' THEN
				cnt := 0;
			ELSE
				IF enable = '1' THEN
					cnt := cnt + direction;
				END IF;
			END IF;
		END IF;
		qm	<=	cnt;
	END PROCESS;
                                            -- modulus=200
	PROCESS (clk)
		VARIABLE	cnt			: INTEGER RANGE 0 TO 255;
		CONSTANT	modulus 	: INTEGER := 200;
	BEGIN
		IF (clk'EVENT AND clk = '1') THEN
			IF cnt = modulus THEN
				cnt := 0;
			ELSE
				cnt := cnt + 1;
			END IF;
		END IF;
		qn	<=	cnt;
		END PROCESS;
END a;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -