数字逻辑:5.5.3 VHDL的行为描述_第1页
数字逻辑:5.5.3 VHDL的行为描述_第2页
数字逻辑:5.5.3 VHDL的行为描述_第3页
数字逻辑:5.5.3 VHDL的行为描述_第4页
数字逻辑:5.5.3 VHDL的行为描述_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

5.5.3VHDL的行为描述并发(Concurrent)描述语句顺序(Sequential)描述语句行为描述语句顺序语句:描述逻辑关系、算法并行语句:硬件并行的特点一、VHDL的并行语句并行行为赋值语句(简单、选择、条件)进程语句(process)例化语句(component)描述硬件最基本的本质特性--并行行为。进程行为之间并行关系,进程内部是顺序行为。

信号〈=表达式;1.赋值语句:语法格式赋值的原则:相同位宽,相同数据类型。(1)简单并行赋值:特点:执行与书写顺序无关。每一个赋值相当于一个进程。ENTITYexeISport(a,b:INbit;y:OUTbit);ENDexe;

ARCHITECTUREartOFexeIS

SIGNALc:bit;

BEGINy<=c;c<=aandb;

ENDart1;(2)选择赋值with-select-whenWITH

选择表达式SELECT信号名<=表达式1WHEN

选择值1,表达式2WHEN选择值2,

...

表达式nWHENothers

不能有重叠的条件分支。最后条件为others。选择值必须覆盖所有取值可能。没有优先级判断。语法格式结束为“,”例:用选择赋值语句描述四选一电路

LIBRARY

ieee;USEieee.std_logic_1164.all;entitymux4is

port

(d0,d1,d2,d3,a0,a1:in

std_logic;f:outstd_logic);endmux4;architecturertl

ofmux4issignal

sel:std_logic_vector(1downto0);beginsel<=a1&a0;

withselselectf<=d0when“00”,d1when“01”,d2when

“10”,d3when

others;end

rtl;

MUX4(3)条件赋值when-else信号名<=表达式1WHEN

条件式1ELSE

表达式2WHEN

条件式2ELSE

...条件式n-1

ELSE

表达式n;

注意:最后的Else项是必须的;

有优先级逻辑关系,先判断第一条件

类似if(在process中使用)的嵌套语句语法格式libraryieee;

use

ieee.std_logic_1164.all;

entitycoderis

port

(D:instd_logic_vector(7downto0);A:outstd_logic_vector(2downto0));

endcoder;例:8-3优先编码器。architecturertl

ofcoderisbeginA<=“000”whenD(7)=‘0’else“001”whenD(6)=‘0’else“010”whenD(5)=‘0’else“011”whenD(4)=‘0’else“100”whenD(3)=‘0’else“101”whenD(2)=‘0’else“110”whenD(1)=‘0’else“111”;Endtr1

语句With-select-whenWhen-elseIf-elseCase-when选择条件一个信号的不同值,互斥多个信号多种组合,不必互斥多个信号多种组合,不必互斥一个信号的不同值,互斥语句属性并行并行顺序顺序用途编码、译码、多路选择器优先编码器,地址译码器优先编码器,地址译码器编码、译码、多路选择器状态机libraryieee;useieee.std_logic_1164.all;entitydec38isport(A:instd_logic_vector(2downto0);Y:outstd_logic_vector(7downto0));enddec38;architecturem1ofdec38isbeginwithAselectY<=“11111110"when"000",“11111101"when"001",“11111011"when"010",“11110111"when"011",“11101111"when"100",“11011111"when"101","10111111"when"110",“01111111"when"111","11111111"whenothers;

endm1;libraryieee;useieee.std_logic_1164.all;entitybcdisport(A:instd_logic_vector(3downto0);Y:outstd_logic_vector(6downto0));endbcd;七段显示译码器A3A2A1A0fgabcde5107七段显示译码器architecturem1ofbcdisBeginy<="1111110"whenA="0000"else

--0"0001100"when

A="0001"else--1"1101101"whenA="0010"else--2"1111001"whenA="0011"else--3"0110011"whenA="0100"else

--4"1011011"whenA="0101"else

--5“0011111"whenA="0110"else

--6"1110000"whenA="0111"else

--7"1111111"whenA="1000"else

--8"1110011"whenA="1001"else--9"0000000";Endm1;3、进程语句语法格式[进程名:]PROCESS

(敏感信号表)

[变量说明语句];

BEGIN

顺序说明语句;

ENDPROCESS;提供了一种用算法描述硬件行为的方法。几个进程语句之间是并行行为。外部并行,内部顺序。敏感信号表:进程中要读取的信号。敏感信号的变化都将启动进程。组合逻辑中,所有输入都作为敏感信号。architecturebehavofa_varisbeginoutput<=a(i);endbehav;architecturebehavofa_varisbeginprocess(a,i)beginoutput<=a(i);endprocess;endbehav;一个简单并行信号赋值语句是一个进程的缩写。进程的并发特点:等效:LIBRARYieee;USEieee.std_logic_1164.all;ENTITYex1ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDex1;ARCHITECTURErtlOFex1ISSIGNALc:STD_LOGIC;BEGIN

y<=c;c<=aandb;ENDrtl;LIBRARYieee;USEieee.std_logic_1164.all;ENTITYex2ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDex2;ARCHITECTURErtlOFex2ISSIGNALc:STD_LOGIC;BEGINPROCESS(a,b)BEGINc<=aandb;ENDPROCESS;

PROCESS(c)BEGINy<=c;ENDPROCESS;ENDrtl;不等效:LIBRARYieee;USEieee.std_logic_1164.all;ENTITYex1ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDex1;ARCHITECTURErtlOFex1ISSIGNALc:STD_LOGIC;BEGINc<=aandb;y<=c;ENDrtl;LIBRARYieee;USEieee.std_logic_1164.all;ENTITYex2ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDex2;ARCHITECTURErtlOFex2ISSIGNALc:STD_LOGIC;BEGIN

PROCESS(a,b,c)BEGINc<=aandb;y<=c;ENDPROCESS;ENDrtl;二、VHDL顺序语句执行顺序与书写顺序一致。只能出现在进程(process)和子程序中。描述逻辑关系,具体算法(类似C)。顺序行为If-then-elseCase–is-whenFor-loop

赋值语句

信号〈=表达式;语法格式赋值的原则:相同位宽,相同数据类型。(1)简单顺序赋值:

变量:=表达式;赋值对象可为信号、变量变量赋值与信号赋值的差异:硬件实现的功能不同信号:实际的硬件连线;变量:电路单元内部的操作,代表暂存的临时数据。

赋值行为的不同信号赋值:延迟更新数值;变量赋值:立即更新数值。

信号的多次赋值

a.一个进程:最后一次赋值有效

b.多个进程:多源驱动线与、线或、三态总线

变量赋值:

architecturertlofvarisbegin

process(a,b,c)variabled:std_logic;--定义变量

begind:=a;x<=canddd:=b;y<=canddendprocess;endrtl;

-结果:x=cay=cb例:信号赋值与变量赋值的比较

信号赋值:

architecturertlofsigis

signald:std_logic;begin

process(a,b,c)

begind<=a;x<=candd;d<=b;y<=candd;

endprocess;

endrtl;--定义信号读出(process中)更新(endprocess后)-结果:x=cby=cb不要在一个process中对同一信号多次赋值(2)转向控制语句:主要有:

if

语句、case

语句、loop

语句通过条件控制决定是否执行一条或几条语句,或重新执行一条或几条语句,仿真时顺序进行。if、case、loop语句必需在Process语句中。注意!if语句的门闩控制(不完全if)if

条件式

then

顺序处理语句;end

if

;1)if语句对于不完全的if语句,VHDL综合器将引进一个时序元件保持当前状态值。用于锁存器或触发器。if语句的电平触发LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.all;ENTITYlatchIS

port(ena,d:INstd_logic;q:OUTstd_logic);

ENDlatch;

ARCHITECTURErt1OFlatchIS

BEGIN

PROCESS(ena,d)

BEGIN

IF(ena=‘1’)thenq<=d;

ENDIF;

ENDPROCESS;ENDrt1;

综合后生成锁存器(latch)敏感信号表敏感信号表无d的波形LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.all;ENTITYfdISport(clk,d:INstd_logic;q:OUTstd_logic);

ENDfd;ARCHITECTURErt1OFfdIS

BEGIN

PROCESS(clk)

BEGIN

IF(clk’eventandclk=‘1’)thenq<=d;

ENDIF;

ENDPROCESS;ENDrt1;if语句的时钟沿触发敏感信号表

综合后生成寄存器(register)时钟上升沿触发LIBRARY

ieee;USEieee.std_logic_1164.all;ENTITYdffIS

PORT

(d:instd_logic;clk:instd_logic;q:outstd_logic);ENDdff;ARTHITECTUREarc

OFdffIS

BEGIN

PROCESS(clk)

VARIABLEa,b:std_logic;

BEGINIF(clk’eventAND

clk='1')THENa:=d;b:=a;q<=b;

ENDIF;

ENDPROCESS;

ENDarc;LIBRARYieee;USEieee.std_logic_1164.all;ENTITYreg3IS

PORT

(d:instd_logic;clk:instd_logic;q:outstd_logic);ENDreg3;

ARTHITECTUREarc

OFreg3ISSIGNAL

a,b:std_logic;

BEGINPROCESS(clk)

BEGIN

IF

(clk’eventANDclk='1')THENa<=d;b<=a;q<=b;

ENDIF;

ENDPROCESS;

ENDarc;语法格式IF

条件表达式1

THEN

顺序语句11;顺序语句12;ELSIF

条件表达式2

THEN

顺序语句21;顺序语句22;ELSIF

ELSE

顺序语句n1;顺序语句n2;

ENDIF;

if_then_elsif语句中最先出现的条件优先级最高(自上而下优先)。可以有多个elsif,但只能有一个else(组合逻辑)。if多选择语句libraryieee;

use

ieee.std_logic_1164.all;

entitycoderis

port

(input:instd_logic_vector(7downto0);output:outstd_logic_vector(2downto0));

endcoder;例:8-3优先编码器。architectureartofcoderisbegin

process(input)begin

ifinput(7)=‘0’thenoutput<=“000”;

elsifinput(6)=‘0’

thenoutput<=“001”;

elsif

input(5)=‘0’thenoutput<=“010”;

elsif

input(4)=‘0’thenoutput<=“011”;

elsif

input(3)=‘0’

thenoutput<=“100”;

elsifinput(2)=‘0’thenoutput<=“101”;

elsif

input(1)=‘0’thenoutput<=“110”’;

elseoutput<=“111”;

endif;

end

process;

endart;组合逻辑一定有else,否则综合为锁存器CASE语句根据某个表达式的值来选择执行体。无优先级。

(2)CASE语句语法格式CASE

选择表达式

IS

WHEN

分支值1=>顺序处理语句11;语句12;

WHEN分支值2=>顺序处理语句21;语句22;

WHENOTHERS=>顺序处理语句32;语句32;

END

CASE;

分支条件须在表达式范围内,且不能重合。执行时必须选中且只能选中一个分支。所有值必须列举穷尽,对sted_logic等必须用others。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtest_caseISPORT(

s1,s0:IN

STD_LOGIC;

d0,d1,d2,d3:INSTD_LOGIC;

z:OUTSTD_LOGIC

);END

test_case;ARCHITECTUREbehaveOFtest_caseISSIGNAL

s:STD_LOGIC_VECTOR(1DOWNTO0);BEGIN

PROCESS(s1,s0,d0,d1,d2,

温馨提示

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

评论

0/150

提交评论