基于VHDL逻辑电路设计与应用
1、引言
电子产品随着技术的进步,更新换代速度可谓日新月异。EDAI'辉lectronicDesignAutomatic)技术的应用很好地适应了这一特点。通过设计和编程,由可编程逻辑器件CPLD/FPGAn-构成的数字电路,取代了常规的组合和时序逻辑电路,实现了单片化,使体积、重量、功耗减小,提高了可靠性。
目前EDA技术在一般的数字系统、数字信号处理系统等领域获得广泛应用,它将成为今后电子设计的主流。VHDL语言作为可编程逻辑器件的标准语言描述能力强,覆盖面广,抽象能力强,应用越来越广泛。VHDL语言具有多层次描述系统硬件功能的能力,可以从系统的数学模型直到门级电路,其高层次的行为描述可以与低层次的RTL描述和结构描述混合使用;设计者可以实现从文本编辑、功能仿真、逻辑综合、布局布线、时序仿真到编程下载整个开发过程,大大减轻了设计人员的工作强度,提高了设计质量,减少了出错的机会。下面介绍如何在美国ALTERA公司的MAX+PLUSH平台上应用VHDL实现串行加法器。
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语言及相关EDA设计软件的使用,而不需考虑较多的硬件结构就可以设计所需要的数字系统;(3)随时可对设计内容进行仿真,查验系统功能;(4)程序可移植性强、易于修改;因此,随着集成电路技术的高速发展,作为当代电子设计人员,HDL已成为设计数字硬件时常用的一种重要手段。
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码