译码器与编码器的设计与仿真

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

译码器与编码器的设计与仿真

1.实验目的

a.参照芯片74LS138的电路结构,用逻辑图和VHDL语言设计3-8译码器。

b.参照芯片74LS148的电路结构,用逻辑图和VHDL语言设计8-3优先编码器。

2.实验内容的详细说明

2.1 74148:8-3优先编码器(8 to 3 Priority Encoder)

2.1.1 设计思想

先定义八个输入四个输出的实体,然后定义结构体,再定义一个进程利用利用if的嵌套来体现使能端与输入信号的优先级,再利用if和else if的结构来选择不同输入时输出信号的不同。

2.1.2 实验原理

1)优先编码器逻辑图

优先编码器逻辑图

2)优先编码器真值表

2.1.3 VHDL程序(详见附录1)

2.1.4 仿真结果

优先编码器画图-功能仿真波形图

优先编码器VHDL-功能仿真波形图2.2 74138:3-8译码器(3 to 8 Demultiplexer)2.2.1 设计思想

先定义六个输入八个输出的实体,再定义结构体和一个用来先存储输出信号组合新的信号,用with..when来将不同输入组合时将不同的输出信号赋给存储信号,当使能端输入组合为100时,将存储信号赋给输出,否则将“1111111”赋给输出信号组合。

2.2.2 实验原理

1)74138(3-8译码器)逻辑图

74138逻辑图

2)74138逻辑功能真值表

2.2.3 VHDL程序(详见附录2)

2.2.4 仿真结果

74138画图-逻辑功能仿真波形图

74138VHDL-逻辑功能仿真波形图

3.实验总结:

通过本次实验,我对优先编码器和译码器的逻辑功能有进一步的了解,了解到译码器与编码器的功能正好相反,编码器是将各种输入信号转换成一组二进制代码,而译码器则是用一组二进制代码来产生各种独立的输出信号。

4.附录(VHDL程序)

4.1 附录1

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY V74148 IS

PORT(

EIN : IN STD_LOGIC;

D:IN STD_LOGIC_VECTOR(0 TO 7);

A:OUT STD_LOGIC_VECTOR(0 TO 2) );

END V74148;

ARCHITECTURE V74184_A OF V74148 IS

SIGNAL A_I : STD_LOGIC_VECTOR(0 TO 2);

BEGIN

PROCESS(D,A_I,EIN)

BEGIN

IF ((NOT EIN)='1')

THEN

IF (D(7)='0') THEN A_I<="111";

ELSIF (D(6)='0')THEN A_I<="110";

ELSIF (D(5)='0')THEN A_I<="101";

ELSIF (D(4)='0')THEN A_I<="100";

ELSIF (D(3)='0')THEN A_I<="011";

ELSIF (D(2)='0')THEN A_I<="010";

ELSIF (D(1)='0')THEN A_I<="001";

ELSIF (D(0)='0')THEN A_I<="000";

END IF;

ELSE A_I <= "ZZZ";

END IF;

A<= A_I;

END PROCESS;

END;

4.2 附录2

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY V74138 IS

PORT ( G1,G2A_L,G2B_L: IN STD_LOGIC;

A: IN STD_LOGIC_VECTOR(2 DOWNTO 0);

Y_L: OUT STD_LOGIC_VECTOR (0 TO 7) ); END V74138;

ARCHITECTURE V74138_A OF V74138 IS

SIGNAL Y_L_I : STD_LOGIC_VECTOR(0 TO 7);

BEGIN

WITH A SELECT Y_L_I <=

"01111111" WHEN "000" ,

"10111111" WHEN "001" ,

"11011111" WHEN "010" ,

"11101111" WHEN "011" ,

"11110111" WHEN "100" ,

"11111011" WHEN "101" ,

"11111101" WHEN "110" ,

"11111110" WHEN "111" ,

"11111111" WHEN OTHERS;

Y_L <= Y_L_I WHEN (G1 AND NOT G2A_L AND NOT G2B_L)='1' ELSE "11111111";

END V74138_A;

相关文档
最新文档