博主最近刚开始学习FPGA设计,选用的开发语言是目前比较流行的Verilog,教材选用的是北京航空航天大学出版的《夏宇闻Verilog HDL数字系统设计教程》(第四版),这本书也是比较经典的一本教材,第四版是它的最新版本。在学习的过程中,博主对每一章的知识点进行了梳理,对其中重要的知识点(博主认为的)都做了归纳,当然也有些知识点被博主舍弃掉了。学习的过程中也存在一些没看太明白的地方,对于这些内容,有的没写在总结里,有的在总结里标注出了“存疑”二字,请各位读者阅读时留意。最后也欢迎各位读者指出文章中出现的错误!
目录
第五章 条件语句、循环语句、块语句与生成语句
5.1条件语句:
三种形式:
1. if(表达式)语句;
2. if(表达式)
语句1;
else
语句2;
3. if(表达式1)
语句1
else if(表达式2)语句2;
else if(表达式3)语句3;
else if(表达式n)语句n;
else 语句n+1;
条件语句必须在过程块中使用,所谓过程块是指initial和always语句所引导的执行语句集合。表达式为0或者x视为假。if语句支持嵌套。
5.2case语句
三种形式:
(1)case(表达式) <case分支项> endcase
(2)casex(表达式) <case分支项> endcase
(3)casez(表达式) <case分支项> endcase
分支项的一般格式如下:
分支表达式: 语句;
默认项: 语句;
注:
- default可有可无
- 每个分支项必须不同
- 所有表达式位宽必须相同,常犯错误:用’bx,’bz代替n’bx,n’bz
- casez用来处理不考虑高阻值z的比较过程
- casex用来处理将高阻值z和不定值x都视为不关心的过程
- 分支项可以为begin…end块
- case语句支持嵌套
为了避免Verilog代码综合后生成锁存器,如果用到if语句,最好写上else项;如果用到case语句最好写上default项。
5.3循环语句
共四类:
- forever语句:连续执行的语句;
- repeat语句:连续执行一条语句n次;
- while语句:执行一条语句直到某个条件不满足;
- for语句:通过以下三个步骤决定语句的循环执行:
1. 先给控制循环次数的变量赋初值
2. 判定控制循环的表达式的值,如为假,则跳出循环语句;如为真,则执行指定的语句后,转到第3步
3. 执行一条语句赋值语句来修正控制循环变量次数的变量值,然后返回第二步
5.3.1 forever语句格式如下:
forever 语句;
或forever begin多条语句end
5.3.2 repeat语句格式如下:
repeat(表达式)语句;
或repeat(表达式) begin 多条语句 end
5.3.3 while语句格式如下:
while(表达式)语句;
或while(表达式) begin 多条语句 end
5.3.4 for语句一般格式如下:
for(表达式1;表达式2;表达式3)
在for语句中,循环变量增值表达式可以不必是一般的常规加法或者减法表达式,比如可以使用右移表达式。
5.4块语句的特点:
- 嵌套快
块可以嵌套使用,顺序快和嵌套块能够混合在一起使用
- 命名块
块可以有自己的名字,这成为命名块,其特点为:
1. 命名块可以声明局部变量
2. 命名块是设计层次的一部分,命名块中声明的变量可以通过层次名引用进行访问
3. 命名块可以被禁用(用关键字disable)