新闻中心

EEPW首页 > EDA/PCB > 设计应用 > 基于VHDL逻辑电路设计与应用

基于VHDL逻辑电路设计与应用

作者: 时间:2018-07-27 来源:网络 收藏

1、引言

本文引用地址://www.cazqn.com/article/201807/384180.htm

电子产品随着技术的进步,更新换代速度可谓日新月异。I'辉lectronicDesignAutomatic)技术的应用很好地适应了这一特点。通过设计和编程,由可编程逻辑器件CPLD/FPGAn-构成的数字电路,取代了常规的组合和时序逻辑电路,实现了单片化,使体积、重量、功耗减小,提高了可靠性。

目前技术在一般的数字系统、数字信号处理系统等领域获得广泛应用,它将成为今后电子设计的主流。语言作为可编程逻辑器件的标准语言描述能力强,覆盖面广,抽象能力强,应用越来越广泛。语言具有多层次描述系统硬件功能的能力,可以从系统的数学模型直到门级电路,其高层次的行为描述可以与低层次的RTL描述和结构描述混合使用;设计者可以实现从文本编辑、功能仿真、逻辑综合、布局布线、时序仿真到编程下载整个开发过程,大大减轻了设计人员的工作强度,提高了设计质量,减少了出错的机会。下面介绍如何在美国ALTERA公司的MAX+PLUSH平台上应用实现

2、设计原理

多位的工作原理阎是从最低位开始逐位相加并向高位进位,基于这个原理,采用移位加法实现串行加法器。设两个无符号数A=a-tart...ao和B=b.-,b,^...bo,两者相加产生的和SUM=S-lS-:...So,其工作原理如图1所示,由三个移位寄存器和一个加法器有限状态机组成,其中三个寄存器用来存放A,B和Sum数据。其工作原理是,假定输人移位寄存器有并行加载功能,首先把A,B的值加载到寄存器,然后在每一个时钟周期,通过加法器有限状态机将相应的一位相加,在时钟周期的结尾处将这一位相加结果移到Sum寄存器。三个寄存器都采用同步正边沿触发器,所有变化都在时钟正边沿之后很快发生,这时三个寄存器的内容都向右移,将已得到的和位移到Sum,并把两个加数寄存器的下一个位a与b:送给加法器有限状态机。

加法器有限状态机的工作原理:由两个状态M和N分别表示进位值0和10状态图如图2所示,采用有限状态机的Mealy模型。由于每一位相加,都是由全加器构成的,因此根据状态图可写出次态全加器的逻辑表达式:

Y=ab+ay+by

s=a+b+y

其中y为进位输人,a和b为两个输人数据,Y为进位输出,s为全加器的和。串行加法器可以实现任意位数据加法的简单电路。

3、基于VHDL串行加法器的实现

串行加法器的VHDL描述由移位寄存器和加法器有限状态机组成。可以把移位寄存器作为一个子电路,在主程序中可以多次调用。

3.1移位寄存器实现

下面是4位移位寄存器的VHDL代码,采用FOR LOOP结构来实现,源程序如下:

LIBRARYIEEE;

USEIEEE.STD-LOGIC-1164.ALL;

ENTITYshiftIS GENERIC(n:INTEGER:=4);

PORT(r:INSTD-LOGIC-VECTOR(n-1DOWNTO0);

1,e,w:INSTD-LOGIC;

clk:INSTD_LOGIC;

q:BUFFERSTD-LOGIC-VECTOR(n-1DOWNTO0));

ENDshift;

ARCHITECTUREbehaOFshiftIS

BEGIN

PROCESS

BEGIN

WATTUNTILclk'EVENTANDclk='1';

IFe='1'THEN

IF1='l'THEN

q=r,

ELSE

gebit:FORiIN0TOn-2LOOP

q(i)=q(i+l);

END LOOP;

q(n-1)=w;

ENDIF;

ENDIF;

ENDPROCESS;

ENDbeha;

若要实现更多位移位寄存器,则只要修改n值即可。程序中r是输人信号,clk是时钟信号,e是使能端。当1='1’时对移位寄存器并行加载,卜'0’时,寄存器处于右移状态,串行数据从输人端w移人寄存器的最高位。仿真结果如图3所示。

3.2串行加法器的VHDL设计

八位串行加法器VHDL代码如下:

LIBRARYIEEE;

USEIEEE.STDLOGIC-1164.ALL;

ENTITY adderIS

GENERIC(length:INTEGER:=8);

PORT(erset:INSTDLOGIC;

clk:INSTD-LOGIC;

a,b:INSTD-LOGIC-VECTOR(length-1DOWNTO0);

co:outSTD-LOGIC;

sum:BUFFERSTD-LOGIC-VECTOR(length一1DOWNTO0));

ENDadder;

ARCHITECTUREbehaOFadderIS COMPONENTshift

GENERIC(n:INTEGER:=4);

PORT(r:INSTD-LOGIC-VECTOR(n-1DOWNTO1,e,w:INSTD-LOGIC;

elk:INSTD-LOGIC;

q:BUFFERSTD-LOGIC-VECTOR(n-1DOWNTO0));

ENDCOMPONENT;

SIGNALga,gb,null-in:STD_LOGIC-VECTOR(length-1DOWNTO0);

SIGNALs,low,high,run:STD-LOGIC;

SIGNALcount:INTEGERRANGE0TOlength;

TYPEstate-typeIS(M,N);

SIGNALy:state-type;

BEGIN

low='0';

high二,1';

shiftA:shiftGENERICMAP(n=>length)PORTMAP(a,erset,high,low,clk,ga);

shiftB:shiftGENERICMAP(n=>length)PORTMAP(b,reset,high,low,clk,gb);

adderFSM:PROCESS(erset,clk)BEGIN

IFerset='l'THEN

y=M;

ELSIFelk'EVENTANDclk='1'THEN

CASEyIS

WHENM=>IF(qa(0),1'ANDqb(0)='1')THENy=N;

ELSE

y=M;

ENDIF;

WHENN=>

IF(ga(0)='0'ANDqb(0)='0')THENy-M;

ELSE

y=N;

ENDIF;

ENDCASE;

ENDIF;

ENDPROCESSadderFSM;

WITHySELECT

s-ga(0)XORqb(0)WHENM,

NOT(ga(0)XORqb(0))WHENN;

Null_in二(OTHERS=>'0');

shiftsum:shiftGENERICMAP(n=>length)

PORTMAP(nulin,erset,run,s,clk,sum);

stop:PROCESS

BEGIN

WAITUNTIL(elk'EVENTANDclk='1');

IFerset='1'THEN

count=length;

E,ISIFrun='l'THEN

count=count-1;

ENDIF;

ENDPROCESS;

run='0'WHENcount-OELSE'1';

co一out:PROCESS

BEGIN

WAITUNTIL(clk-EVENTANDclk='1');

IFy=MTHEN

co=,0';

EISE

co=,1';

ENDIF;

ENDPROCESScoout;

ENDbeha;

程序中采用三个进程描述:adderFSM进程描述加法器有限状态机;stop进程描述减法计数器,用来决定加法器什么时候由于n位所要求的和出现在输出移位寄存器而停止;co-out描述进位co输出。

程序经Max+PlusII中的Compiler编译,再通过Simulator和Timinganalyzer工具分别进行功能仿真和时序仿真,仿真结果如图4所示,其中reset是输人控制端,clk是时钟信号,a和b是输人数据,sum是和数,co是进位,y表示有限状态机的状态。仿真正确后,可通过计算机并口上的Byteblaster下载电缆将生成的配置文件直接下载到芯片MAXEPM7128SLC84-15进行验证,测试结果与实际相符。

4、结束语

本文通过串行加法器VHDL设计表明,VHDL在逻辑电路的设计中具有以下优点:

(1)VHDL语言硬件描述能力强、设计方法灵活;(2)设计者只需掌握VHDL语言及相关设计软件的使用,而不需考虑较多的硬件结构就可以设计所需要的数字系统;(3)随时可对设计内容进行仿真,查验系统功能;(4)程序可移植性强、易于修改;因此,随着集成电路技术的高速发展,作为当代电子设计人员,HDL已成为设计数字硬件时常用的一种重要手段。



关键词: EDA VHDL 串行加法器

评论


相关推荐

技术专区

关闭