石家庄经济学院
实 验 报 告
学 院: 信息工程学院 专 业: 计算机应用
信息工程学院计算机实验中心制
学号 XXXXX 姓名 实设验备日编期 号 实验室 计算机软件技术实验 实验内容 数据选择器 一、实验题目
数据选择器的设计 二、实验目的
1.掌握数据选择器的逻辑功能和特点; 2.熟悉VHDL实现数据选择器的方法; 3.进一步熟悉Quartus的使用。 三、实验要求
数据选择器又叫多路开关,它在选择控制(地址码)的控制下,从几个数据输入中选择一个并将其送到一个公共的输出端。数据选择器的功能类似一个多掷开关。4选1数据选择器原理示意图如图1所示。在VHDL语言中,可以用case语句来生成一个数据选择器。
图1 数据选择器的原理图
设计4路数据选择器,要求: (1)输入:
4个数据,每个数据是4位的二进制数(用std_logic_vector(3 downto 0)数据类型定义)。 选择控制端2位,根据控制端的二进制编码,从4个输入数据中选择一个需要的数据送到输出端。
使能端,当使能端有效时,输入的4个数据中的某个数据输送到输出端,当使能端无效时,输出为高阻态“ZZZZ”。
(2) 输出:一个4位的二进制数。 四、实验步骤
1. 真值表
要设计的数据选择器的真值表如表1所示。
表1 数据选择器的真值表
E_1’ 0 0 0 0 1 A1 A0 D0 D1 D2 D3 0 0 1 1 × 0 1 0 1 × D0 × × × × × D1 × × × × × D2 × × × × × D3 × F D0 D1 D2 D3 “ZZZZ” 指导教师 邹 惠 2. 示意图
图2为设计结果的外部引脚示意图。
图2 数据选择器的外部引脚示意图
3. VHDL实现
完整的VHDL设计及必要的注释说明: library ieee;
use ieee.std_logic_1164.all; entity data_selector is port(
d0,d1,d2,d3:in std_logic_vector(3 downto 0); --分别为4路4位输入
a0,a1:in std_logic; --根据a0a1组合的不同选择f要输出的数据 f:out std_logic_vector(3 downto 0); --4位的输出 e_1:in std_logic); --使能端 end data_selector;
architecture data_selectorp of data_selector is --结构体 signal sel:std_logic_vector(1 downto 0); begin
sel<=a1&a0;
process(d0,d1,d2,d3,sel,e_1) begin
if e_1='1' then f(3 downto 0)<=\"ZZZZ\"; elsif sel=\"00\" then f(3 downto 0)<=d0; elsif sel=\"01\" then f(3 downto 0)<=d1; elsif sel=\"10\" then f(3 downto 0)<=d2; elsif sel=\"11\" then f(3 downto 0)<=d3; end if;
end process;
end data_selectorp;
采用文本编辑的方法,将每一路的输入定义为4位的数据,使能端e_1为1时,实现高阻态输出,为0时,实现的是正常的4选1的输出,a0、a1是控制选择哪路输出的信号,由sel的不同决定输出。在process语句中嵌套if语句实现该数据选择器的功能。
4. 测试及分析
完整的仿真图如图3所示。
图3 完整的仿真图
仿真结果分析:
e_1=0时,a0 a1的输入为:00、01、10、11时,f的值分别为:d0(0001)、d2(0111)、d1(0011)、d3(1111);
e_1=1时,输出为高阻态。
证明该仿真结果完全正确,说明该4位4路数据选择器编写正确。 五、总结
在本次4位4选1数据选择器的代码编写过程中,我对理论教材上数据选择器的学习有了一个更加清楚明白的认识,而且学会了使能端的应用,并且了解了什么是高阻态的输出,与如何设定电路的高阻态的输出。
1.在设计的过程中主要出项的问题就是不明白什么是高阻态输出,而且不知道如何在程序中运用高阻态进行程序的编写,通过向老师询问以及课本知识的仔细查阅,我理解了,高阻态时,也就是该数据选择器被禁用时的状态,当然还有“ZZZZ”的输出代表高阻态;
2.通过此次实验的完成,我对课本上数据选择器有了一个更加深刻的认识,而不只是停留在理论层面上的认识,我理解了,虽然是4位选择器,但是每一位可以设计成4位的输入,这样也就可以实现4路4位数据选择器的功能。
因篇幅问题不能全部显示,请点此查看更多更全内容