电子科技大学EDA技术课件 3_2PPT格式课件下载.pptx
《电子科技大学EDA技术课件 3_2PPT格式课件下载.pptx》由会员分享,可在线阅读,更多相关《电子科技大学EDA技术课件 3_2PPT格式课件下载.pptx(127页珍藏版)》请在冰豆网上搜索。
4)记录域名,如my_record.a_field;
5)集合,如(my_var1,my_var2)。
所有对象均分为:
变量和信号对象:
=表达式;
对象=表达式;
-变量赋值-信号赋值要求:
表达式的值必须与对象的类型、宽度一致。
2、变量赋值与信号赋值变量与信号的差异:
1赋值标识符的不同变量:
信号=表达式;
2硬件实现的功能不同信号代表电路单元、功能模块间的互联,代表实际的硬件连线;
变量代表电路单元内部的操作,代表暂存的临时数据。
43)有效范围的不同信号:
程序包、实体、结构体;
全局量。
变量:
进程、子程序;
局部量。
ARCHITECTURESIGNALDeclarationslabel1:
PROCESSVARIABLEDeclarationslabel2:
PROCESSVARIABLEDeclarations54赋值行为的不同信号赋值延迟更新数值、时序或组合电路;
变量赋值立即更新数值、组合或时序电路。
5多次赋值a.一个进程:
最后一次赋值有效b.多个进程:
多源驱动线与、线或、三态6例:
信号的多次赋值architecturertlofexissignala:
std_logic;
beginprocess()begina=b;
a=c;
endprocess;
endrtl;
architecturertlofexissignala:
process()begina=c;
.endprocess;
endex;
7例:
信号赋值与变量赋值的比较信号赋值:
architecturertlofsigissignala,b:
-定义信号beginprocess(a,b)begina=b;
b=a;
endrtl;
-结果是a和b的值互换8-定义变量9变量赋值:
architecturertlofvarisbeginprocessvariablea,b:
begina:
=b;
b:
=a;
endprocess;
-结果是a和b的值都等于b的初值例:
变量赋值实现循环语句功能process(indicator,sig)variabletemp:
begintemp:
=0;
foriin0to3looptemp:
=tempxor(sig(i)andindicator(i);
endloop;
output=temp;
10以上语句等效为:
process(indicator,sig)variabletemp:
temp:
=tempxor(sig(0)andindicator(0);
=tempxor(sig
(1)andindicator
(1);
=tempxor(sig
(2)andindicator
(2);
=tempxor(sig(3)andindicator(3);
11如改为信号,结果如何?
signaltemp:
process(indicator,sig,temp)begintemp=0;
temp=tempxor(sig(0)andindicator(0);
temp=tempxor(sig
(1)andindicator
(1);
temp=tempxor(sig
(2)andindicator
(2);
temp=tempxor(sig(3)andindicator(3);
123.4.2转向控制语句13转向控制语句通过条件控制开关决定是否执行一条或几条语句,或重新执行一条或几条语句,或跳过一条或几条语句。
分为五种:
if语句、case语句、loop语句、next语句、exit语句1、if语句if语句执行一系列的语句,其次序依赖于一个或多个条件的值。
1)if语句的门闩控制if条件then顺序处理语句;
endif;
例:
if(ena=1)thenq=d;
综合后生成锁存器(latch)14条件改为时钟沿,则生成D触发器:
152)if语句的二选择控制格式:
if条件then顺序处理语句;
else顺序处理语句;
用条件来选择两条不同程序执行的路径。
16此描述的典型电路是二选一电路:
architecturertlofmux2isbeginprocess(a,b,sel)beginif(sel=1)theny=a;
elsey=b;
endif;
173)if语句的多选择控制if语句的多选择控制又称为if语句的嵌套。
格式:
if条件then顺序处理语句;
elsif条件then顺序处理语句;
18典型电路是多选一电路(如:
四选一)。
19if_then_elsif语句中隐含了优先级别的判断,最先出现的条件优先级最高,可用于设计具有优先级的电路。
如8-3优先级编码器。
libraryieee;
useieee.std_logic_1164.all;
entitycoderisport(input:
instd_logic_vector(7downto0);
output:
outstd_logic_vector(2downto0);
endcoder;
20-最高优先级21architectureartofcoderisbeginprocess(input)beginifinput(7)=0thenoutput=“000”;
elsifinput(6)=0thenoutput=“001”;
elsifinput(5)=0thenoutput=“010”;
elsifinput(4)=0thenoutput=“011”;
elsifinput(3)=0thenoutput=“100”;
elsifinput
(2)=0thenoutput=“101”;
elsifinput
(1)=0thenoutput=“110”;
elseoutput顺序处理语句;
endcase;
分支条件=顺序处理语句;
其中的分支条件可有以下的形式:
24whenwhenwhen值=顺序处理语句;
值to值=顺序处理语句;
值|值|值|值=顺序处理语句;
以上三种方式的混合;
whenothers=顺序处理语句;
case语句使用注意:
1分支条件的值必须在表达式的取值范围内。
2两个分支条件不能重叠。
3case语句执行时必须选中,且只能选中一个分支条件。
4如果没有others分支条件存在,则分支条件必须覆盖表达式所有可能的值。
对std_logc,std_logic_vector数据类型要特别注意使用others分支条件。
25例:
用case语句描述四选一电路26例:
case语句的误用signalvalue:
integerrange0to15;
signalout_1:
bit;
casevalueis-缺少when条件语句endcase;
casevalueis-分支条件不包含2到15when0=out_1out_1out_1out_110;
endloopL2;
302)forloop语句标号:
for循环变量in31离散范围loop顺序处理语句;
endloop标号;
特点:
循环变量是loop内部自动声明的局部量,仅在loop内可见;
不能指定其变化方式。
离散范围必须是可计算的整数范围:
整数表达式to整数表达式整数表达式downto整数表达式例:
用forloop语句描述的8位奇偶校验电路-奇校验328位奇校验电路仿真结果:
33将变量tmp的初值改为0,则为偶校验电路:
343)whileloop语句标号:
while循环条件loop顺序处理语句;
sum:
i:
abcd:
while(i10)loopsum:
=sum+i;
=i+1;
endloopabcd;
注:
循环变量i需事先定义、赋初值、指定变化方式。
一般综合工具不支持whileloop语句。
35例:
用whileloop语句描述的8位奇偶校验电路364、Next语句在loop语句中next语句用来跳出本次循环。
next标号when条件表达式;
分三种情况:
1)next;
无条件终止当前的循环,跳回到本次循环LOOP语句开始处,开始下次循环。
372)next标号;
无条件终止当前的循环,跳转到指定标号的LOOP语句开始处,重新开始执行循环操作。
3)next标号when条件表达式;
当条件表达式的值为true,则执行next语句,进入跳转操作,否则继续向下执行。
38例:
L1:
whilei10loopL2:
whilejf);
b(k+8);
k:
=k+1;
endloopL_Y;
endloopL_X;
5、Exit语句exit语句将结束循环状态。
exit标号when条件表达式;
next语句与exit语句的格式相似。
区别是:
next语句跳向loop语句的起始点,exit语句跳向loop语句的终点。
41例:
process(a)variableint_a:
integer;
beginint_a:
foriin0tomax_limitloopif(int_a=0)thenexit;
elseint_a:
=int_a-1;
42例:
比较两个数的大小signala,b:
std_logic_vector(3downto0);
signala_less_than_b:
boolean;
a_less_than_b=false;
foriin3downto0loopifa(i)=1andb(i)=0thena_less_than_b=false;
exit;
elsifa(i)=0andb(i)=1thena_less_than_b=true;
elsenull;
endif;
endloop;
433.4.3wait语句44进程在仿真时的两个状态:
执行、挂起。
进程状态的变化受wait语句或敏感信号量变化的控制。
可设置4种不同的条件:
waitwaitonwaituntilwaitfor-无限等待-敏感信号量变化-条件满足(可综合)-时间到敏感信号量列表和wait语句只能选其一,两者不能同时使用。
1、waito