级: 班姓名:学号:
实验一 3-8译码器的实现
一、实验目的及要求
熟悉利用Quartus II 的VHDL输入方法设计简单组合电路,掌握case、if、when_else和信号选择语句的使用,并通过仿真,对比用以上四种语句实现3-8译码器所需要的资源情况(编译成功后弹出的Compilation Report)。 二、实验原理
1、输出为低电平有效时,对应真值表为:
2、输出为高电平有效时,对应真值表为:
三、 实验内容和步骤
完成3-8译码器的设计,包括VHDL文本输入、编译、综合、适配、仿真(功能验证:本实验报告须重点分析)。
(1)CASE语句
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; --使用类型转换函数,打开此程序包。 ENTITY dec3to8CASE IS
port( DIN: IN STD_LOGIC_VECTOR(2 DOWNTO 0); DOUT: OUT BIT_VECTOR(7 DOWNTO 0)); END dec3to8CASE;
ARCHITECTURE bhv OF dec3to8CASE IS BEGIN
PROCESS (DIN) BEGIN
CASE CONV_INTEGER(DIN) IS
WHEN 0 => DOUT<=\ WHEN 1 => DOUT<=\ WHEN 2 => DOUT<=\ WHEN 3 => DOUT<=\ WHEN 4 => DOUT<=\ WHEN 5 => DOUT<=\ WHEN 6 => DOUT<=\ WHEN 7 => DOUT<=\ WHEN OTHERS => NULL; END CASE; END PROCESS; END bhv;
(2)IF语句
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY dec3to8IF IS
port( DIN: IN STD_LOGIC_VECTOR(2 DOWNTO 0); DOUT: OUT BIT_VECTOR(7 DOWNTO 0)); END dec3to8IF;
ARCHITECTURE bhv OF dec3to8IF IS BEGIN
PROCESS (DIN) BEGIN
IF CONV_INTEGER(DIN)=0 THEN DOUT<=\ ELSIF CONV_INTEGER(DIN)=1 THEN DOUT<=\ ELSIF CONV_INTEGER(DIN)=2 THEN DOUT<=\ ELSIF CONV_INTEGER(DIN)=3 THEN DOUT<=\ ELSIF CONV_INTEGER(DIN)=4 THEN DOUT<=\ ELSIF CONV_INTEGER(DIN)=5 THEN DOUT<=\ ELSIF CONV_INTEGER(DIN)=6 THEN DOUT<=\
ELSIF CONV_INTEGER(DIN)=7 THEN DOUT<=\ END IF; END PROCESS; END bhv;
(3)WHEN_ELSE语句
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY dec3to8WHENELSE IS
port( DIN: IN STD_LOGIC_VECTOR(2 DOWNTO 0); DOUT: OUT BIT_VECTOR(7 DOWNTO 0)); END dec3to8WHENELSE;
ARCHITECTURE bhv OF dec3to8WHENELSE IS BEGIN
DOUT<=\ \ \ \ \ \ \ \END bhv;
(4)信号选择语句
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY dec3to8SEL IS
port( DIN: IN STD_LOGIC_VECTOR(2 DOWNTO 0); DOUT: OUT BIT_VECTOR(7 DOWNTO 0)); END dec3to8SEL;
ARCHITECTURE bhv OF dec3to8SEL IS BEGIN
WITH CONV_INTEGER(DIN) SELECT DOUT<=\ \ \ \ \ \ \ \
UNAFFECTED WHEN OTHERS; END bhv;
四、 仿真分析和心得体会 仿真分析:
仿真波形图如下:
其仿真结果和输出高电平有效的真值表相符。4种语句都定义了STD_LOGIC_VECTOR类型的DIN和DOUT,其中DIN作为输入,DOUT作为输出。当DIN=“000”(转换后为‘0’)时DOUT=“00000001”,当DIN=“001”(转换后为‘1’)时DOUT=“00000010”,以此类推。
心得体会:4种语句虽然不同,但实现的结果是相同的,可谓殊途同归,说明VHDL语言编程灵活多样。IF语句和CASE语句需要放在进程语句中,由PROCESS语句引导;在使用类型转换函数时(程序中的CONV_INTEGER(DIN)语句),需要打开
IEEE.STD_LOGIC_UNSIGNED.ALL程序包;使用信号赋值语句在条件句中未能覆盖所有条件选择时,要在末尾加上与NULL类似涵义的关键词UNAFFECTED。
级: 班姓名:学号:
实验二 4选1选择器的设计
一、实验目的
熟悉利用Quartus II 的VHDL文本输入方法设计简单组合电路,掌握层次化设计的方法,注意原件调用声明和例化语句的使用。
二、实验原理和实验步骤 (课本P95,题3-23)
1、完成2选1选择器的设计,包括VHDL文本输入、编译、综合、适配、仿真; 2、建立一个更高层次的4选1程序设计,利用以上获得的2选1选择器,构成如下图所示的4选1选择器,并完成编译、综合、适配、仿真(功能验证:本实验报告须重点分析)。
S1 S0 A B
0 1 0 1 Y
C D 0 1
实验步骤:
方法一:单层结构
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux41b IS
PORT(A,B,C,D,s0,s1: IN STD_LOGIC; y: OUT STD_LOGIC); END ENTITY mux41b;
ARCHITECTURE one OF mux41b IS signal N0,N1: STD_LOGIC; BEGIN
com1: PROCESS(A,B,s0) BEGIN
IF s0='0' THEN N0<=A; ELSE
N0<=B; END IF; END PROCESS;
com2: PROCESS(C,D,s0)