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

📄 choice1from6.vhd

📁 数字时钟vhdl实现
💻 VHD
字号:
--/*****************************************************************************
-- * 源文件:	choice1from6.vhd
-- * 模块:   	6选1选择器
-- * 版权:
-- *         	Copyright(C) 北京联华众科科技有限公司
-- *						www.lianhua-zhongke.com.cn
-- * 版本:  	Version 1.0
-- * 
-- * 功能说明:
-- *		   	以输入时钟为基准,循环从6路输入中选择一路输出,同时输出选择索
-- *			引数据, 如当选择输出data_in0时同时输出的索引数据为"111110"。
-- * 参数说明:
-- *	       	输出
-- *			led_bits - 从6路输入中选择输出的1路
-- *			led_cs - 选择索引,如当选择输出data_in0时同时输出的索引数据为
-- *					 "111110",其数据位数由参数digital_num设定
-- *			dp - 当前是否显示小数点,1表示显示,0表示不显示
-- *
-- *			输入
-- *			data_in0 - 第0路输入数据,数据宽度由参数bitwidth指定
-- *			data_in1 - 第1路输入数据,数据宽度由参数bitwidth指定
-- *			data_in2 - 第2路输入数据,数据宽度由参数bitwidth指定
-- *			data_in3 - 第3路输入数据,数据宽度由参数bitwidth指定
-- *			data_in4 - 第4路输入数据,数据宽度由参数bitwidth指定
-- *			data_in5 - 第5路输入数据,数据宽度由参数bitwidth指定
-- *			clk - 时钟
-- *			reset - 复位信号,低电平有效
-- *
-- *			参数
-- *			bitwidth - 数据位数
-- *			digital_num - 选择器输入数据路数
-- *
-- * 变更记录: 
-- *         2006.01.28, 新建
-- *
-- *****************************************************************************/

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

ENTITY choice1from6 IS
	GENERIC
	(
		bitwidth	: INTEGER RANGE 0 TO 15:=	4;
		digital_num	: INTEGER RANGE 0 TO 7 :=	6
	);
	PORT
	(
		led_bits		: OUT	STD_LOGIC_VECTOR(bitwidth-1 DOWNTO 0);
		led_cs			: BUFFER	STD_LOGIC_VECTOR(digital_num-1 DOWNTO 0);
		dp				: OUT	STD_LOGIC;

		data_in0		: IN	STD_LOGIC_VECTOR(bitwidth-1 DOWNTO 0);
		data_in1		: IN	STD_LOGIC_VECTOR(bitwidth-1 DOWNTO 0);
		data_in2		: IN	STD_LOGIC_VECTOR(bitwidth-1 DOWNTO 0);
		data_in3		: IN	STD_LOGIC_VECTOR(bitwidth-1 DOWNTO 0);
		data_in4		: IN	STD_LOGIC_VECTOR(bitwidth-1 DOWNTO 0);
		data_in5		: IN	STD_LOGIC_VECTOR(bitwidth-1 DOWNTO 0);
		
		clk				: IN	STD_LOGIC;
		reset			: IN	STD_LOGIC
	);
END choice1from6;

ARCHITECTURE choice1from6_architecture OF choice1from6 IS	
BEGIN

	PROCESS(clk, reset)
	VARIABLE next_led_cs : STD_LOGIC_VECTOR(digital_num-1 DOWNTO 0);
	BEGIN		
		IF (reset = '0') THEN
			led_bits <= "0000";
			led_cs <= "111111";
			next_led_cs := "111110";			
			dp <= '1';
		ELSE 
			IF(clk = '1' AND clk'EVENT) THEN
				led_cs <= next_led_cs;
				
				IF (next_led_cs(4)='0' or next_led_cs(2)='0') THEN
					dp <= '0';
				ELSE
					dp <= '1';
				END IF;
				
				CASE next_led_cs IS
					WHEN "111110" => led_bits <= data_in0;
									 next_led_cs := "111101";
					WHEN "111101" => led_bits <= data_in1;
									 next_led_cs := "111011";
					WHEN "111011" => led_bits <= data_in2;
									 next_led_cs := "110111";
					WHEN "110111" => led_bits <= data_in3;
									 next_led_cs := "101111";
					WHEN "101111" => led_bits <= data_in4;
									 next_led_cs := "011111";
					WHEN "011111" => led_bits <= data_in5;
									 next_led_cs := "111110";
					WHEN OTHERS => led_bits <= "0000";
								   next_led_cs := "111110";
				END CASE;
				
			END IF;
		END IF;
		
	END PROCESS;

END choice1from6_architecture;

⌨️ 快捷键说明

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