基于VHDL循环码编译码器

基于VHDL循环码编译码器
基于VHDL循环码编译码器

目录

目录 (1)

摘要 (2)

1 引言 (3)

1.1 课程设计目的 (4)

1.2 课程设计平台 (4)

2 应用工具介绍 (5)

2.1 EDA 技术介绍.............................................................................. 错误!未定义书签。

2.2 VHDL语言介绍 (6)

2.3 VHDL语言的特点 (6)

3 设计原理 (8)

3.1编码器的设计 (8)

3.2译码器的设计 (9)

4 设计步骤 (11)

4.1 VHDL设计流程 (11)

4.2 系统分析 (11)

4.3 程序流程分析 (12)

4.4 程序设计 (12)

4.5 系统仿真 (15)

4.6 结果分析 (17)

5 结束语 (18)

6 致谢 (19)

参考文献 (20)

基于VHDL语言的循环码编译码器设计学生姓名:凌鹏指导老师:肖红光等

摘要本课程设计设想采用专用集成电路芯片实现循环码编译码器的功能。在本次计中,使用的系统开发平台为Quartus2Ⅱ,硬件描述语言是VHDL。设计方案中,实现了编码,纠错,译码。从循环的原理出发,讨论循环码编译码系统的特点。以一个(7,4)循环码为例,使用硬件描述语言VHDL 对该系统进行了设计,能实现循环码以及一位错码的纠错译码。依据设计方案和设计平台完成了程序编写和程序调试,通过运行程序及时序波形的仿真有效验证了设计的正确性,初步实现了设计目标。

关键词专用集成电路;VHDL;循环码编译码器;Quartus2Ⅱ

Abstract The course is designed ASIC chip envisaged cyclic codes codec functions. In this account, the use of the system development platform for Quartus2 Ⅱ, hardware description language VHDL. Design, the realization of the coding, error correction, decoding. From the cycle of principle, to discuss the characteristics of cyclic code encoding and decoding system. A (7,4) cyclic code, for example, using hardware description language VHDL design of the system, to achieve the cyclic code and a decoding error correction codes. Design and design platform based on the completion of the programming and debugging, and timing waveforms by running the simulation program effectively validate the correctness of the design, the initial realization of the design goal.

1 引言

循环码是在严密的代数学理论基础上建立起来的,是线性分组码的一种。这种码的编码和解码设备都不太复杂,而且纠错的能力较强。顾名思义,循环码除具有线性码的一般性质之外,还具有循环性,即任一码组循环一位以后,仍为该码中的一个码组。

在代数编码理论中,为了便于计算,经常将循环码表示成码多项式的形式,设码组为a= (an-1an-2...a1a0),则码多项式定义如下:

T (X) =an-1x +an-2x +...+a1x+a0

在循环码除全“ 0”码组外,再没有连续k 位均为“ 0”的码组,即连“0”的长度最多只有(k-1) 位。否则,在经过若干次循环移位后将得到一个k 位信息位全为“0”,但监督位不全为“0”的一个码组。因此,g (x) 必须是一个常数项不为“0”的(n-k) 次多项式,而且这个g (x) 还是这种码中次数为(n-k) 的唯一一个多项式。称这唯一的(n-k) 次多项式g(x) 为码的生成多项式。一旦确定了g (x),则整个(n,k) 循环码就被确定了。由此,可以写出循环码的生成矩阵G.

通常这时得到的循环码的生成矩阵不是典型矩阵,可通过线性变换转为典型矩阵,则循环码组可写成:

T (X) = [an-1 an-2 ...an-k]G (X)

G (X) = [an-1 x +an-2 x +...+an- (k-1) x+a ].g (x)

所有的码组多项式T (X) 都可被g (x) 整除,而且任意一个次数不大于

(k-1)的多项式乘g (x) 都是码多项式,该条性质用于编码,还可用于验证接收码组是否出错。

由于任一循环码多项式T (X) 都是g (x) 的倍式,故可写成T (X) =h (x) .g (x),而g (x) 本身也是一个码组,即有T'(X) = g (x)。由于T' (X) 是一个(n-k)次多项式,故xkT' (x)是一个n 次多项式,在模xn+1 运算下,也是该编码中的一个许用码组。可以写成x T'(x)=Q(x)+T(x) ,又由于等式左端分子和分母都是n 次多项式,故Q (x) =1。因此,上式可化成xkT'(x) = (xn+1) +T (x)。最后,可得到xn+1=g (x)[xk+h (x)]。由此说明,g (x) 应该是xn+1 的一个因子。

在本次计中,我使用的系统开发平台为Quartus2Ⅱ,在Quartus2Ⅱ上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供

了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。

在本次设计中,采用的硬件描述语言是VHDL[3](Very-High-Speed Integrated Circuit Hardware Description Language)。VHDL语言是一种用于电路设计的高级语言。VHDL主要用于描述数字系统的结构、行为、功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。

1.1课程设计目的和要求

电子产品的设计生产,从选题、方案论证、性能指标确定、装调电路、修改、定型参数直到批量生产,是一个复杂而又费时的过程。该过程的任一环节,都对产品性能和经济效益产生直接影响。

尤其是集成电路的设计,器件在插接板上就无法组合成像集成电路内部那样紧密复杂的电子电路,装配板上的寄生参数与集成环境中的完全不同。因此,在装配板测试的特性将无法准确地描述集成电路的真实特性。所以,电子电路的传统设计方法已经不适应当前电子技术发展的要求,这就要借助计算机完成电子电路的辅助设计,即电子电路EDA 技术。EDA 包括电子工程设计的全过程,如系统结构模拟、电路特性分析、绘电路图和制作PCB 等。

本课程设计中将一组循环码输入,并且能编码,再纠错,再到解码输出的一个过程。

作为通信专业的学生,通过这次EDA方面的课程设计,可以提高我们对EDA 领域及通信电路设计领域的认识,有利于培养我们在通信电路EDA方面的设计能力。一人一题特别有利于锻炼我们独立分析问题和解决问题的能力。设计过程的复杂加老师的严格要求有益于培养我们严谨的工作作风。

1.2课程设计平台

Quartus2Ⅱ

2 应用工具介绍

作为当今最流行的计算机软件系统,EDA技术是以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。EDA可提供文本输入以及图形编辑的方法将设计者的意图用程序或者图形方式表达出来,而我们经常用到的VHDL语言便是用于编写源程序所需的最常见的硬件描述语言(HDL)之一。

利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。EDA现已广泛用于机械、电子、通信、航空航天、化工、矿产、生物、医学和军事等众多领域的设计和制造。

2.1 EDA技术介绍

EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来。EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计[1]。

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。也就是说,综合器是软件描述与硬件实现的一座桥梁。综合过程就是将电路

的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。

在今天,EDA技术已经成为电子设计的普遍工具,无论设计芯片还是设计系统,没有EDA工具的支持,都是难以完成的。EDA工具已经成为设计师必不可少的武器,起着越来越重要的作用。从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用广泛、工具多样、软件功能强大。EDA技术发展迅猛,完全可以用日新月异来描述。EDA技术的应用广泛,现在已涉及到各行各业。EDA 水平不断提高,设计工具趋于完美的地步。

2.2 VHDL语言介绍

VHDL 的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982 年。1987 年底,VHDL被IEEE 和美国国防部确认为标准硬件描述语言。

VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

2.3 VHDL语言的特点

VHDL 语言能够成为标准化的硬件描述语言并获得广泛应用 , 它自身必然具有很多其他硬件描述语言所不具备的优点。归纳起来 ,VHDL 语言主要具有以下优点:[1]

(1) VHDL 语言功能强大 , 设计方式多样

VHDL 语言具有强大的语言结构, 只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。同时, 它还具有多层次的电路设计描述功能。此外 ,VHDL 语言能够同时支持同步电路、异步电路和随机电路的设计实现, 这是其他硬件描述语言所不能比拟的。VHDL 语言设计方法灵活多

样 , 既支持自顶向下的设计方式, 也支持自底向上的设计方法; 既支持模块化设计方法, 也支持层次化设计方法。

(2) VHDL 语言具有强大的硬件描述能力

VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路 , 也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。同时,VHDL 语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。VHDL 语言的强大描述能力还体现在它具有丰富的数据类型。VHDL 语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。

(3) VHDL 语言具有很强的移植能力

VHDL 语言很强的移植能力主要体现在: 对于同一个硬件电路的 VHDL 语言描述 , 它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。

(4) VHDL 语言的设计描述与器件无关

采用 VHDL 语言描述硬件电路时, 设计人员并不需要首先考虑选择进行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的优化, 而不需要考虑其他的问题。当硬件电路的设计描述完成以后 ,VHDL 语言允许采用多种不同的器件结构来实现。

(5) VHDL 语言程序易于共享和复用

VHDL 语言采用基于库 ( library) 的设计方法。在设计过程中 , 设计人员可以建立各种可再次利用的模块 , 一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计 , 而是一些模块的累加。这些模块可以预先设计或者使用以前设计中的存档模块, 将这些模块存放在库中 , 就可以在以后的设计中进行复用。

由于 VHDL 语言是一种描述、模拟、综合、优化和布线的标准硬件描述语言 , 因此它可以使设计成果在设计人员之间方便地进行交流和共享, 从而减小硬件电路设计的工作量, 缩短开发周期。

3 设计原理

3.1编码器的设计

VHDL是一种行为描述语言,其编程结构类似于计算机中的C语言,在描述复杂逻辑设计时,非常简洁,具有很强的逻辑描述和仿真能力,是未来硬件设计语言的主流。在本设计中,应用VHDL语言,在Altera公司的Quartus II 7.2软件环境下,按照自顶而下的设计方法,对编译码器进行设计仿真。根据给定的(n,k)值选定生成多项式g (x),即从xn+1的因子中选一个(n-k)次多项式作为,假设给定信息码组为m (x)= (mk-1,mk-2...m0),其次数小于k,则xn-km (x)的次数必定小于n。用g (x)除xn-km (x),得到余式r (x),r (x)的次数必定小于g (x)的次数,即小于(n-k)。将此余式r (x)加于信息位之后作为监督位,即r (x)和xn-km (x)相加,得到多项式必定是一个码组多项式。因为它必定能被g (x)整除,且商的次数不大于(k-1)。

根据以上原理,循环码的编码步骤可以归纳如下:

(1)用xn-k乘信息码m (x),这一运算实际上是在信息码后附加上(n-k)个“0”。

(2)用g (x)除xn-km (x),得到商Q (X),

(3)编出的码组T (x) =xn-km (x) +r (x)。

由此可见,编码的核心是如何确定余式r (x),找到r (x)后,可直接将其所代表的编码位附加到信息位之后,完成编码。编码电路可采用(n-k)级反馈移位寄存器和异或门(模2加)组成的除法电路实现。以生成矩阵g (x) =x3+x+1生成(7,4)循环码的编码器为例,其除法电路如图1所示。

图3.1 除法电路图

此移位寄存器的个数与g (x)的次数相等,并且g (x)的系数1表示有反馈,0表示无反馈。每个寄存器的初始值均为0,将码组m3m2m1m0依次串行送入电路的最高端,相当于对其后面补三个零,除法电路经过四次移位后,寄

存器D1D2D3里的数即为余式r (x) 。因此,编出码组T (x) = (m3m2m1m0D1D2D3)。实际设计中,要有一个信号K来控制码组的输入与输出,在K的控制下,输入的信息码元,一方面串行输入信道,另一方面进入除法电路进行计算。当输入最末一位信息码元结束时,K信号也为零,在时钟脉冲作用下,移位寄存器将计算结果送往信道,即在最末一位信息码元后附加监督码。

3.2译码器的设计

接收端译码的要求有两个:检错和纠错。

(1)检错若接收码组R (x)与发送码组相同,即R (x) =T (x),则R (x)必定能被g (x)整除;若在传输中发生错误,即R (x)≠T (x),则R (x)被g (x)除时可能除不尽而有余项,从而发生错误。因此,可以以余项是否为零来判断接收码组中有无错误。但是,有错码的接收码组也有可能被g (x)整除,这时的错码就不能检出。这种错误称为不可检错误,其误码必定超过了此编码的检错能力。

(2)纠错

为了能够纠错,要求每个可纠正的错误图样必须与一个特定余式有一一对应关系。只有存在上述一一对应的关系时,才可能从上述余式唯一地决定错误图样,从而纠正错码。以下是为纠错而设计的。由于(7,4)循环码的最小码距为d0=3,由d0≥2t+1得,此循环码只能纠正一个错码。当经过信道传输后发生错误时,接收码组多项式R (x)不再是的倍式。

其中S (x) 是R (x) 除以g (x) 后的余式,是不大于r-1次的码组多项式,称为伴随多项式或校正子多项式。时接收码组多项式可表示为发送码组多项式T (x) 与差错多项式E (x) 之和,即:R (x) =T (x) +E (x)综合以上式子,我们由就可进一步确定 E (x):

S (x) =rem [T (x) +E (x) ]=rem [E (x) ]

g (x) g (x)

对于一个S (x),E (x) 可能有多种形式。由S (x) 确定E(x) 时同样使用最大似然比准则。对最小码重的差错多项式E(x),由上式求出对应的伴随多项式S (x),将E (x) 与S (x) 的对应关系列成译码表。当收到任一码组R (x) 后,利用S (x)=rem [R (x) /g (x)]求出S (x),对照译码表找到 E (x),再用R (x) =T

(x) +E (x) 求T (x),即T (x) =R (x) +E (x) 为已经纠错的原发送码组。纠错完毕之后,只需要取纠错后的前四位,即为所译码元。而在实际电路设计过程中,由于二进制只有0 与 1 两种状态,知道错误位置后,可以直接对该位置的码元取反即可。

综上所述,纠错的步骤如下:

(1)把接收码组R ( x) 送入除法电路,得到余数D1D2D3 即为伴随矩阵S (x)。

(2)由典型生成矩阵G 和典型监督矩阵HT 之间的关系可进一步求得,再由S=E.HT 可得错误图样E(x),这样就可以确定错码的位置。

(3)根据错误的码位,对该码位的码元取反输出便可得到原发送码组T (x)。其中,T (x) 的前四位即为译出码元m(x)。

图3.2 译码器示意图

在运用VHDL设计时,将接收码组进行串并转换,进入除法电路求其伴随式,让其并行输出之后送入错误图样识别器来确定E,以便确定出错码的位置,对其错码位取反即可。最后,通过并串转换将译码后的码组串行输出。

4 设计步骤

4.1 VHDL设计流程

本设计是采用的是循环码编译码器,图4.1是一个典型的VHDL设计流程:

图4.1 VHDL 语言设计流程图

4.2 系统分析

本设计在Quartus2Ⅱ的EDA软件平台上,运用VHDL语言进行编程。程序流程图如图3所示:

图4.2 循环码编译码框架图

循环码编译码系统结构图如图4.1 所示。由定时单元(控制信号生成单元) 、信码发生器、编码器单元、模拟错码发生器、错码位置计算单元、纠错单元组成。其中错码位置计算单元和纠错单元合在一起构成译码器。

4.3 程序流程分析

图4.3 程序流程图

该程序流程主要通过输入一组四位信息码组,然后根据编码后的余数输出对编码进行检错判断,若输出余数为000 则无错码,若输出的余数为图4.22中,则有错码。然后纠错并译码输出一个7位信息码组。

4.4 程序设计

根据程序流程图编写程序,源程序如下所示:

其中,为了增加译码器的可读性,增加了个judge信号,当为00时表示无错码,11时表示有错码。

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY cycle IS

PORT (

datain: IN STD_LOGIC;

clk,clr,clr2: IN STD_LOGIC;

enable1: in std_logic;

enable2: in std_logic;

tout:out std_logic_vector(6 downto 0);

judge:out std_logic_vector(1 downto 0)

);

END cycle;

ARCHITECTURE arc_cycle OF cycle IS

SIGNAL d0,d1,d2:STD_LOGIC;

signal q1,q2,q0:STD_LOGIC_vector(7 downto 0):="00000000"; signal dataout: std_logic;

signal din: std_logic_vector(6 downto 0);

signal rout: std_logic_vector(2 downto 0);

--signal din: std_logic_vector(6 downto 0):="0000000";

BEGIN

u1:process (clk)

variable g:std_logic;

variable m:integer range 1 to 8;

begin

if (clk'event and clk='1') then

if clr='1' then --初始状态

g:='0';

m:=1;

dataout<='0';

else

if m<=8 then

if m<=4 then --输入四位信息位

dataout<=datain;

case m is

when 1 => din(6)<=dataout;

when 2 => din(6)<=dataout;

when 3 => din(5)<=dataout;

when 4 => din(4)<=dataout;

when 5 => din(3)<=dataout;

when 6 => din(2)<=dataout;

when 7 => din(1)<=dataout;

when 8 => din(0)<=dataout;

end case;

g:=datain XOR d2;

else

dataout<=d2; --余数输出

case m is

when 1 => din(6)<=dataout;

when 2 => din(6)<=dataout;

when 3 => din(5)<=dataout;

when 4 => din(4)<=dataout;

when 5 => din(3)<=dataout;

when 6 => din(2)<=dataout;

when 7 => din(1)<=dataout;

when 8 => din(0)<=dataout;

end case;

g:='0';

end if;

d2<=d1;

d1<=g XOR d0;

d0<=g;

m:=m+1;

end if;

end if;

end if;

end process u1;

---------------------------------

--

u2:process (clk)

begin

if (clk'event and clk='1') then

if enable1='1' then

for i in 1 to 7 loop -- 各寄存器按反馈关系经七次移位后,各寄存器中的数即为所求的伴随式

q2(i) <= q1(i-1) ;

q1(i) <=q2(i-1) xor q0(i-1) ;

q0(i) <=din(7-i) xor q2(i-1) ;

end loop;

rout(0)<=q0(7);

rout(1)<=q1(7);

rout(2)<=q2(7);

end if;

end if;

end process u2;

----

--

u3:process (clk)

begin

if (clk'event and clk='1') then

if enable2='1' then -- enable2 信号用来控制开始纠错

if (clr2='1') then -- 初始状态

tout<="0000000" ;

judge<="00" ;

else

case rout is -- rout 为伴随式(从低位到高位)

when "100" => -- rout为100 时,最低位码有错

tout <=din ( 6 downto 1) & (not din (0)) ; -- 错码位取反

judge<="11" ;

when "101" => -- rout为101 时,最高位码有错

tout <= (not din (6)) & din (5 downto 0) ;

judge<="11" ;

when "000" => -- rout 为000 时,无错码

judge<="00" ;

tout<=din; -- 纠错后输出

when others =>

null;

end case;

end if;

end if;

end if;

end process u3;

end arc_cycle;

4.5 系统仿真

系统仿真是在实际系统上进行实验研究比较困难时适用的必不可少的工具,它是指通过系统模型实验去研究一个已经存在或正在设计的系统的过程,通俗地讲,就是进行模型实验。因而,系统仿真的结果决定整个课程设计任务完成的到位程度。

程序输入完成后进行编译,编译完成后,可以对所进行的设计进行仿真,本课程设计的仿真平台是Quartus2Ⅱ,通过对VHDL源程序进行编译检错,然后

创建波形文件,加入输入输出变量,选择适用的芯片以及设定仿真结束时间,设置好输入初值进行仿真,得到仿真波形图如图4.4所示:

图4.4 程序仿真图

仿真图中clk为时钟信号;clr,clr2为初始状态;enable1,enable2,是用来控制开始纠错;datain为输入信号;dataout为输出信号;,din为纠错输出,是dataout 经过串转并行后变成din ;rout是纠错后的余数,判断纠错情况;tout为7位输出;judge为00时表示无错码,为11时表示有错码。

图4.5 模块仿真图

图4.6 RTL图

4.6 结果分析

图4.7(7.4)循环码图

图4.8 错误图样E和伴随式S

对照上述所述附表可知,如果该输入为1001 则对应的纠错后输出码为1001110。

从仿真图中纠错输出din可得知该设计和实际仿真结果一致,达到所需要的设计目的。

5 结束语

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新月异,EDA技术已经成为当今计算机应用中空前活跃的领域,在生活中可以说是无处不在。因此作为二十一世纪的大学生来说掌握EDA技术是十分重要的。

对于EDA课程设计来说,我们大多数同学还都是一张白纸,同样对于VHDL 语言对于我们来说同样完全陌生,但是通过大家不懈的努力,从不知道变为知道,从简单操作到熟练运用,大家都付出了相应的心血。虽然,在EDA这块领域上面我们还只是入门级别,但是我相信通过此次EDA课程设计的学习,大大增加了同学们的动手能力和思考能力,为我们今后步入社会打下了坚实的基础。通过理论学习到实际应用,这次的EDA课程设计让我们切身体会到了什么才是学以致用。由于是第一次做EDA课程设计,在设计之中也不免遇到了种种问题和困难,这样才能让我自己发现自己的不足之处,才能让自己在更远的学习道路上处于不败之地。

6 致谢

在此次EDA课程设计中,由于对知识的理解不足,因此也遇到了种种问题和困难,虽然设计上还有些不足之处,但是通过老师和同学的帮助使问题得到进一步解决,让我也在此次课程设计中学习到了许多新的知识,同样也让我明白了,无论做任何事情,只要持之以恒,不断努力,终究会有成功的一天。对此次课程设计给予帮助的老师和同学,在此深表感谢!

参考文献

[1] 潘松,黄继业.EDA技术使用教程.北京:科学出版社,2002。

[2] 李国洪,沈明山,胡辉.可编程器件EDA技术与实践[M].北京:机械工业出版社,2004年,7月.

[3] 付家才.EDA工程实践技术[M].北京:工业出版社,2005年,1月.

[4]潘松,黄国栋.VHDL实用教程.电子科技出版社.

编码器和译码器的应用

编码器、译码器及应用电路设计 一、实验目的: 1、掌握中规模集成编码器、译码器的逻辑功能测试和使用方法; 2、学会编码器、译码器应用电路设计的方法; 3、熟悉译码显示电路的工作原理。 二、实验原理: 1、什么是编码: 教材说:用文字、符号、或者数字表示特定对象的过程称为编码 具体说:编码的逻辑功能是把输入的每个高、低电平信号编成对应的二进制代码 2、编码器74LS147的特点及引脚排列图: 74LS147是优先编码器,当输入端有两个或两个以上为低电平,它将对优先级别相对较高的优先编码。其引脚排列图: 3、什么是译码:译码是编码的逆过程,把给定的代码进行“翻译”,变成相应的状态,使输出通道中相应的一路有信号输出,译码器广泛用于代码转换、终端的数字显示、数据分配、组合控制信号等。 译码器按照功能的不同,一般分为三类:二进制译码器、二—十进制译码器、显示译码器。 (1)变量译码器(用以表示输入变量的状态) 74LS138的特点及其引脚排列图:反码输出。 ABC是地址输入端,Y0—Y7是输出端,G1、G2A’、G2B’为 使能端,只有当G1=G2A’=G2B’=1时,译码器才工作。 (2)码制变换译码器:用于同一个数据的不同代码之间的相互转换,代表是4—10线译码器 译码器74LS42的特点及其引脚排列图: 译码器74LS42的功能是将8421BCD码译成10个对象 其原理与74LS138类同,只不过它有四个输入端, 十个输出端,4位输入代码0000—1111十六种状态组合

其中有1010—1111六个没有与其对应的输出端, 这六组代码叫做伪码,十个输出端均为无效状态。 (3)数码显示与七段译码驱动器:将数字、文字、符号的代码译成数字、文字、符号的电路 a、七段发光二极管数码显示管的特点:(共阴极) b、七段译码驱动器: 4、在本数字电路实验装置上已完成了译码器74LS48和数码管之间的连接图。 三四五脚接高电频,数码管的单独端接低电频。

循环码编译码matlab程序

循环码编译码matlab程序 循环码编码程序 function [ C ] = cyclic_encoder( Si ) %C为循环编码的输出编码结果 %对x^8+1进行模2因式分解得到:x^8+1=(x^3+x^2+x+1)*(x^5+x^4+x+1) y=size(Si,2);%y表示Si的列数,即输入码元的个数 M=ceil(y/5);%将信息码元分成M帧,一帧5个信息码元 n=8;%循环编码的一帧码长 k=5;%信息位的个数 r=n-k;%监督位的个数 gx=[1,1,1,1];%(8,5)循环码的生成多项式g(x)=x^3+x^2+x+1 Ai=zeros(1,8*M);%Ai用来存放所输入的码元经过循环编码后的码字 Axi=zeros(1,8);%Axi用来表示循环编码后的一帧的编码输出码字 mi=zeros(1,5);%mi用来存放每一帧的信息码元 for i=1:M for j=1:5 mi(j)=Si(j+(i-1)*5); end Axi(4:8)=mi(1:5); Axi=circshift(Axi',-r)';%实现(x^(n-k))*m(x),其中m(x)的系数由mi决定 [qx,rx]=deconv(Axi,gx);%实现((x^(n-k))*m(x))/g(x),得到商q(x)和余数r(x) Axi=Axi+rx;%实现Axi(x)=Axi(x)+r(x),得到的Axi就是循环编码的编码输出码字 Ai(8*i-4:8*i)=Axi(1:5); Ai(8*i-7:8*i-5)=Axi(6:8); end %for循环是为了实现模2相加,使循环编码的输出码字Ai中只有0,1 for i=1:8*M if rem(abs(Ai(i)),2)==0 Ai(i)=0; else Ai(i)=1; end end C=Ai;%循环编码的输出码字C=Ai end

循环码的编码方法研究

摘要本文对循环码的编码方法进行了深入的分析和探讨,循环码具有很高的可靠性,在通信、军事等领域应用非常广泛。关键词循环码编码中图分类号:G202文献标识码:A 0 引言循环码是线性分组码最重要的子集。它除了具有线性分组码的一般性质外,还有许多特殊的性质,这些性质有助于按照要求的纠错能力系统地构造这类码,并且简化译码算法。循环码还有易于实现的特点,很容易用带反馈的移位寄存器实现其硬件。正是由于循环码具有码的代数结构清晰、检纠错能力强、编译码易于实现,具有很高的可靠性等特点,因此在通信、军事等领域应用非常广泛。 1 循环码的相关概念 1.1 循环码的特性表1给出了(7,3)循环码的所有码字,我们可以直观的看出循环码具有如下特性:(1)封闭性。(线性性):任何许用码组的线性和还是许用码组。(2)循环性:任何许用的码组循环移位后的码组还是许用码组。表1 (7,3)循环码 1.2 循环码的码多项式用码多项式来表示来表示循环码,可以方便的利用代数理论对其进行研究。若许用码字为C = (,,…,):,码多项式可表示为:C(x) = … c1x c0其中:对于二元码组,多项式的每个系数是0或者1; x仅是码元位置的标志,并不关心x的取值。利用码多项式可以方便的表示循环移位特性。若C(x) 是一个长为n的许用码字,则xi C(x) (左乘xi)在按模xn 1运算下,亦是一个许用码字,也就是:xiC(x) = Ci(x) (模xn 1),正是C(x) 代表的码组向左循环移位次的结果。 1.3 循环码的生成多项式和生成矩阵循环码的生成多项式g(x)是一个常数项为1,且能除尽xn 1的r = n - k次多项式;循环码中其它码多项式都是g(x)的倍式。由生成多项式可以表示出生成矩阵G(x)为: 1.4 循环码的监督多项式和监督矩阵利用循环码的特点来确定监督矩阵H, 由于循环码中是的因式,因此可令:h(x) == xk hk-1xk-1 … h1x 1,这里称为监督多项式。与G(x)相对应,监督矩阵表示为: 其中:h*(x)是h(x)逆多项式,h*(x) = xk h1xk-1 h2xk-2 … hk-1x 1。 2 循环码编码的具体实现方法 2.1 利用生成矩阵编码 2.1.1 求解生成多项式根据g(x)的特性,g(x)是xn 1的一个r次因式。因此,先对xn 1进行因式分解,找到它的r次因式。以(7,3)循环码为例进行分析: 第一步:对x7 1进行因式分解得:x7 1 = (x 1)(x3 x2 1)(x3 x 1) 第二步:构造生成多项式g(x),即找r = n - k = 4次因子。不难看出,这样的因子有两个,即: (x 1)·(x3 x2 1) = x4 x2 x 1 (x 1)·(x3 x 1) = x4 x3 x2 1 2.1.2 编码由g(x)得到生成矩阵为: 循环码是线性码的一种,根据线性码编码的特点,生成矩阵确定,码组也就确定了。 C = mG 其中,C是编码之后的码字,m是信息码元序列,G是生成矩阵。 2.2 利用监督矩阵编码由h*(x)得到监督矩阵为: 根据线性码编码的特点,监督矩阵确定,码组也就确定了。 HCT = 0其中,C是编码之后的码字,H是监督矩阵。 2.3 循环码的系统码编码方法设要产生(n,k)循环码,m(x)表示信息多项式,编码步骤如下: (1)用xn-k乘m(x)。根据码多项式的特点,左乘xn-k实际上是把信息位左移位(n-k),即在信息码后加上(n-k)个“0”。例如,信息码为110,它相当于m(x) = x2 x。当n-k = 7-3 = 4时, xn-k·m(x) = x6 x5,它相当于1100000。而希望的到得系统循环码多项式应当是C(x) = xn-k·m(x) r(x) (2)求r(x)。由于循环码多项式C(x)都可以被g(x)整除,也就是: == (3)求C(x),C(x) = xn-k·m(x) r(x) 例如,对于(7,3)循环码,若选用g(x) = x4 x2 x 1,信息码110时,则: = ,求得r(x) = x2 1,这时的编码输出为:1100101。 3 结论本文深入系统地分析了循环码的编码技术。随着数字技术的高速发展,循环码纠错技术已经广泛应用于各种通信系统中。其编码和译码都可以通过简单的反馈移位寄存器来完成,实现简单,纠错能力强 ,可以降低误码率,保证数据传输的可靠性,大大提高通信质量。

译码器和编码器实验

实验三译码器和编码器 一实验目的 1.掌握译码器、编码器的工作原理和特点。 2.熟悉常用译码器、编码器的逻辑功能和它们的典型应用。 二、实验原理和电路 按照逻辑功能的不同特点,常把数字电路分两大类:一类叫做组合逻辑电路,另一类称为时序逻辑电路。组合逻辑电路在任何时刻其输出的稳态值,仅决定于该时刻各个输入信号取值组合的电路。在这种电路中,输入信号作用以前电路所处的状态对输出信号无影响。通常,组合逻辑电路由门电路组成。 组合逻辑电路的分析方法:根据逻辑图进行二步工作: a.根据逻辑图,逐级写出函数表达式。 b.进行化简:用公式法、图形法或真值表进行化简、归纳。 组合逻辑电路的设计方法:就是从给定逻辑要求出发,求出逻辑图。一般分四步进行。 a.分析要求;将问题分析清楚,理清哪些是输入变量,哪些是输出函数。 b.列真值表。 c.进行化简:变量比较少时,用图形法。变量多时,可用公式化简。 d.画逻辑图:按函数要求画逻辑图。 进行前四步工作,设计已基本完成,但还需选择元件——集成电路,进行实验论证。 值得注意的是,这些步骤并不是固定不变的程序,实际设计时,应根据具体情况和问题难易程度进行取舍。 1.译码器 译码器是组合电路的一部分,所谓译码,就是把代码的特定含义“翻译”出来的过程,而实现译码操作的电路称为译码器。译码器分成三类: a.二进制译码器:如中规模2—4线译码器74LS139。,3—8线译码器74LS138等。 b.二—十进制译码器:实现各种代码之间的转换,如BCD码—十进制译码器74LS145等。 c.显示译码器:用来驱动各种数字显示器,如共阴数码管译码驱动74LS48,(74LS248),共阳数码管译码驱动74LS47(74LS247)等。 2.编码器 编码器也是组合电路的一部分。编码器就是实现编码操作的电路,编码实际上是译码相反的过程。按照被编码信号的不同特点和要求,编码器也分成三类: a.二进制编码器:如用门电路构成的4—2线,8—3线编码器等。 b.二—十进制编码器:将十进制的0~9编成BCD码,如:10线十进制—4线BCD码编码器74LS147等。 c.优先编码器:如8—3线优先编码器74LS148等。 三、实验内容及步骤 1.译码器实验 (1)将二进制2-4线译码器74LS139,及二进制3-8译码器74LS138分别插入实验系统IC 空插座中。 按图1.3.1接线,输入G、A、B信号(开关开为“1”、关为“0”),观察LED输出Yo、Y1、Y2、Y3的状态(亮为“1”,灭为“0”),并将结果填入表1.3.1中。

实验6 循环码的软件编、译码实验

实验六循环码的软件编、译码实验 一、实验目的 (1)通过实验了解循环码的工作原理。 (2)了解生成多项式g(x)与编码、译码的关系。 (3)了解码距d与纠、检错能力之间的关系。 (4)分析(7.3)循环码的纠错能力。 二、实验要求 用你熟悉的某种计算机高级语言或单片机汇编语言,编制一(7,3)循环码的编、译码程序,并改变接受序列R(x)和错误图样E(x),考查纠错能力情况。 设(7,3)循环码的生成多项式为:g(x)=x4+x3+x2+1 对应(11101)(1)按编、译码计算程序框图编写编、译码程序 (2)计算出所有的码字集合,可纠的错误图样E(x)表和对应的错误伴随式表。 (3)考查和分析该码检、纠一、二位错误的能力情况。 (4)整理好所有的程序清单,变量名尽量用程序框图所给名称,并作注释。 (5) 出示软件报告. 三、实验设计原理 循环码是一类很重要的线性分组码纠错码类,循环码的主要优点是编、译码器较简单,编码和译码能用同样的反馈移存器重构,在多余度相同的条件下检测能力较强,不检测的错误概率随多余度增加按指数下降。另外由于循环码具有特殊的代数结构,使得循环码的编、译码电路易于在微机上通过算法软件实现。 1、循环码编码原理 设有一(n,k)循环码,码字C=[C n-1…C r C r-1…C0],其中r=n-k。码字多项式为: C (x ) = C n-1x n-1+ C n-2x n-2+… +C1x+C0。 码字的生成多项式为: g(x)= g r-1x r-1+g r-2x r-2+…+g1x+g0 待编码的信息多项式为:m(x)=m K-1x K-1+…+m0 x n-k.m(x)=C n-1x n-1+…+C n-K x n-K

实验6-BCH循环码的编码与译码的matlab实现

实验6 BCH循环码的编码与译码 一、实验内容 用VC或Matlab软件编写循环BCH码的编码与译码程序。利用程序对教科书的例题做一个测试。 二、实验环境 1.计算机 2.Windows 2000 或以上 3.Microsoft Visual C++ 或以上 4.Matlab 或以上 三、实验目的 1.通过BCH循环码的编码与译码程序的编写,彻底了解并掌握循环BCH的编码与译码原理 2.通过循环BCH码的编码与译码程序的编写,提高编程能力。 四、实验要求 1.提前预习实验,认真阅读实验原理以及相应的参考书。 2.对不同信道的进行误码率分析。特别是对称信道,画出误码性能图。即信道误码率与循环汉明码 之间的关系。 3.认真填写实验报告。 五、实验原理 1.循环BCH的编码与译码原理(略) 2.循环BCH的程序实现。 六、实验步骤 文件 function bch_en_decode() code=bch155 code=code+randerr(5,15,1:3); code=rem(code,2); code=gf(code) %随机产生1-3位错误 decode=debch155(code) end function decode=debch155(code) code=gf(code); M=4; code = gf,M); [m , n]=size(code);decode=[]; code1=[]; for i=1:m ;code1=code(i,:); M=;T2=6;N=15; S = code1* ((gf(2,M,).^([N-1:-1:0]'*([1:T2]))); LambdaX = gf([1 zeros(1,T2)],M,;

最新——循环码(9,3)码

目录 目录 (1) 一、摘要: (2) 二、关键字: (2) 三、基本概念: (2) 四、循环码的多项式描述: (3) 4.1 生成多项式g(x)及生成矩阵G (3) 4.2 系统循环码 (4) 4.3 循环码的编码: (5) 4.4 检错纠错能力 (6) 五、编码器.译码器原理图: (6) 5.1 编码器原理图 (6) 5.2 译码器原理图 (8) 六、循环码和线性分组码、Hamming码的区别、联系: (12) 6.1 线性分组码 (12) 6.2 循环码 (12) 6.3 汉明码hamming (13) 七、循环码的MATLAB仿真: (13) 八、参考文献: (16) 九、参与人员: (16)

循环码(9,3)码课程设计 一、摘要: 本报告详细给出了循环码的定义以及由生成多项式求解生成矩阵和系统生成矩阵的过程,并在Matlab 环境下写出了循环码的编码器和解码器代码,实现了编码和译码功能。分析和讨论了此码发现错误、纠正错误的能力,并讨论了其与线性分组码、Hamming 码等信道编码的区别与联系。 二、关键字: 循环码 编码 译码 检错 纠错 Matlab 三、基本概念: 更好的设计和实现线性分组码的方法是引入特定的数学结构来界定某一类线性分组码。循环码即是采用循环移位特性界定的一类线性分组码。 循环码定义:设C 使某(n,k)线性分组码的码字集合,如果对任何 C c c c C n n ∈=--),,,(021 ,它的循环移位),,,(1032)1(---=n n n c c c c C 也属于C ,则称该(n,k )码为循环码。 该码在结构上有另外的限制,即一个码字任意循环移位的结果仍是一个有效码字。其特点是:(1)可以用反馈移位寄存器很容易实现编码和伴随式的计算;(2)由于循环码有很多固有的代数结构,从而可以找

实验一 用VHDL语言设计组合逻辑电路

实验一用VHDL语言设计组合逻辑电路 一、实验目的:掌握用VHDL语言设计组合逻辑电路的方法。熟悉QuartusⅡ的 操作。 二、实验仪器:PC机一台 三、实验内容: 1.用VHDL语言设计4选1数据选择器。 2.用文本输入法输入 3.建立工程,编译,改错,直至编译通过 4.仿真,验证所设计电路的正确性 四、操作步骤: 1、在所使用的计算机数据盘里建立自己的文件夹 2、打开QuartusII 3、单击工具栏中的new,在出现的对话框中选择VHDL File,点击OK。 4、输入设计程序。 输入结束后,将程序保存在自己的文件夹中。注意:存盘的文件名应该跟实体名相同。 5、创建工程。创建工程有两种方法:第一种方法是在保存文件后出现的对话框 中点击‘是’,按提 示进行操作;

第二种方法是在出现的对话框点击‘否’。 第一种方法的具体过程: 点击‘是’,出项下面的框 点击‘Next’,出项 不需要任何修改,继续点击‘Next’,出项

继续点击‘Next’,在后面出现的框图中继续点击‘Next’,直到没有‘Next’选项,点击‘Finish’,这样就完成工程的创建。 第二种方法的具体过程:点击‘否’ 此时要创建工程,点击菜单File下的“New Preject Wizard”。出现框图: 点击‘Next’,出项

名,点击打开(或双击要创建工程的文件名),出现 项目名称和文件名称相同。点击‘Next’,出现

点击,在出现的对话框点击文件名,点击‘打开’,出现 点击右边的‘add’,出现

点击‘Next’,在后面出现的框图中继续点击‘Next’,直到没有‘Next’选项,点击‘Finish’,这样就完成工程的创建。 6、观察QUARTUS 界面 点击箭头所指图标,观察箭头上方的变化,点击+号,双击出项的文件

(7,4)循环码的编码和译码

(7,4)循环码的编码译码 编码的实验原理: 根据循环码的代数性质建立系统编码的过程,可以把消息矢量用如下多项式表示: 要编码成系统循环码形式,把消息比特移入码字寄存器的最右边k 位,而把监督比特加在最左边的n-k 个中,则要用k n x -乘以m(x)得到 k n x - m(x)= k n x - m(x)= q(x) g(x)+ p(x),其中p(x)可以表示为 p(x)= ,则p(x)+ k n x - m(x) = + 另U(x)= p(x)+ k n x - m(x),则U=(0p ,1p ,2p ,·,1--k n p ,0m ,1m ,·,1-k m )。 本实验根据以上原理,用matlab 实现书上例6.8系统形式的循 环码,生成多项式为g(x)= (7,4)循环码的编码的程序如下:clear; clc; a=[1 0 1 1]; %高次项系数在前的生成多项式 Gx=[1 0 1 1]; %将数组a 的高位依次放在数组Data 的低位 Data=zeros(1,7); Data(1)=a(4); Data(2)=a(3); Data(3)=a(2); Data(4)=a(1); %Data 除以Gx 得到余数Rx [Qx,Rx]=deconv(Data,Gx); 12211...)(m x m x m x m x m k k k k ++++=----k n k n n k n k x m x m x m x m -+-----++++0112211 (011) 1...p x p x p k n k n +++----0 111...p x p x p k n k n +++----k n k n n k n k x m x m x m x m -+-----++++0112211 (3) 1x x ++

编码器和译码器实验报告

译码器、编码器及其应用 一、实验目的 (1) 掌握中规模集成译码器的逻辑功能和使用方法; (2) 熟悉掌握集成译码器和编码器的应用; (3) 掌握集成译码器的扩展方法。 二、实验设备 数字电路实验箱,74LS20,74LS138。 三、实验内容 (1) 74LS138译码器逻辑功能的测试。将74LS138输出??接数字实验箱LED 管,地址输入接实验箱开关,使能端接固定电平(或GND)。电路图如Figure 1所示: Figure 2 ??????????????时,任意拨动开关,观察LED显示状态,记录观察结果。 ??????????????时,按二进制顺序拨动开关,观察LED显示状态,并与功能表对照,记录观察结果。 用Multisim进行仿真,电路如Figure 3所示。将结果与上面实验结果对照。

Figure 4 (2) 利用3-8译码器74LS138和与非门74LS20实现函数: ?? 四输入与非门74LS20的管脚图如下: 对函数表达式进行化简: ?? ?? A ? ??????????? ???? 按Figure 5所示的电路连接。并用Multisim进行仿真,将结果对比。 Figure 6

(3) 用两片74LS138组成4-16线译码器。 因为要用两片3-8实现4-16译码器,输出端子数目刚好够用。 而输入端只有 A、、三个,故要另用使能端进行片选使两片138译码器 进行分时工作。而实验台上的小灯泡不够用,故只用一个灯泡,而用连接灯泡的导线测试?,在各端子上移动即可。在multisim中仿真电路连接如Figure 7所示(实验台上的电路没有接下面的两个8灯LED): Figure 8 四、实验结果 (1) 74LS138译码器逻辑功能的测试。 当输入 A时,应该是输出低电平,故应该第一个小灯亮。实际用实验台测试时,LE0灯显示如Figure 9所示。当输入 A时,应该是输出低电平,故理论上应该第二个小灯亮。实际用实验台测试时,LE0灯显示如Figure 6所示。 Figure 10

(7,4)循环码的编码和译码教学内容

(7,4)循环码的编码 和译码

(7,4)循环码的编码译码 编码的实验原理: 根据循环码的代数性质建立系统编码的过程,可以把消息矢量用如下多项式表示: 要编码成系统循环码形式,把消息比特移入码字寄存器的最右边k 位,而把监督比特加在最左边的n-k 个中,则要用k n x -乘以m(x)得到 k n x - m(x)= k n x - m(x)= q(x) g(x)+ p(x),其中p(x)可以表示为 p(x)= ,则p(x)+ k n x - m(x) = + 另U(x)= p(x)+ k n x - m(x),则U=(0p ,1p ,2p ,···,1--k n p ,0m , 1m ,···,1-k m )。 本实验根据以上原理,用matlab 实现书上例6.8系统形式的循环码,生成多项式为g(x)= (7,4)循环码的编码的程序如下:clear; clc; a=[1 0 1 1]; %高次项系数在前的生成多项式 Gx=[1 0 1 1]; %将数组a 的高位依次放在数组Data 的低位 Data=zeros(1,7); Data(1)=a(4); Data(2)=a(3); Data(3)=a(2); Data(4)=a(1); %Data 除以Gx 得到余数Rx 12211...)(m x m x m x m x m k k k k ++++=----k n k n n k n k x m x m x m x m -+-----++++0 112211 (011) 1...p x p x p k n k n +++----0111...p x p x p k n k n +++----k n k n n k n k x m x m x m x m -+-----++++0112211 (3) 1x x ++

编码器、译码器及应用电路设计

实验六编码器、译码器及应用电路设计 一、实验目的: 1、掌握中规模集成编码器、译码器的逻辑功能测试和使用方法; 1、学会编码器、译码器应用电路设计的方法; 3、熟悉译码显示电路的工作原理。 二、实验原理: 编码是用文字、符号或者数字表示特定对象的过程,在数字电路中是用二进制数进行编码的,相应的二进制数叫二进制代码。编码器就是实现编码操作的电路。本实验使用的是优先编码器74LS147,当输入端有两个或两个以上为低电平时,将对输入信号级别相对高的优先编码,其引脚排列如图6—1所示。 图6—1 74LS147引脚排列图图6—2 74LS138引脚排列图译码是编码的逆过程,是把给定的代码进行“翻译”,变成相应的状态,使输出通道中相应的一路有信号输出。译码器在数字系统有广泛的用途,不仅用于代码的转换、终端的数字显示,还用于数据分配和组合控制信号等。不同的功能可选用不同种类的译码器。 译码器按照功能的不同,一般分为三类: 1、变量译码器(二进制译码器):用以表示输入变量的状态,如2—4线、3—8线、4—16线译码器。以3—8线译码器74LS138为例介绍: 图6—2为74LS138的引脚图,其中,A2A1A0为地址输入端,为译码器输出端,为使能端(只有当时,才能进行译码)。 图6—3 74LS42引脚排列图图6—5为CC4511引脚排列图 2、码制变换译码器:用于同一个数据的不同代码之间的相互变换。这种译码器的代表是4—10线译码器,它的功能是将8421BCD码译为十个对象,如74LS42等。它的原理与 74LS138译码器类同,只不过它有四个输入端,十个输出端。4位输入代码共有0000—1111

门电路VHDL语言

“非”门 library ieee; use ieee.std_logic_1164.all; entity not1 is port(a:in std_logic; b:out std_logic); end entity not1; architecture behav of not1 is begin b<=not a; end architecture behav; “与”门 library ieee; use ieee.std_logic_1164.all; entity and2 is port(a,b:in std_logic; c:out std_logic); end entity and2; architecture behav of and2 is begin c<=a and b; end architecture behav; “与非”门 library ieee; use ieee.std_logic_1164.all; entity nand2 is port(a,b:in std_logic; c:out std_logic); end entity nand2; architecture behav of nand2 is begin c<=not(a and b); end architecture behav; “或非”门 library ieee; use ieee.std_logic_1164.all; entity nor2 is port(a,b:in std_logic; c:out std_logic); end entity nor2; architecture one of nor2 is begin c<=not(a or b); end architecture one; “异或非”门 library ieee; use ieee.std_logic_1164.all; entity xor2 is port(a,b:in std_logic; c:out std_logic); end entity xor2; architecture one of xor2 is Begin c<=not( ( (not a)and b)or(a and(not b) ) ); end architecture one; D触发器 library ieee; use ieee.std_logic_1164.all; entity dffa is port(D,clk,clr:in std_logic; Q:out std_logic); end entity dffa; architecture behave of dffa is begin process(clk,D,clr) begin if clr='1' then Q<='0'; Elsif clk'event and clk='1' then Q<=D; end if; end process; end architecture behave; T触发器 library ieee; use ieee.std_logic_1164.all; entity tffa is port(T,clk,clr: in std_logic; Q: buffer std_logic); end entity tffa; architecture behave of tffa is begin process(clk,T,clr) begin if clk'event and clk='1'then if clr='1' then Q<='0'; Elsif t='1'then Q<=not Q; else Q<=Q; End if; end if; end process; end architecture behave; JK触发器 library ieee; use ieee.std_logic_1164.all; entity jk is port(J,K,clk, in std_logic; Q: buffer std_logic); end entity tffa; architecture behave of jk is begin process(clk,J,K) begin if clk'event and clk='1'then Q<=( (J and(not Q) )or( (not K)and Q) ); end if; end process; end architecture behave;

vhdl语言编写的门电路

ENTITY AND2A IS PORT (A,B:IN BIT; C:OUT BIT); END ENTITY AND2A; ARCHITECTURE EX1 OF AND2A IS BEGIN C<=A AND B; END ARCHITECTURE EX1; 用VHDL设计一个具有高电平使能端的三态非门LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY trigate IS PORT( A, EN: IN STD_LOGIC; Y: OUT STD_LOGIC ); END trigate; ARCHITECTURE a OF trigate IS BEGIN PROCESS( A, EN) BEGIN IF EN ='0' THEN Y<= 'Z'; ELSE Y<= A; END IF; END PROCESS; END a;

entity nand3a is port (A,B,C:in bit; Y:out bit); end entity nand3a; architecture text2 of nand3a is begin Y<=not (A and B and C ); end architecture text2; 用VHDL设计电路 entity b3 is Port (A, B,Ci: in bit; S,Co:out bit); end entity b3; architecture text2 of b3 is begin S<= A xor B xor Ci ; Co<=( A and B) or (Ci and (A xor B )); end architecture text2;

编码器和译码器

编码器和译码器 07级23系 马运聪PB07210249 肖阳辉 实验目的: 1掌握编码器、译码器的逻辑功能和分析方法、设计方法。 2熟悉中规模集成电路编码器、译码器的电路结构和功能工作原理。 实验原理: 1优先编码器 输入输出均以低频信号为有效信号。 功能表如下: 输入 输出 S I'0 I'1 I'2 I'3 I'4 I'5 I'6 I'7 Y'2 Y'1 Y'0 Y's Y'ex 1 X X X X X X X X 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 X X X X X X X 0 0 0 0 1 0 0 X X X X X X 0 1 0 0 1 1 0 0 X X X X X 0 1 1 0 1 0 1 0 0 X X X X 0 1 1 1 0 1 1 1 0 0 X X X 0 1 1 1 1 1 0 0 1 0 0 X X 0 1 1 1 1 1 1 0 1 1 0 0 X 0 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 扩展端: 1=S 编码器工作,0=S 编码器关闭。 1''==EX S Y Y 编码器关闭。 1',0'==EX S Y Y 编码器工作,没有有效输入信号。 0',1'==EX S Y Y 编码器工作,有有效输入信号。

2译码器 输入高电平有效,输出低电平有效真值表如下: 序号 输入输出 A3 A2 A1 A0 Y'0 Y'1 Y'2 Y'3 Y'4 Y'5 Y'6 Y'7 Y'8 Y'9 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 1 1 1 1 2 0 0 1 0 1 1 0 1 1 1 1 1 1 1 3 0 0 1 1 1 1 1 0 1 1 1 1 1 1 4 0 1 0 0 1 1 1 1 0 1 1 1 1 1 5 0 1 0 1 1 1 1 1 1 0 1 1 1 1 6 0 1 1 0 1 1 1 1 1 1 0 1 1 1 7 0 1 1 1 1 1 1 1 1 1 1 0 1 1 8 1 0 0 0 1 1 1 1 1 1 1 1 0 1 9 1 0 0 1 1 1 1 1 1 1 1 1 1 0 伪码1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

EDA中VHDL基本逻辑电路设计

第三章基本逻辑电路设计 3.1 组合逻辑电路设计 一、简单门电路设计 例:3输入“与非”门电路 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY nand3 IS PORT(a,b,c:IN STD_LOGIC; y:OUT STD_LOGIC); END nand3; ARCHITECTURE nand3_1 OF nand3 IS BEGIN y<=NOT(a AND b AND c); END nand3_1; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY nand3 IS PORT(a,b,c:IN STD_LOGIC; y:OUT STD_LOGIC); END nand3; ARCHITECTURE nand3_2 OF nand3 IS BEGIN t4:PROCESS(a,b,c) VARIABLE comb:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN comb:= a & b & c; CASE comb IS WHEN “000” =>y<=‘1’; WHEN “001” =>y<=‘1’; WHEN “010” =>y<=‘1’; WHEN “011” =>y<=‘1’; WHEN “100” =>y<=‘1’; WHEN “101” =>y<=‘1’; WHEN “110” =>y<=‘1’; WHEN “111” =>y<=‘0’; WHEN OTHERS=>y<=‘X’; END CASE; END PROCESS; END nand3_2; 二、编码器、译码器、选择器 例:地址译码器 假设一个微处理器存储空间为从0000H到FFFFH, 将其分成5部分,它们的地址分配如下: 0000H—DFFFH为动态随机存储器DRAM使用;E000H—E7FFH为I/O设备使用; E800H---EFFFH备用; F000H—F7FFH为第一个只读存储器ROM1使用;F800H—FFFFH为第二个只读存储器ROM2使用;其中选通控制信号DRAM1,IO,ROM1,ROM2均为低电平有效。 例:地址全译码 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ad_decoder IS PORT( address : IN STD_LOGIC_VECTOR(15 downto 0); DRAM1,IO,ROM1,ROM2 : OUT STD_LOGIC); END ad_decoder ; ARCHITECTURE a OF ad_decoder IS BEGIN PROCESS(address) BEGIN IF address<=x”dfff” THEN DRAM<=‘0’; IO<=‘1’; ROM1<=‘1’; ROM2<=‘1’; ELSIF address>=x”e000” AND address<=x”e7ff” THEN DRAM<=‘1’; IO<=‘0’; ROM1<=‘1’; ROM2<=‘1’; ELSIF address>=x”f000” AND address<=x”f7ff” THEN DRAM<=‘1’; IO<=‘1’; ROM1<=‘0’; ROM2<=‘1’; ELSIF address>=x”f800” THEN DRAM<=‘1’; I/O<=‘1’; ROM1<=‘1’; ROM2<=‘0’; END IF; End PROCESS; END a;

第八讲 编码器和译码器

第八讲 编码器和译码器 一、编码器 编码是用代码表示特定对象的过程。编码器是实现编码的逻辑电路。二进制编码的原则是用n 位二进制代码可以表示2n 个信号,对N 个信号编码时,应由2n ≥N 来确定编码位数n 。 1. 二进制编码器:用n 位二进制代码对2n 个信号进行编码的电路。 8-3编码器电路(3位二进制编码器):8个输入信号互斥。当I 1~I 7输入为0时,输出就是I 0的编码。I 0未画出。 输入信号为高电平有效(有效:表示有编码请求),输出代码编为原码(对应自然二进制数)。 2. 二—十进制编码器:将0~9十个十进制数转换为二进制代码的电路。 I 9 I 8 I 7I 6I 5I 4 I 3I 2 I 1 I 0Y Y Y Y (a) 由或门构成 9 8 765432 1 I 0 (b) 由与非门构成 Y Y Y Y

当编码器某一输入信号为1且其它输入信号为0时,有一组数码输出。如I 7=1时,Y 3Y 2Y 1Y 0=0111。输出数码各位的权从高位到低位分别为8、4、2、1,因此是一个8421BCD 码编码器。从编码表可以看出,该编码器输入信号I 0~I 9也是互斥的。 3. 优先编码器 从功能表看出,输入输出的有效信号都是0。在输入中,下标越大,优先级越高。 控制输入端(选通输入端)ST=0时,编码器工作。ST=1时,输出均为1,不进行编码。Ys 为选通输出端。当控制输入端ST=0,但无有效信号输入时,Ys=0。Y EX 为扩展输出端。当ST=0,且有信号输入时,Y EX 才为0,否则为1。 ※ 集成3位二进制优先编码器74LS148 ※ 集成3位二进制优先编码器74LS148的级联 V Y Y I I I I Y 45 6 7 2 1 7 6 5 4 3 2 1 0(a) 引脚排列图(b) 逻辑功能示意图 允许同时输入几个编码信号,而电路只对其中优先级别最高的信号进行编码。右图为8-3优先编码器74LS148的逻辑图。

译码器、编码器及其应用实验报告

实验四译码器、编码器及其应用 实验人员:班号:学号: 一、实验目的 (1)掌握中规模集成译码器的逻辑功能和使用方法; (2)熟悉掌握集成译码器和编码器的应用; (3)掌握集成译码器的扩展方法。 二、实验设备 数字电路实验箱,74LS20,74LS138。 三、实验内容 (1) 74LS138译码器逻辑功能的测试。将74LS138输出Y0~Y7接数字实验箱LED 管,地址A2A1A0输入接实验箱开关,使能端接固定电平(V CC或GND)。电路图如Figure 1所示: Figure 2 E N1EN2A EN2A≠100时,任意拨动开关,观察LED显示状态,记录观察结果。 E N1EN2A EN2A=100时,按二进制顺序拨动开关,观察LED显示状态,并与功能表对照,记录观察结果。 用Multisim进行仿真,电路如Figure 3所示。将结果与上面实验结果对照。

Figure 4 (2)利用3-8译码器74LS138和与非门74LS20实现函数: Y=A B+B C+ABC 四输入与非门74LS20的管脚图如下: 对函数表达式进行化简: Y=A B+B C+ABC =A B C+A B C+A B C+ABC =Y0+Y1+Y4+Y7=Y0Y1Y4Y7 按Figure 5所示的电路连接。并用Multisim进行仿真,将结果对比。 Figure 6

(3)用两片74LS138组成4-16线译码器。 因为要用两片3-8实现4-16译码器,输出端子数目8×2=16刚好够用。 而输入端只有 A、B、C三个,故要另用使能端进行片选使两片138译码器进 行分时工作。而实验台上的小灯泡不够用,故只用一个灯泡,而用连接灯泡的导线测试Y x,在各端子上移动即可。在multisim中仿真电路连接如Figure 7所示(实验台上的电路没有接下面的两个8灯LED): Figure 8 四、实验结果 (1) 74LS138译码器逻辑功能的测试。 当输入CBA=000时,应该是Y0输出低电平,故应该第一个小灯亮。实际用实验台测试时,LE0灯显示如Figure 9所示。当输入CBA=001时,应该是Y1输出低电平,故理论上应该第二个小灯亮。实际用实验台测试时,LE0灯显示如Figure 6所示。 Figure 10

相关文档
最新文档