编码器和译码器的设计

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

目录
1引言 (1)
1.1 设计的目的 (1)
1.2 设计的基本内容 (1)
2 EDA、VHDL简介 (1)
2.1 EDA技术 (1)
2.1.1 EDA技术的概念 (1)
2.1.2 EDA技术的特点 (1)
2.2 硬件描述语言——VHDL (2)
2.2.1 VHDL的简介 (2)
2.2.2 VHDL语言的特点 (2)
2.2.3 VHDL的设计流程 (3)
3 设计规划过程 (3)
3.1编码器的工作原理 (3)
3.2译码器的工作原理 (4)
3.3课程设计中各部分的设计 (4)
3.3.1八-三优先编码器的设计 (4)
3.3.2三-八译码器的设计 (5)
3.3.3二-四译码器的设计 (6)
4 系统仿真 (6)
4.1八-三优先编码器仿真及分析 (7)
4.2三-八译码器仿真及分析 (7)
4.3二-四译码器仿真及分析 (8)
结束语 (9)
致谢 (10)
参考文献 (11)
附录 (12)
1引言
随着社会的发展,科学技术也在不断的进步。

计算机从先前的采用半导体技术实现的计算器到现在广泛应用的采用高集成度芯片实现的多功能计算器。

计算机电路是计算机的重要组成部分,了解计算机电路的知识是促进计算机的发展的先决条件。

而编码器和译码器是计算机电路中的基本器件,对它们的了解可以为以后的进一步深化研究打下一个良好的基础。

本设计主要介绍的是一个基于超高速硬件描述语言VHDL对计算机电路中编码器和译码器进行编程实现。

1.1 设计的目的
本次设计的目的就是通过实践掌握计算机组成原理的分析方法和设计方法,了解EDA技术并掌握VHDL硬件描述语言的设计方法和思想。

以计算机组成原理为指导,通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识和基本单元电路的综合设计应用。

通过对编码器和译码器的设计,巩固和综合运用所学知识,提高IC设计能力,提高分析、解决计算机技术实际问题的独立工作能力。

1.2 设计的基本内容
根据计算机组成原理中组合逻辑电路设计的原理,利用VHDL设计计算机电路中编码器和译码器的各个模块,并使用EDA 工具对各模块进行仿真验证和分析。

编码器由八-三优先编码器作为实例代表,而译码器则包含三-八译码器和二-四译码器两个实例模块组成。

2 EDA、VHDL简介
2.1 EDA技术
2.1.1 EDA技术的概念
EDA是电子设计自动化(E1echonics Des5p AM·toM60n)的缩写。

由于它是一门刚刚发展起来的新技术,涉及面广,内容丰富,理解各异。

从EDA技术的几个主要方面的内容来看,可以理解为:EDA技术是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计电子系统到硬件系统的一门新技术。

2.1.2 EDA技术的特点
采用可编程器件,通过设计芯片来实现系统功能。

采用硬件描述语言作为设计输入和库(LibraLy)的引入,由设计者定义器件的内部逻辑和管脚,将原来由电路板设计完成的大部分工作故在芯片的设计中进行。

由于管脚定义的灵活性,大大减轻了电路图设计和电路板设计的工作量和难度,有效增强了设计的灵活性,提高了工作效率。

并且可减少芯片的数量,缩小系统体积,降低能源消耗,提高了系统的性能和可靠性。

能全方位地利用计算机自动设计、仿真和调试。

2.2 硬件描述语言——VHDL
2.2.1VHDL的简介
VHDL语言是一种用于电路设计的高级语言。

它在80年代的后期出现。

最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。

但是,由于它在一定程度上满足了当时的设计需求,于是他在1987年成为A I/IEEE的标准(IEEE STD 1076-1987)。

1993年更进一步修订,变得更加完备,成为A I/IEEE的A I/IEEE STD 1076-1993标准。

目前,大多数的CAD厂商出品的EDA 软件都兼容了这种标准。

VHDL的英文全写是:VHSIC(Very High eed Integrated Circuit)Hardware Descriptiong Language.翻译成中文就是超高速集成电路硬件描述语言。

因此它的应用主要是应用在数字电路的设计中。

2.2.2 VHDL语言的特点
VHDL是一种用普通文本形式设计数字系统的硬件描述语言,主要用于描述数字系统的结构、行为、功能和接口,可以在任何文字处理软件环境中编辑。

除了含有许多具有硬件特征的语句外,其形式、描述风格及语法十分类似于计算机高级语言。

VHDL程序将一项工程设计项目(或称设计实体)分成描述外部端口信号的可视部分和描述端口信号之间逻辑关系的内部不可视部分,这种将设计项目分成内、外两个部分的概念是硬件描述语言(HDL)的基本特征。

当一个设计项目定义了外部界面(端口),在其内部设计完成后,其他的设计就可以利用外部端口直接调用这个项目。

VHDL的主要特点如下:
1. 作为HDL的第一个国际标准,VHDL具有很强的可移植性。

2. 具有丰富的模拟仿真语句和库函数,随时可对设计进行仿真模拟,因而能将设计中的错误消除在电路系统装配之前,在设计早期就能检查设计系统功能的可行性,有很强的预测能力。

3. VHDL有良好的可读性,接近高级语言,容易理解。

4. 系统设计与硬件结构无关,方便了工艺的转换,也不会因工艺变化而使描述过时。

5. 支持模块化设计,可将大规模设计项目分解成若干个小项目,还可以把已有的设计项目作为一个模块调用。

6. 对于用VHDL完成的一个确定设计,可以利用EDA工具进行逻辑综合和优化,并能自动地把VHDL描述转变成门电路级网表文件。

7. 设计灵活,修改方便,同时也便于设计结果的交流、保存和重用,产品开发速度快,成本低。

2.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.1编码器的工作原理
八-三优先编码器输入信号为i0,i1,i2,i3,i4,i5,i6和i7,输出信号为a2、
a1、a0。

输入信号中i0的优先级别最低,依次类推,i7的优先级别最高。

也就是说若i7输入为1(即为高电平)则无论后续的输入信号怎么样,对应的这种状态一样,如若i7输入为0(即为低电平)则看优先级仅次于i7的i6状态决定,依次类推。

因为i0到i7共8中状态,可以用3位二进制编码来表示。

例如:i7为1对应输出的二进制编码111。

3.2译码器的工作原理
二进制译码器的输入是一组二进制代码,输出是一组与输入代码一一对应的高、低电平信号。

对于三-八译码器来说,3位二进制共有8种状态,所以对应的输出有8种状态。

例如:对于二进制代码111来说,输出为10000000。

对于二-四译码器来说,2位二进制共有4种状态,所以对应的输出有4种状态。

例如:对于二进制代码11来说,输出为1000。

3.3课程设计中各部分的设计
课程设计各个部分由VHDL实现后,利用EDA工具对各部分进行了时序仿真(Timing Simulation),其目的是通过时序可以更清楚的了解程序的工作过程。

3.3.1八-三优先编码器的设计
整个八-三优先编码器的工作框图如图3.1所示。

图3.1 八-三优先编码器的工作框图
八-三优先编码器由VHDL程序来实现,下面是其中一段VHDL关键代码:
process(i)
begin
gs<='1';
a<="100";
if i(7)='1'then
a<="111";
elsif i(6)='1'then
a<="110";
elsif i(5)='1'then
a<="101";
elsif i(4)='1'then
a<="100";
elsif i(3)='1'then
a<="011";
elsif i(2)='1'then
a<="010";
elsif i(1)='1'then
a<="001";
elsif i(0)='1'then
a<="000";
else
gs<='0';
end if;
end process;
3.3.2三-八译码器的设计
关于三-八译码器的工作框图如图3.2所示。

.
图3.2 三-八译码器工作框图
三-八译码器由VHDL程序来实现,下面是其中一段VHDL关键代码
process(datain)
begin
case datain is
when "111"=>dataout<="10000000";
when "110"=>dataout<="01000000";
when "101"=>dataout<="00100000";
when "100"=>dataout<="00010000";
when "011"=>dataout<="00001000";
when "010"=>dataout<="00000100";
when "001"=>dataout<="00000010";
when "000"=>dataout<="00000001";
when others=>dataout<="11111111";
end case;
end process;
3.3.3二-四译码器的设计
关于二-四译码器的工作框图如图3.3所示。

图3.3 二-四译码器工作原理图
二-四译码器由VHDL程序来实现,下面是其中一段VHDL关键代码 process(i)
begin
case i is
when "00"=>o<="0001";
when "01"=>o<="0010";
when "10"=>o<="0100";
when "11"=>o<="1000";
when others =>o<="XXXX";
end case;
end process;
4 系统仿真
4.1八-三优先编码器仿真及分析
八-三优先编码器由VHDL程序实现后,其仿真图如图4.1所示。

图4.1 八-三优先编码器功能时序仿真图
对其仿真图进行仿真分析:gs为编码输出标志,i为输入信号组,它由i7-i0八个输入信号组成。

a为输出信号组,它由a2-a0三个二进制代码输出信号组成。

gs为1时候表示输出。

当i7为1时,即输入为:1*******时,输出111,当i7为0时,输出由优先级仅次于i7的i6决定,即输入为:01******时,输出110,紧接着依次类推,分别得出输入为:001*****时,输出101,输入为:0001****时,输出100,输入为00001***时,输出为011,输入为000001**时,输出010,输入为0000001*时,输出001,输入为00000001时,输出为000。

八-三优先编码器的引脚分配如表4.1
表4.1八-三优先编码器器下载板芯片引脚对照表
4.2三-八译码器仿真及分析
三-八译码器由VHDL程序实现后,其仿真图如图4.2所示:
图4.2三-八译码器功能时序仿真图
对其仿真图进行仿真分析:cs译码输出标志,datain为输入信号组,它由datain[2]-datain[0]三个二进制代码输入信号组成。

Dataout为输出信号组,它由dataout[7]-dataout[0]八个输出信号组成。

cs为1时候表示输出。

当输入为:111时,译码后为指定的状态,即输出10000000,紧接着依次类推,当输入为:110时,输出输出01000000,当输入为101时,输出00100000,当输入为100时,输出00010000,输入011时,输出为00001000,输入为010时,输出00000100,输入为001时,输出00000010,输入为000时,输出为00000001。

4.3二-四译码器仿真及分析
二-四译码器由VHDL程序实现后,其仿真图如图4.3所示:
图4.3二-四译码器功能时序仿真图
对其仿真图进行仿真分析: i为输入信号组,它由i[1]-i[0]两个二进制代码输入信号组成。

o为输出信号组,它由o[3]-o[0]四个输出信号组成。

当输入为:11时,译码后为指定的状态,即输出1000,紧接着依次类推,当输入为:10时,输出输出0100,当输入为01时,输出0010,当输入为00时,输出0001。

二-四译码器的引脚分配如表4.2所示:
表4.2二-四译码器下载板芯片引脚对照表
结束语
通过两星期的紧张工作,最后完成了我的设计任务——基于VHDL编码器和译码器的设计。

通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。

本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。

它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。

希望学校以后多安排一些类似的实践环节,让同学们学以致用。

在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。

在应用VHDL的过程中让我真正领会到了其在电路设计上的优越性。

用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。

致谢
本设计是在肖晓丽老师的精心指导和严格要求下完成的,从课题选择到具体设计和
调试,都得到肖老师的悉心指导,无不凝聚着肖老师的心血和汗水,她多次为我指点迷津,帮助我开拓设计思路,精心点拨、热忱鼓励。

她渊博的知识、开阔的视野和敏锐的思维给了我深深的启迪。

通过这次课程设计我从肖老师那学到不少有用的知识,也积累了一定的电路设计的经验。

最后非常感谢肖晓丽老师对我的指导与大力的帮助。

参考文献
[1] 杨刚,龙海燕.现代电子技术-VHDL与数据系统设计.北京:电子工业出版社,2004
[2] 黄仁欣.EDA技术实用教程.北京:清华大学出版社,2006
[3]潘松.VHDL实用教程[M].成都:电子科技大学出版社,2000
附录
1.八-三优先编码器的VHDL程序代码:
--程序名:priority.vhd
library ieee;
use ieee.std_logic_1164.all;
entity priority is
port(i:in bit_vector(7 downto 0); a:out bit_vector(2 downto 0); gs:out bit);--编码输出标志
end priority;
architecture a of priority is
begin
process(i)
begin
gs<='1';
a<="100";
if i(7)='1'then
a<="111";
elsif i(6)='1'then
a<="110";
elsif i(5)='1'then
a<="101";
elsif i(4)='1'then
a<="100";
elsif i(3)='1'then
a<="011";
elsif i(2)='1'then
a<="010";
elsif i(1)='1'then
a<="001";
elsif i(0)='1'then
a<="000";
else
gs<='0';
end if;
end process;
end a;
2.三-八译码器的VHDL程序代码:
--fuction:以拨盘开关作为数据输入端,用发光二极管表示译码后的信息;-- datain(0)-datain(2) 分别为c'b'a对应拨盘开关上的1-3号键;library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity yima_138 is
Port (datain : in std_logic_vector(2 downto 0);
cs : out std_logic;
dataout: out std_logic_vector(7 downto 0));
end yima_138;
architecture Behavioral of yima_138 is
begin
cs<='1';
process(datain)
begin
case datain is
when "111"=>dataout<="10000000";
when "110"=>dataout<="01000000";
when "101"=>dataout<="00100000";
when "100"=>dataout<="00010000";
when "011"=>dataout<="00001000";
when "010"=>dataout<="00000100"; when "001"=>dataout<="00000010"; when "000"=>dataout<="00000001"; when others=>dataout<="11111111"; end case;
end process;
end Behavioral;
3.二-四译码器的VHDL程序代码:
--二-四译码器的顺序条件语句描述
--程序名:24_conc.vhd
library ieee;
use ieee.std_logic_1164.all;
entity d24_conc is
port(i:in std_logic_vector(1 downto 0);
o:out std_logic_vector(3 downto 0)); end d24_conc;
architecture a of d24_conc is
begin
process(i)
begin
case i is
when "00"=>o<="0001";
when "01"=>o<="0010";
when "10"=>o<="0100";
when "11"=>o<="1000";
when others =>o<="XXXX";
end case;
end process;
end a;。

相关文档
最新文档