当前位置:文档之家› 用VHDL设计三八译码器。。超赞版

用VHDL设计三八译码器。。超赞版

3-8译码器的设计

1 设计目的与要求

随着社会的进一步发展,我们的生活各个地方都需要计算机的参与,有了计算机,我们的生活有了很大的便利,很多事情都不需要我们人为的参与了,只需要通过计算机就可以实现自动控制。由此,计算机对我们的社会对我们每个人都是很重要的。所以我们要了解计算机得组成,内部各种硬件,只有了解了计算机基本器件已经相应的软件,才能促进社会的发展。编码器和译码器的设计是计算机的一些很基础的知识,通过本次对于编码器和译码器的设计,可以让我知道究竟这种设计是如何实现的,这种设计对我们的生活有什么帮助,这种设计可以用到我们生活的哪些方面,对我们的各种生活有什么重大的意义。

1.1 设计的目的

本次设计的目的是通过简单的译码器的设计掌握基本的计算机的一些有关的知识,通过查资料已经自己的动手设计去掌握EDA技术的基本原理已经设计方法,并掌握VHDL硬件描述语言的设计方法和思想。以计算机组成原理为指导,通过将理论知识,各种原理方法与实际结合起来,切实的亲手设计,才能掌握这些非常有用的知识。通过对编码器和译码器的设计,巩固和综合运用所学知识,提高IC

设计能力,提高分析、解决计算机技术实际问题的独立工作能力。也能通过这种自主设计,增强自己的动手能力,将理论知识切实应用的能力,这对我们将来的发展是很有帮助的。

1.2 设计要求

根据计算机组成原理中组合逻辑电路设计的原理,利用VHDL 设计计算机电路中译码器的各个模块,并使用EDA 工具对各模块进行仿真验证和分析。译码器由三-八译码器为实例代表。

关键词:输入、输出、译码

2 VHDL的简单介绍

2.1 VHDL的简介

VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。VHDL翻译成中文就是超高速集成电路硬件描述语言,主要是应用在数字电路的设计中。目前,它在我过的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分

成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

2.2 VHDL的特点

1,功能强大,设计灵活:

VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。

2,,支持广泛,易于修改:

由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。3,强大的硬件系统描述能力:

VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯

性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。

4,独立于器件的设计,与工艺无关:

设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。

5.,很强的移植能力:

VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。

6,易于共享和复用:

VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。

2.3 VHDL的设计步骤

1.文本编辑:

用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。通常VHDL文件保存为.vhd文件,Verilog文件保存为.v文件。

2.使用编译工具编译源文件。

3.功能仿真:

将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进行时序仿真)

4.逻辑综合:

将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式。逻辑综合软件会生成.edf或.edif 的EDA工业标准文件。

5.布局布线:

将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放PLD/FPGA内。

6.时序仿真:

需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。(也叫后仿真)通常以上过程可以都在PLD/FPGA厂家提供的开发工具。

7.烧写器件

3 译码器的原理

二进制译码器的输入是一组二进制代码,输出是一组与输入代码一一对应的高、低电平信号。对于三-八译码器来说,3位二进制共有8种状态,所以对应的输出有8种状态。例如:对于二进制代码111来说,输出为10000000。对于二-四译码器来说,2位二进制共有4种状态,所以对应的输出有4种状态。例如:对于二进制代码11来说,输出为1000。

4 三-八译码器的设计

关于三-八译码器的工作框图如图所示

译码器内部电路:

3-8译码器引脚排列图:

3-8译码器的功能表:

无论从逻辑图还是功能表我们都可以看到3-8译码器的八个输出管脚,任何时刻要么全为高电平1—芯片处于不工作状态,要么只有一个为低电平0,其余7个输出管脚全为高电平1。如果出现两个输出管脚在同一个时间为0的情况,说明该芯片已经损坏。

当附加控制门的输出为高电平(S=1)时,可由逻辑图写出

由上式可以看出,在同一个时间又是这三个变量的全部最小项的译码输出,所以也把这种译码器叫做最小项译码器。3-8译码器有三个附加的控制端、和。当、时,输出为高电平(S=1),译码器处于工作状态。否则,译码器被禁止,所有的输出端被封锁在高电平,如表1所示。这三个控制端也叫做“片选”输入端,利用片选的作用可以将多篇连接起来以扩展译码器的功能。

带控制输入端的译码器又是一个完整的数据分配器。电路中如果把作为“数据”输入端(在同一个时间),而将作为“地址”输入端,那么从送来的数据只能通过所指定的一根输出线送出去。这就不难理解为什么把叫做地址输入了。例如当=101时,门的输入端除了接至输出端的一个以外全是高电平,因此的数据以反码的形式从输出,而不会被送到其他任何一个输出端上。

三-八译码器由VHDL程序来实现,下面是其中一段VHDL关键代码

使用WHEN-ELSE语句

5 三-八译码器仿真

三-八译码器由VHDL程序:

使用WHEN-ELSE语句

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY yangdan_DECODER IS

PORT(INP:IN STD_LOGIC_VECTOR(2 DOWNTO 0);

OUTP:OUT BIT_VECTOR (7 DOWNTO 0)); END yangdan_DECODER;

ARCHITECTURE ART3 OF yangdan_DECODER IS

BEGIN

OUTP(0)<='1' WHEN INP="000" ELSE '0';

OUTP(1)<='1' WHEN INP="001" ELSE '0';

OUTP(2)<='1' WHEN INP="010" ELSE '0';

OUTP(3)<='1' WHEN INP="011" ELSE '0';

OUTP(4)<='1' WHEN INP="100" ELSE '0';

OUTP(5)<='1' WHEN INP="101" ELSE '0';

OUTP(6)<='1' WHEN INP="110" ELSE '0';

OUTP(7)<='1' WHEN INP="111" ELSE '0';

END ART3;

其仿真图如图所示:

三-八译码器功能时序仿真图

6 结果分析

对其仿真图进行仿真分析:OUTP译码输出标志,INP为输入信号组,它由INP[2]-INP[0]三个二进制代码输入信号组成。OUTP为输出信号组,它由OUTP[7]-OUTP[0]八个输出信号组成。OUTP为1时候表示输出。当输入为:111时,译码后为指定的状态,即输出10000000,紧接着依次类推,当输入为:110时,输出输出01000000,当输入为101时,输出00100000,当输入为100时,输出00010000,输入011时,输出为00001000,输入为010时,输出00000100,输入为001时,输出00000010,输入为000时,输出为00000001。

7 心得体会

我所选择的题目是译码器的设计,这些题目在以前基础强化训练的时候做过类似的题目,所以心里至少还是有点思路,不过本次课设

我们所要用的是EDA以及VHDL等知识来达到本次设计的要求。

经过好几天努力的琢磨钻研,我终于知道了该做什么,心里有个大概的思路了,知道了究竟本次设计的目的与原理等等的,以及设计的大致步骤。最后完成了我的设计任务——基于VHDL译码器的设计。通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。

附录

三-八译码器由VHDL程序:

使用WHEN-ELSE语句

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY yangdan_DECODER IS

PORT(INP:IN STD_LOGIC_VECTOR(2 DOWNTO 0);

OUTP:OUT BIT_VECTOR (7 DOWNTO 0));

END yangdan_DECODER;

ARCHITECTURE ART3 OF yangdan_DECODER IS

BEGIN

OUTP(0)<='1' WHEN INP="000" ELSE '0';

OUTP(1)<='1' WHEN INP="001" ELSE '0';

OUTP(2)<='1' WHEN INP="010" ELSE '0';

OUTP(3)<='1' WHEN INP="011" ELSE '0';

OUTP(4)<='1' WHEN INP="100" ELSE '0';

OUTP(5)<='1' WHEN INP="101" ELSE '0';

OUTP(6)<='1' WHEN INP="110" ELSE '0';

OUTP(7)<='1' WHEN INP="111" ELSE '0';

END ART3;

使用CASE-WHEN语句:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; --库的说明ENTITY yima38a IS

PORT(A:IN STD_LOGIC_VECTOR(2 DOWNTO 0);

Y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

--定义端口,3-8译码器有3个输入8个输出END;

ARCHITECTURE BEHAVIOR OF yima38a IS

BEGIN

PROCESS(A)

BEGIN

CASE A IS

WHEN"000"=>Y<="00000001";

WHEN"001"=>Y<="00000010";

WHEN"010"=>Y<="00000100";

WHEN"011"=>Y<="00001000";

WHEN"100"=>Y<="00010000";

WHEN"101"=>Y<="00100000";

WHEN"110"=>Y<="01000000";

WHEN"111"=>Y<="10000000";

WHEN OTHERS=>Y<="00000000";

END CASE;

END PROCESS;

END BEHAVIOR;

移动通信论文3-8译码器的设计

相关主题
文本预览
相关文档 最新文档