可编程逻辑器件_第1页
可编程逻辑器件_第2页
可编程逻辑器件_第3页
可编程逻辑器件_第4页
可编程逻辑器件_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

可编程逻辑器件第一页,共五十三页,2022年,8月28日7.1行为描述7.2数据流描述7.3结构描述7.4三态逻辑设计7.5RAM存储器设计7.6分频器设计7.7数字跑表7.8音乐演奏电路主要内容第二页,共五十三页,2022年,8月28日VHDL允许设计者用三种方式来对逻辑电路描述和建模

行为(Behavioural)描述;数据流(DataFlow)描述或寄存器传输级(RTL)描述;结构(Structural)描述。第三页,共五十三页,2022年,8月28日VHDL语言结构体的描述方式

VHDL语言的结构体可以用不同的语句类型和描述方式来表达电路所期望的逻辑行为,而对于相同的逻辑行为,可以有不同的语句表达方式。在VHDL语言中,这些描述方式或建模方式称为VHDL语言的描述风格。

常用的描述方式主要有:

行为描述

●数据流描述

●结构描述第四页,共五十三页,2022年,8月28日行为描述,就是对设计实体的数学模型的描述,其抽象程度远高于结构描述方式。行为描述类似于高级编程语言,当描述一个设计实体的行为时,无须知道具体电路的结构,只需要描述清楚输入与输出信号的行为,而无须花费精力关注设计结构的具体实现。7.1

行为描述

第五页,共五十三页,2022年,8月28日行为描述依据设计实体的功能或算法对结构体进行描述,不需要给出实现这些行为的硬件结构,只强调电路的行为和功能。

在结构体中,行为描述主要用函数、过程和进程语句,以功能或算法的形式来描述数据的转换和传送。

7.1结构体的行为描述

第六页,共五十三页,2022年,8月28日【例4.3.1】试用行为描述完成二选一数据选择器的设计。

设数据输入为d0和d1、选择输入为s,输出为y。程序清单:

ENTITYmux21IS

PORT(d1,d0:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);

ENDmux21;

ARCHITECTUREbehaviorOFmux21IS

BEGINy<=d1WHENs=‘1’ELSEd0;

ENDbehavior;第七页,共五十三页,2022年,8月28日

行为描述类似于高级编程语言,主要是对设计实体的功能或数学模型进行描述,其抽象程度远高于数据流描述和结构描述,其特点如下:

行为描述具有很高的抽象程度,远高于数据流描述和结构描述;

行为描述只需描述清楚输入与输出的行为,而与它们的结构无关;

描述程序大多采用算术运算、关系运算、惯性延时、传输延时等语句;

结构体中的过程语句属于典型的行为描述。第八页,共五十三页,2022年,8月28日

即逻辑描述,它利用VHDL语言中的赋值符和逻辑运算符进行描述,既包含逻辑单元的结构信息,又隐含地表示某种行为。

7.2结构体的数据流描述

例如:y<=aNORb;z<=NOT(aXORb);//y等于a与b的或非运算//z等于a与b的同或运算这种方式主要采用非结构化的并行语句描述。第九页,共五十三页,2022年,8月28日【例2】将例1中的数据选择器采用数据流描述。

逻辑表达式:y

=

d0·s

+

d1·s程序清单:

ENTITYmux21IS

PORT(d1,d0:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);

ENDmux21;

ARCHITECTUREdataflowOFmux21IS

SIGNALaa,ab,yy:STD_LOGIC;

BEGINaa<=d1ANDs;ab<=d0AND(NOTs);yy<=aaORab;y<=yy;

ENDdataflow;&&≥11

d1

d0

s

y

aa

ab

ns

U1

U3

U2

U4第十页,共五十三页,2022年,8月28日

结构描述是从设计实体的内部结构对结构体进行描述的,并给出该实体所包含的模块或元件的相互连接关系。

这种方式主要采用元件例化(COMPONENT)的形式对设计实体进行描述。可以用不同类型的结构来实现多层次的工程设计,从简单的门电路到复杂的元件来描述整个系统,元件之间的连接通过定义的端口界面来实现。

7.3结构体的结构描述

第十一页,共五十三页,2022年,8月28日

结构描述建模的步骤如下:

7.3结构体的结构描述

利用已设计好的元件(模块)来搭建新的模块

①元件说明:描述局部接口。

②元件例化:相对于其他元件放置元件。(对元件的调用)

③元件配置:指定元件所有的设计实体。

结构描述用于层次化设计,高层次的设计模块调用低层次的设计模块,或直接用门电路来构成一个复杂的逻辑电路。

第十二页,共五十三页,2022年,8月28日【例3】将例1中的数据选择器采用结构描述。

程序清单:

ENTITYmux21IS

PORT(d1,d0:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);

ENDmux21;

ARCHITECTUREstructureOFmux21IS

COMPONENTand2

PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);

END

COMPONENT;

COMPONENT

or2

PORT(a,b:INSTD_LOGIC;c:OUT

STD_LOGIC);

END

COMPONENT;&&≥11

d1

d0

s

y

aa

ab

ns

U1

U3

U2

U4第十三页,共五十三页,2022年,8月28日【例3】将例1中的数据选择器采用结构描述。

程序清单:&&≥11

d1

d0

s

y

aa

ab

ns

U1

U3

U2

U4

COMPONENTnot1

PORT

(a:INSTD_LOGIC;c:OUTSTD_LOGIC);

END

COMPONENT;

SIGNALaa,ab,ns:STD_LOGIC;

BEGINU1:not1PORTMAP(s,ns);U2:and2PORTMAP

(d1,s,aa);U3:and2PORTMAP(ns,d0,ab);U4:or2PORTMAP(aa,ab,y);

ENDstructure;第十四页,共五十三页,2022年,8月28日

混合描述就是在结构体中同时使用多种不同的描述方式,它可以使描述简单灵活。

例如,在同一结构体中,分别使用元件例化语句和并行语句,就可以构成由两种描述方式的混合描述。

结构体的混合描述

第十五页,共五十三页,2022年,8月28日【例4】用混合描述完成半加器的设计。

表达式:sn=an⊕bn

cn=an·bn

数据流描述

结构描述

程序清单:

ENTITYhalf_adderIS

PORT(an,bn:INSTD_LOGIC;sn,cn:OUTSTD_LOGIC);

ENDhalf_adder;

ARCHITECTUREmix_haOFhalf_adderIS

COMPONENTand2

PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);

ENDCOMPONENT;

BEGINsn<=anXORbn;U1:and2PORTMAP(an,bn,cn);

ENDmix_ha;第十六页,共五十三页,2022年,8月28日【例7.1】行为描述方式实现的1位全加器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYfull_addaISPORT(a,b,cin:INSTD_LOGIC;cout,sum:OUTSTD_LOGIC);ENDfull_adda;ARCHITECTUREbehavOFfull_addaISSIGNALtemp:STD_LOGIC_VECTOR(1DOWNTO0);BEGINtemp<=('0'&a)+b+cin;sum<=temp(0);cout<=temp(1);ENDbehav;第十七页,共五十三页,2022年,8月28日【例7.2】行为描述方式实现的2选1数据选择器ENTITYmux21aISPORT(a,b,sel:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREbehavOFmux21aISBEGINPROCESS(a,b,sel)BEGINIFsel='0'THENy<=a;ELSEy<=b;ENDIF;ENDPROCESS;ENDARCHITECTUREbehav;第十八页,共五十三页,2022年,8月28日采用行为描述方式时应注意下面几点用行为描述方式设计电路,可以降低设计难度。行为描述只需表示输入与输出之间的关系,不需要包含任何结构方面的信息。设计者只需写出源程序,而电路的实现由EDA软件自动完成,实现电路的优化程度,往往取决于综合软件的技术水平和器件的支持能力。在电路的规模较大或者需要描述复杂的逻辑关系时,应首先考虑用行为描述方式进行设计,如果设计的结果不能满足资源占有率的要求,则应改变描述方式。第十九页,共五十三页,2022年,8月28日7.2

数据流描述【例7.4】数据流描述的1位全加器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYfull_addbISPORT(a,b,cin:INSTD_LOGIC;sum,cout:OUTSTD_LOGIC);ENDfull_addb;ARCHITECTUREdataflowOFfull_addbISBEGINsum<=aXORbXORcin;cout<=(aANDb)OR(bANDcin)OR(aANDcin);ENDdataflow;第二十页,共五十三页,2022年,8月28日【例7.5】数据流描述的2选1数据选择器ENTITYmux21cISPORT(a,b,sel:INBIT;y:OUTBIT);ENDENTITYmux21c;ARCHITECTUREdataflowOFmux21cISSIGNALa1,a2:BIT;BEGINa1<=aAND(NOTSel);a2<=bANDsel;y<=a1ORa2;ENDARCHITECTUREdataflow;第二十一页,共五十三页,2022年,8月28日7.3

结构描述所谓结构描述方式,就是指在设计中,通过调用库中的元件或是已设计好的模块来完成设计实体功能的描述。在结构体中,描述只表示元件(或模块)和元件(或模块)之间的互连,就像网表一样。当调用库中不存在的元件时,则必须首先进行元件的创建,然后将其放在工作库中,这样才可以调用。第二十二页,共五十三页,2022年,8月28日【例7.6】半加器的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYhalf_addISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYhalf_add;ARCHITECTUREoneOFhalf_addisBEGINso<=aXORb;co<=aANDb;ENDARCHITECTUREone;第二十三页,共五十三页,2022年,8月28日【例7.7】或门逻辑描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2hISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDENTITYor2h;ARCHITECTUREoneOFor2hISBEGINy<=aORb;ENDARCHITECTUREone;第二十四页,共五十三页,2022年,8月28日【例7.8】结构描述的1位二进制全加器顶层设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYfull_addISPORT(ain,bin,cin:INSTD_LOGIC;cout,sum:OUTSTD_LOGIC);ENDENTITYfull_add;ARCHITECTUREstructOFfull_addISCOMPONENThalf_add --将半加器定义为元件

PORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTor2hPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALd,e,f:STD_LOGIC; --定义3个信号作为内部连线

BEGINu1:half_addPORTMAP(a=>ain,b=>bin,co=>d,so=>e);--元件例化

u2:half_addPORTMAP(a=>e,b=>cin,co=>f,so=>sum);u3:or2hPORTMAP(a=>d,b=>f,y=>cout);

ENDARCHITECTUREstruct;第二十五页,共五十三页,2022年,8月28日【例7.9】结构描述的4位级联加法器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYf_add4ISPORT(a,b:INSTD_LOGIC_VECTOR(0TO3);cin:INSTD_LOGIC;sum:OUTSTD_LOGIC_VECTOR(0TO3);cout:OUTSTD_LOGIC);ENDENTITYf_add4;ARCHITECTUREstructOFf_add4ISCOMPONENTfull_add --将1位全加器定义为元件

PORT(ain,bin,cin:INSTD_LOGIC;cout,sum:OUTSTD_LOGIC);ENDCOMPONENT;第二十六页,共五十三页,2022年,8月28日

SIGNALci:STD_LOGIC_VECTOR(1TO3); --定义节点信号

BEGINu1:full_addPORTMAP(ain=>a(0),bin=>b(0),cin=>cin,cout=>ci(1),sum=>sum(0)); --元件例化

u2:full_addPORTMAP(ain=>a(1),bin=>b(1),cin=>ci(1),cout=>ci(2),sum=>sum(1));u3:full_addPORTMAP(ain=>a(2),bin=>b(2),cin=>ci(2),cout=>ci(3),sum=>sum(2));u4:full_addPORTMAP(ain=>a(3),bin=>b(3),cin=>ci(3),cout=>cout,sum=>sum(3));ENDARCHITECTUREstruct;第二十七页,共五十三页,2022年,8月28日7.4三态逻辑设计

【例7.12】三态门LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtrigateISPORT(en,a:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDtrigate;ARCHITECTUREoneOFtrigateISBEGINy<=aWHEN(en='1')ELSE'Z';ENDone;第二十八页,共五十三页,2022年,8月28日【例7.13】三态双向缓冲器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYbidirISPORT(y:INOUTSTD_LOGIC;--y为双向I/O端口

en,a:INSTD_LOGIC;b:OUTSTD_LOGIC);ENDbidir;ARCHITECTUREoneOFbidirISBEGIN

y<=aWHEN(en='1')ELSE'Z';b<=y;ENDone;第二十九页,共五十三页,2022年,8月28日【例7.14】三态双向缓冲器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYbidir1ISPORT(y:INOUTSTD_LOGIC;--y为双向I/O端口

en,a:INSTD_LOGIC;b:OUTSTD_LOGIC);ENDbidir1;ARCHITECTUREoneOFbidir1ISBEGINPROCESS(en,a)BEGINIF(en='1')THENy<=a;ELSEy<='Z';ENDIF;ENDPROCESS;b<=y;ENDone;第三十页,共五十三页,2022年,8月28日【例7.15】三态双向总线缓冲器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYttl245ISPORT(a,b:INOUTSTD_LOGIC_VECTOR(7DOWNTO0); --双向数据线

oe,dir:INSTD_LOGIC); --使能信号和方向控制ENDttl245;ARCHITECTUREoneOFttl245ISBEGINa<=bWHEN(oe='0'ANDdir='0')ELSE(OTHERS=>'Z');b<=aWHEN(oe='0'ANDdir='1')ELSE(OTHERS=>'Z');ENDone;第三十一页,共五十三页,2022年,8月28日三态双向总线缓冲器RTL综合视图(SynplifyPro)

第三十二页,共五十三页,2022年,8月28日7.5RAM存储器设计

生成一个新的宏模块第三十三页,共五十三页,2022年,8月28日设置输出文件的类型、目录和名字第三十四页,共五十三页,2022年,8月28日定制RAM模块的数据宽度和深度第三十五页,共五十三页,2022年,8月28日【例7.16】调用RAM宏模块构成RAM存储器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;LIBRARYaltera_mf;USEaltera_mf.all;ENTITYram8x128IS --顶层模块端口PORT(addr :INSTD_LOGIC_VECTOR(6DOWNTO0); clk :INSTD_LOGIC; data :INSTD_LOGIC_VECTOR(7DOWNTO0); aclr :INSTD_LOGIC; wr :INSTD_LOGIC; qout :OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDram8x128;第三十六页,共五十三页,2022年,8月28日ARCHITECTURElpmOFram8x128ISCOMPONENTramIS --将RAM模块定义为元件

PORT(address:INSTD_LOGIC_VECTOR(6DOWNTO0); clock :INSTD_LOGIC; data :INSTD_LOGIC_VECTOR(7DOWNTO0); aclr :INSTD_LOGIC; wren :INSTD_LOGIC; q :OUTSTD_LOGIC_VECTOR(7DOWNTO0) );ENDCOMPONENT;BEGINu1:ramPORTMAP(address=>addr,clock=>clk,data=>data,aclr=>aclr,wren=>wr,q=>qout); --元件例化ENDlpm;第三十七页,共五十三页,2022年,8月28日在实际中我们经常会遇到这样的问题,需要进行奇数次分频,同时又要得到占空比是50%的方波波形。可采用如下方法:用两个计数器,一个由输入时钟上升沿触发,一个由输入时钟下降沿触发,最后将两个计数器的输出相或,即可得到占空比为50%的方波波形。

7.6分频器设计7.6.1占空比为50%的奇数分频

第三十八页,共五十三页,2022年,8月28日【例7.18】占空比50%的奇数分频(模7)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYfdiv7ISPORT(clk,reset:INSTD_LOGIC;clkout:OUTSTD_LOGIC); --输出时钟ENDfdiv7;ARCHITECTUREbehavOFfdiv7ISSIGNALclkout1,clkout2:STD_LOGIC;SIGNALcount1,count2:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(clk) --计数器1BEGINIF(clk'eventANDclk='1')THEN --上升沿触发

IF(reset='1')THENcount1<="0000";ELSEIF(count1=6)THENcount1<="0000";ELSEcount1<=count1+1;ENDIF;IF(count1<3)THENclkout1<='1';ELSEclkout1<='0';ENDIF;ENDIF;ENDIF;ENDPROCESS;第三十九页,共五十三页,2022年,8月28日PROCESS(clk) --计数器2BEGINIF(clk'eventANDclk='0')THEN --下降沿触发

IF(reset='1')THENcount2<="0000";ELSEIF(count2=6)THENcount2<="0000";ELSEcount2<=count2+1;ENDIF;IF(count2<3)THENclkout2<='1';ELSEclkout2<='0';ENDIF;ENDIF;ENDIF;ENDPROCESS;clkout<=clkout1ORclkout2; --相或ENDbehav;第四十页,共五十三页,2022年,8月28日模7奇数分频器功能仿真波形图(QuartusⅡ)

第四十一页,共五十三页,2022年,8月28日【例7.19】较为通用的占空比为50%的奇数分频电路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYfdivnISGENERIC(w:INTEGER:=11); --定义类属参量wPORT(clk,reset:INSTD_LOGIC;clkout:OUTSTD_LOGIC); --输出时钟ENDfdivn;ARCHITECTUREbehavOFfdivnISSIGNALclkout1,clkout2:STD_LOGIC;SIGNALcount1,count2:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(clk) --计数器1BEGINIF(clk'eventANDclk='1')THEN --上升沿触发第四十二页,共五十三页,2022年,8月28日

IF(reset='1')THENcount1<="0000";ELSEIF(count1=w-1)THENcount1<="0000";ELSEcount1<=count1+1;ENDIF;IF(count1<(w-1)/2)THENclkout1<='1';ELSEclkout1<='0';ENDIF;ENDIF;ENDIF;ENDPROCESS;PROCESS(clk) --计数器2BEGINIF(clk'eventANDclk='0')THEN --下降沿触发

IF(reset='1')THENcount2<="0000";ELSEIF(count2=w-1)THENcount2<="0000";ELSEcount2<=count2+1;ENDIF;IF(count2<(w-1)/2)THENclkout2<='1';ELSEclkout2<='0';ENDIF;ENDIF;ENDIF;NDPROCESS;clkout<=clkout1ORclkout2; --相或ENDbehav;第四十三页,共五十三页,2022年,8月28日模11奇数分频器功能仿真波形图(QuartusⅡ)

第四十四页,共五十三页,2022年,8月28日【例7.20】n0.5半整数分频器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYfdivn_5ISPORT(clkin,clr:INSTD_LOGIC;clkout:BUFFERSTD_LOGIC); --输出时钟ENDfdivn_5;ARCHITECTUREoneOFfdivn_5ISconstantn:std_logic_vector(3downto0):="0100"; --分频预置数nSIGNALclk2,clk1:STD_LOGIC;SIGNALcount:STD_LOGIC_VECTOR(3DOWNTO0);BEGINclk2<=clkinXORclk1; --clkin与clk1异或后作为模N计数器的时钟PROCESS(clk2,clr)BEGINIF(clr='1')THENcount<="0000"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论