1.连续赋值语句
assign 目标变量名=驱动表达式
assign是连续赋值命名的关键词
以关键词assign引导的赋值语句属于并行赋值语句,即无论有多少条assign语句都是同时运行的,与先后次序无关,所以在assign引导的语句中不允许将不同驱动表达式同时赋值给同一变量。
assign的延时表述
assign [延时]目标变量名=驱动表达式
[]中的内容是可以选择使用的,如果选择加入延时内容则表示在任何时刻,当右侧驱动表达式中任一变量值发生变化时即计算出此表达式的值,而经过指定的延时时间后再被赋给左边目标变量
如
assign #6 R1=A&B;
该语句表示当A或B任意变量发生变化后,立刻算出变化后A&B的值,等待6个时间单元后才将运算的结果赋值给R1.这个延迟也称为惯性延迟
2.过程语句
always@(敏感信号或敏感信号列表或表达式)
包括块语句的各类顺序语句
过程语句表述方式
1.用关键词or连接所有敏感信号
always@(a or b or c or d)
2.用逗号区分敏感信号
always@(a,b,c,d)
3.省略形式:目前的Verilog主流综合器都默认过程语句中敏感信号表中列全了所有应该被列入的信号,这都符合Verilog HDL-2001规范
always@*
3.块语句(顺序块语句)
begin[:块名]
语句1;语句2;语句3;...语句n;
end
begin_end相当于一个括号,在此括号中的语句都被认定归属于同一操作模块。当只有一条语句时,Verilog 默认块语句被调用,无需显式定义块(当然定义了也不算错);若含多条语句,则必须使用begin_end将它们括起来。
4.case条件语句(顺序执行特征语句)
case(表达式)
取值1:begin 语句1;语句2;...;end
取值2:begin 语句1;语句2;...;end
.....
default:begin 语句n+m+1;...;end
endcase
case语句的使用应该注意以下3点
1)表达式中的值必须在case以下列出的取值范围内,且数据类型必须匹配
2)与VHDL不同,Verilog的case语句各分支表达式间未必是并列互斥关系。允许出现多个分支同时满足case表达式条件的情况。这种情况将执行最先满足表达式的分支项,然后跳出case语句,不在检测其余分支项
3)除非所有条件句中的选择值能完整覆盖case语句中表达式的值,否则最后必须加上default语句。
casez和casex:当变量取值高阻值z和未知值x时,需要使用对应的casez和casex语句;对于case语句,如果分支取值的某些位是高阻值z则这些位的比较就不再考虑,只关注其他位(0或1)的比较结果;casex同理。
5.if条件语句
if(S)
Y=A;
else
Y=B;
当执行的语句有多条时,应用begin_end将它们括起来:
if(S) Y=A;
else
begin
Y=B;
Z=C;
Q=1'B0;
end
注意:if后无论其表达式是什么形式,()都不能少。