前面已经记录了一些组成Verilog的基本组成,可以用这些基本组成来构成表达式。这一节,就来记录一下把这些表达式构成一个文件的各种行为描述语句。 ①这里用Verilog基本要素进行的行为描述主要是针对综合来的,也就是可以设计出实际电路来的(行为描述语句有两大子集,一个是面向综合,一个是面向仿真)。②行为描述语句一般指放在always语句中。内容提纲如下所示:
·触发事件控制
·条件语句(if与case语句)
·循环语句
·任务和函数
·编译预处理
一、触发事件控制
①电平敏感事件是指 指定信号的电平发生变化时发生指定的行为。
②边沿触发事件(信号跳变沿)是指 指定信号的边沿信号跳变时发生指定的行为,分为信号的上升沿(x→1或者z→1或者0→1)和下降沿x→0或者z→0或者1→0)。
③信号跳变沿触发电路对信号的某一跳变沿敏感名字一个时钟周期内,只有一个上升沿和一个下降沿,因此计算结果在一个周期内保持不变,而电平触发电路则可能会引起数据在一个时钟周期内变化一次或多次。
二、条件语句
Verilog的条件语句包括if语句和case语句。
(1)if语句
①if语句中的条件判断表达式(括号中的那个)一般为逻辑表达式或者关系表达式或者就一个变量。如果表达式的值是0、X或者Z,则全部按照“假”处理;若为1,则按照“真”处理。
②在应用中,else if 分支的语句数目由实际情况决定;else分支可以省略,但在描述组合逻辑中,会综合得到锁存器。
(2)case语句
①case语句,case语句是一个多路条件分支的形式,常用于多路译码、状态机以及微处理器的指令译码等场合,有case分支 、casez分支、casex分支这三种形式。
②case语句首先对条件表达式求值,然后同时并行对各分支项求值并进行比较;当case语句跳转到某一分支后,控制指针将转移到endcase。
③case分支,case分支语句在执行时,条件表达式和分支之间进行的比较是一种按位进行的全等比较,也就是说,只有在分支项表达式和条件表达式的每一位都彼此相等的情况下,才会认为二者是相等的;此外x、z这两种逻辑状态也作为合法的状态参与比较(1 ==1,,0==0,x==x,z==z)。
④当分支的结果以常数出现时,如果没有指定位宽,则Verilog编译器默认其具有与PC字长相等的位宽。
⑤在casez分支中,如果分支取值的某些位为高阻z,则这些位的比较就不予以考虑,只关注其他位的比较结果。
⑥在casex分支中,则x、z都不予以考虑。
(3)if与case的区别
①if语句指定了一个有优先级的编码逻辑,而case语句生成的逻辑是并行的,不具有优先级。
②通常if结构得出的电路速度较慢,但是占用面积较小,由于速度慢,因此不适合构建特别长的if语句。
③case结构较if结构的速度快,但是占用面积大。
三、循环语句
循环语句有四种:for循环、repeat循环、while循环、forever循环。但是forever循环不能进行综合,而其他三种在一定情况下可以进行综合,因此这里记录可以综合的这三种。一般在电路设计中,不是经常用到循环语句,因为循环语句不好进行优化,占用的资源多,即使用到也是用到for循环。
(1)for循环
①for循环中,在循环次数确定的情况下,也就是循环结束条件是个常量下,才可以进行综合。主体注意要用begin...end来进行包括。
②在Verilog中,不支持