四选一选择器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验课程名称VHDL 四选一选择器
年级电技 111 专业电子科学与技术
学生姓名周伦稳
学号 1107010086
2013年12月
4选1数据选择器
1·设计背景和设计方案 1·1设计背景
该设计是以数字电子技术为基础,实现数据从四位数据中按照输入的信号选中一个数,来实现所期望的逻辑功能。
1·2设计方案
用拨码开关作四位数据及两位控制端的输入,LED 作输出,通过拨码开关组成控制输入端s1和s0不同组合,观察LED 与数据输入端a,b,c,d 的关系,验证四选一数据选择器设计的正确性。使用逻辑门电路与、或、非的组合来表达4选1数据选择器,通过控制输入的信号来控制输出的信号值。
其逻辑电路图如下:
>11
1
3
&
2
1
1
D
D D D A
A Y
其示意框图如下:
其中输入数据端口为D0、D1、D2、D3,A 、A ’为控制信号,Y 为输出。 令AA ’=“00”时,输出Y=D0;
令AA ’=“01”时,输出Y=D1; 令AA ’=“10”时,输出Y=D2; 令AA ’=“11’ 时,输出Y=D3;
D0
输入 D 1 Y
数据 D 2
D 3
A A ′
真值表如下:
输入
输出 D A1 A0 Y D0 0 0
D0 D1 0 1 D1 D2 1 0 D2 D3 1 1 D3
2·方案实施 1)程序1
2·1·1 设计思路
4 选 1
数 据 选 择 器
四选一多路选择器设计时,定义输入S为标准以内漏记为STD_LOGIC,输出的信号Z的数据类型定义为2位标准逻辑矢量位STD_LOGIC_VECTOR( 1 DOWNTO 0 ).使用LIBRATY语句和USE语句,来打开IEEE库的程序包STD_LOGIC_1164.ALL。当输入信号时,程序按照输入的指令来选择输出,例如输入信号为“00”时,将a的值给z,进而输出z的值,输入信号为“11”是,将a的值给z,进而输出z的值。若输入信号是已经定义的四个信号之外的值时(即当IF条件语句不满足时),输出值为x,并将x的值给输出信号z。这样即可实现四选一数据选择的功能。
2·1·2
程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux41 is
PORT (a,b,c,d :IN STD_LOGIC;
s :IN STD_LOGIC_VECTOR(1 DOWNTO 0);
z : OUT STD_LOGIC);
END mux41;
ARCHITECTURE one OF mux41 IS
BEGIN
PROCESS( s,a,b,c,d)
BEGIN
CASE s IS
WHEN "00" => z <= a;
WHEN "01" => z <= b;
WHEN "10" => z <= c;
WHEN "11" => z <= d;
WHEN OTHERS => z <=null;
END CASE;
END PROCESS;
END one;
2·1·3
运行结果
当输入信号“00”时,输出信号z的值为‘a’;
当输入信号“01”时,输出信号z的值为‘b’;
当输入信号“10”时,输出信号z的值为‘c’;
当输入信号“11”时,输出信号z的值为‘d’;
2·1·4
波形仿真及描述
输入:
a 的波形周期为10ns,b的波形周期为5ns,c的波形周期为15ns,d的波形周期为8ns。s[1]的波形周期为5ns,s[2]的波形周期为10ns。
输出:
2)程序2
2·2·1
设计思路
定义6个输入信号,一个输出信号,当控制信号A=‘1’时,muxval的值加1,即muxval=muxval+1;当控制信号B=‘1’时muxval的值加2,即muxval=muxval+2。当输入值为‘i0’时,输出q的值为0,当输入的值为‘i1’时,输出q的值为1,当输入值为‘i2’时,输出q的值为2,当输入值为‘i3’时,输出q的值为3。
2·2·2程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux41 IS
PORT ( i0,i1,i2,i3,a,b : IN STD_LOGIC;
q : OUT STD_LOGIC );
ENS mux4;
ARCHITECTURE b_mux4 OF mux4 IS BEGIN
Process ( i0,i1,i2,i3,a,b )
Variable muxval : integer rang 7 downto 0; Begin
muxval :=0;
if ( a = '1' ) then muxval : muxval + 1; end if; if ( b = '1' ) then muxval : muxval + 2; end if; case muxval is
when 0 = > q < = i0;
when 1 = > q < = i1;
when 2 = > q < = i2;
when 3 = > q < = i3;
When others = > null;
end case;
end process;
END b_mux4;
2·2·3
运行结果
当输入信号“00”时,输出信号z的值为‘i0’; 当输入信号“01”时,输出信号z的值为‘i1’; 当输入信号“10”时,输出信号z的值为‘i2’;