📄 choice1from6.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 + -