case和if...else语句使用:在多个条件分支处于同一个优先级时,使用case语句;在多个条件分支处于不同优先级时,使用if...else嵌套形式。
关于条件操作符:在处理简单的二选一问题时,条件操作符的表述比较简洁,但在处理复杂的选择问题时,使用条件操作符会使程序显得混乱而且难懂,所以不推荐使用条件操作符实现复杂的条件结构。
几种循环语句的比较:
repeat:循环次数固定
while:
for:
forever:无穷循环,如果想要退出循环,必须采用强制退出循环的方法。用disable语句。
disable语句的使用:
一般情况下,程序总是应该留有正常的出口用于退出循环。但是在有些特殊情况下,仍需要强制推出循环。disable语句提供了强制推出循环的方法。
要使用disable强制推出循环,首先要给循环起一个名字,起名的方法是在begin后面添加“: 名字”。事实上,disable可以中止任何有名字的begin-end块。下面的例子中,disable语句使循环在连续做3次加1操作后就中止,然后继续执行后续操作。
begin: continue
for(i=0;i<4;i=i+1)
begin
a=a+1;
if(i==2) disable continue;
end
end
后续操作1:
后续操作2:
...
下面对上例做出一点改动,将模块的名字continue换个位置,如下:
//本例依然做了4次加1操作
//disable中止了一次循环,然后继续执行下一次循环
for(i=0;i<4;i=i+1)
begin: continue
a=a+1;
if(i==2) disable continue;
end
上例中,disable中止了continue块后,继续执行的是for语句的更新循环变量的操作,即:i=i+1。当赋值
操作完成后,又对条件表达式i<4进行了判断,结果为真,所以继续执行下一次循环。
上面两个例子中,第一个执行的操作相当于C语言中的break,完全中止了循环;第2个相当于continue,仅 仅中止了一次循环。
任务和函数:
Verilog HDL中的任务与高级语言中的过程类似,它不带返回值,但其参数可以定义为输出端口或双向端口,因此实际上任务可以返回多个值。
函数与任务相比,其功能要弱一些。在函数中可以嵌套调用函数,但不可以调用任务,而在任务中,既可以调用函数,也可以调用任务。函数中不允许出现延时和事件控制语句,也就是说函数必须马上执行完,而任务可以在执行过程中挂起。函数必须有一个返回值,返回值被赋给和函数同名的变量,这也决定了函数只能存在一个返回值。
常用的预编译指令:
宏定义语句 'define
文件包含语句 'include
条件编译指令 'ifdef 'else 'endif
时间尺度 'timescale :用来定义模块的仿真时间单位和时间精度,使用格式:
'timescale 仿真时间单位/时间精度