HDL语言的主要描述语句Word格式文档下载.docx
- 文档编号:22266546
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:34
- 大小:52.38KB
HDL语言的主要描述语句Word格式文档下载.docx
《HDL语言的主要描述语句Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《HDL语言的主要描述语句Word格式文档下载.docx(34页珍藏版)》请在冰豆网上搜索。
1'
;
waituntilCLK'
eventandCLK='
waituntilnotCLK'
stableandCLK='
电路综合时,以上3种情况硬件无差别。
*常用语句:
signalCLK:
BIT;
……
process
waituntilCLK'
--等待时钟上沿
WAITFOR
WAITFOR 时间表达式;
表示等待指定时间后再执行后继语句;
waitfor20ns;
waitfor(a*(b+c));
多条件WAIT语句
同时使用多个等待条件;
超时等待
断言(assert)语句
*在运行过程中报告指定的错误信息,用于仿真和调试;
*基本格式:
assert条件[report 报告信息][severity 出错级别];
报告信息:
字符串;
出错级别:
note,warning,error,failure。
执行此语句时,如果条件为真,则向下执行,反之,则输出错误信息和出错级别。
assert(sendB='
)
report"
sendBtimedoutat'
"
severityERROR;
3.赋值语句
将一个值赋给变量或信号。
格式:
目标:
=表达式;
--变量赋值
目标<
--信号赋值
目标为接受表达式值的变量或信号(或变量或信号的一部分),表达式必须求值得到与目标相同的数据类型。
目标的种类:
*简单名:
Δ格式:
标识符:
=表达式--变量赋值
标识符<
=表达式--信号赋值
标识符为信号或变量,对数组类型数组的所有元素都要赋值。
Δ例:
variableA,B:
signalC:
BIT_VECTOR(1TO4);
A:
='
B:
0'
C<
="
1100"
*有序号名:
标识符(序号表达式):
标识符(序号表达式)<
标识符为数组类型信号或变量,序号表达式必须计算成该数组序号类型的值且在界内,但无需是可计算的。
variableA:
A
(1):
A
(2):
A(3):
A(4):
*片(slice):
Δ目标格式:
标识符(序号表达式1方向序号表达式2)
标识符为数组类型信号或变量,序号表达式必须计算成该数组序号类型的值且在界内,但必须是可计算的;
方向必须与数组类型方向一致。
variableA,B:
A(1to2):
11"
A(3to4):
00"
B(1TO4):
*字段(field):
标识符.字段名
标识符为记录类型信号或变量,字段名是该记录类型中某字段的名称,前面加"
."
。
赋值表达式必须必须包含字段类型。
字段可以是任何类型,包括数组、记录或积累类型。
5.信号赋值语句
信号赋值语句是在VHDL行为建模中的最基本形式,3种类型:
基本型、条件型、选择型(后两种为并发语句)。
基本型信号赋值语句:
a<
=b;
为赋值引入非零延时值:
a<
=bafter10ns;
信号<
=敏感信号表达式;
例:
z<
=anot(bnadc);
注意事项:
信号赋值不立即生效;
若在一个进程中,有若干值赋给一个信号,则最后一个赋值生效;
若干进程赋值给一个信号,电路可能失效;
4.IF语句
1)if条件then
<
顺序处理语句>
;
endif;
例1:
--MAX+plusIIVHDLExample
--LatchInference
--Copyright(c)1994AlteraCorporation
ENTITYlatchinfIS
PORT
(enable,data:
INBIT;
q:
OUTBIT);
ENDlatchinf;
ARCHITECTUREmaxpldOFlatchinfIS
BEGIN
latch:
PROCESS(enable,data)
BEGIN
IF(enable='
)THEN
q<
=data;
ENDIF;
ENDPROCESSlatch;
ENDmaxpld;
一信号或变量并不在所有条件下都被驱动,没有"
else"
,当条件不成立时,q保持原来值。
以上为锁存器推断。
例2:
entityuregis
generic(size:
integer:
=2);
port(
clk,reset,load:
instd_logic;
d:
inunsigned(size-1downto0);
q:
bufferunsigned(size-1downto0));
endureg;
architecturearchuregofuregis
begin
p1:
process(reset,clk)
ifreset='
then
q<
=(others=>
'
);
elsif(clk'
eventandclk='
)then
ifload='
=d;
endarchureg;
此例描述一个D触发器组。
2)if条件then
else
if(PHI='
)then
TEMP<
=A;
为两输入与门。
为避免锁存器推断,在所有条件下都赋给信号一个值。
3)if条件then
<
elsif条件then
……
每个条件必须是布尔表达式,每个"
if"
分支都包括一个或几个顺序语句;
每个条件按顺序计算;
如果没有一个条件满足且"
语句存在,则执行"
语句;
语句不存在,则什麽语句也不执行;
四选一电路
entitymux4is
input:
instd_logic_vector(3downto0);
sel:
instd_logic_vector(1downto0);
y:
outinstd_logic);
endmux4;
architecturertlofmux4is
process(input,sel)
if(sel="
y<
=input(0);
elsif(sel="
01"
=input
(1);
10"
=input
(2);
elsif
=input(3);
endrtl;
5.CASE语句
CASE表达式IS
WHEN 选择 =>
顺序处理语句;
ENDCASE;
选择的计算结果必须是整型、枚举型或枚举型数组;
选择为静
态表达式或动态范围,最终的选择是可以是"
others"
选择不能重叠,若无"
选择,那末选择必须覆盖表达式的所有可能值。
4种选择类型:
WHEN 值 =>
WHEN 值∣值∣……∣值 =>
WHEN 值TO值=>
WHENOTHERS=>
例1:
entityMUX4is
port(A,B,I0,I1,I2,I3:
Q:
outstd_logic);
endMUX4;
architectureMUX4ofMUX4is
signalsel:
INTEGERrange0to3;
process(A,B,I0,I1,I2,I3)
……
CASEselIS
WHEN0=>
Q<
=I0;
WHEN1=>
=I1;
WHEN2=>
=I2;
WHEN3=>
=I3;
ENDCASE;
例2:
signalVALUE:
INTEGERrange0to15;
signalz1,z2,z3,z4:
Z1<
Z2<
Z3<
Z4<
caseVALUEis
when0=>
z1<
when1∣3=>
z2<
when4to7∣2=>
z3<
whenothers=>
z4<
endcase;
无效case语句例:
signalOUT_1:
OUT_1<
when1=>
when0to10=>
when5to15=>
endcase;
6.LOOP语句
重复地执行顺序语句。
2种(for…loop和while…loop)。
for…loop
*迭代次数由一个整数范围确定,对该范围内的每一个值,循环执行一次。
当迭代范围中的最后一个值迭代完成后,跳出循环,继续执行循环后的下一个语句。
[标号]:
for循环变量in范围 loop
<
endloop[标号名];
*循环变量不要在别处说明;
且只能在循环内读,也不能给循环变量赋值。
*“范围”的表式:
整数表达式to整数表达式
整数表达式downto整数表达式
其他
*例1:
asum:
foriin1to9loop
sum:
=i+sum;
endloopasum;
*例2:
signalA,B:
BIT_VECTOR(1to3);
……
forIin1to3loop
A(I)<
=B(I);
endloop;
A
(1)<
=B
(1);
A
(2)<
=B
(2);
A(3)<
=B(3);
以上两段等价。
*例3:
variableA,B:
BIT_VECTOR(1to10);
forIinA'
rangeloop
A(I):
=notB(I);
while…loop
*只要迭代条件满足,就重复执行封闭的语句。
如果迭代迭代条件求值为“真”,则封闭的语句就执行一次。
然后迭代条件重新求值。
当迭代仍为“真”,循环则重复执行,否则,跳出循环,继续执行循环后的下一个语句。
while条件loop
条件为布尔表达式。
i:
=1;
=0;
sbcd:
while(i<
10)loop
=i+1;
endloopsbcd;
7.NEXT语句
停止本次迭代,转入下一次迭代。
next[标号][when条件];
[标号]表明下一次迭代的起始位置;
若既无[标号],也无[when条件],则执行到该语句就立即跳出本次循环,再从loop的起始位置进行下次迭代。
例:
signalA,B,COPY_ENABLE:
BIT_VECTOR(1to8);
A<
00000000"
forIin1to8loop
nextwhenCOPY_ENABLE(I)='
嵌套循环中的next语句
signalX,Y:
BIT_VECTOR(0to7);
A_LOOP:
forIinX'
B_LOOP:
forJinY'
nextA_LOOPwhenI=J;
endloopB_LOOP;
endloopA_LOOP;
当条件满足时,从循环B中跳出,到从外循环A开始迭代。
8.EXIT语句
用于循环体内部,有条件或无条件地结束当前的迭代和循环。
exit[loop标号][when条件];
当条件满足时,结束循环,继续后继的语句。
嵌套循环中的3种形式:
*若无[loop标号]:
则执行exit时,程序仅从当前所属的loop循环中跳出。
*若exit后接[loop标号]:
则执行exit时,程序跳到说明的标号。
*exit后接[when条件]:
则执行exit时,只有当条件“真”时才跳出循环。
BIT_VECTOR(1downto8);
signalA_LESS_THAN_B:
boolean;
A_LESS_THAN_B<
=FALSE;
forIin1downto0loop
if(A(I)='
andB(I)='
A_LESS_THAN_B<
exit;
elsif(A(I)='
=TRUE;
null;
exit的next比较:
两者格式相同,都是跳出循环的剩余语句;
但exit是终止循环,而next是继续下一次循环。
5
5.2并发描述语句
进程(process)语句
并发信号赋值(concurrentsignalassignment)语句
在构造体的进程之外使用。
条件信号赋值(conditionalsignalassignment)语句
选择信号赋值(selectivesignalassignment)语句
块(block)语句
1.进程(process)语句
一个结构体中的所有进程并发运行;
每个进程中的所有语句都顺序执行;
进程中包含一个显式信号敏感表或wait语句;
进程之间的通信靠信号来传递。
2.并发信号赋值(concurrentsignalassignment)语句
在构造体的进程之外使用,等价于包含顺序赋值语句的进程;
并发信号赋值语句在仿真时同时运行。
目标<
目标为接受表达式值的信号。
architecturebehavofa_varis
output<
=a(i);
endbehav;
等价于进程中的赋值语句。
3.条件信号赋值(conditionalsignalassignment)语句
=表达式1when条件1else
表达式2when条件2else
..
表达式n;
“目标”为目标为接受表达式值的信号;
所使用的表达式是“条件”为真的第一个(按顺序);
如果没有条件为真,则将最后一个表达式赋给目标;
若多个条件为真,则仅第一个有效,如同IF语句的第一个条件为真的分支一样。
z<
=Awhenassign_A='
Bwhenassign_B='
C;
与此等价的IF语句:
process(A,ssign_A,B,assign_B,C)
ifasign_A='
Z<
elsifasign_B='
=B;
else
=C;
endif;
例2:
entitymux4is
port(i0,i1,12,13,a,b:
siganlsel:
std_logic_vector(1downto0);
sel<
=b&
a;
q<
=i0whensel="
i1whensel="
i2whensel="
i3whensel="
'
X'
endrtl;
与IF语句的区别:
*IF只能在进程内使用,而条件赋值语句在进程外使用;
*IF语句可以没有else,而条件赋值语句一定要有else;
*IF语句可以嵌套,而条件赋值语句不能进行嵌套;
*IF语句可以生成锁存电路,条件赋值语句不能生成锁存电路。
4.选择信号赋值(selectivesignalassignment)语句
with选择表达式select
=表达式1when条件1
表达式2when条件2
表达式nwhen条件n;
包括选择表达式值的第一个条件所对应的表达式的值赋给目标;
每个选择为静态表达式或静态范围;
选择表达式中的每一个值都必须由一个选择所覆盖;
最后的选择可以是others。
约束:
各条件不得重叠;
若无others,则选择表达式的所有可能值都必须被条件集合所覆盖。
siganlA,B,C,D,Z:
BIT
signalCONTROL:
bit_vector(1downto0);
withCONTROLselect
=Awhen"
Bwhen"
Cwhen"
Dwhen"
whenothers;
等价的case语句:
process(CONTROL,A,B,C,D)
caseCONTROLis
when0=>
when1=>
when2=>
when
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HDL 语言 主要 描述 语句
![提示](https://static.bdocx.com/images/bang_tan.gif)