Verilog学习笔记基本语法篇(五)········ 条件语句
条件语句可以分为if_else语句和case语句两张部分。
A)if_else语句
三种表达形式
1) if(表达式) 2)if(表达式) 3)if(表达式1)
语句1; 语句1; 语句1;
else else if(表达式2) 语句2;
语句2; else if(表达式3) 语句3;
........
else if(表达式n) 语句n;
说明:
1)3种形式的if语句后面都有表达式,一般为逻辑表达式或关系表达式。当表达式的值为1,按真处理,若为0、x、z,按假处理。
2)在每一个else前面,即上面的语句后都有分号(除非上面是begin_end块)。else语句不能单独使用,它是if语句的一部分。
3)if 和else后面都可以包含一个内嵌的操作语气,也可以有多个语句,此时可以用begin_end将它们包含起来成为一个复合块语句;(end后不需要再加分号)
4)允许一定形式的表达式的简写方式。如:if(expression)等同于 if(expression==1)
5)if语句可以嵌套,即 if 语句中可以再包含if语句,但是应该注意else总是与它上面的最近的 if 进行配对。
如果不希望else与最近的 if 配对,可以采用begin_end进行分割,如:
if ()
begin
if() 语句1;
end
else
语句2;
这里的else与第一个 if 配对,因为第二个 if 被限制在了begin_end内部。
注意:
条件语句必须在过程块中使用。所谓过程块是指由 initial 和always语句引导的执行语句集合。除了这两种语句引导的begin_end块中可以编写条件语句外,模块中的其他地方都不能编写。
在always块内,若果在给定的条件下变量没有赋值,这个变量将保持原值,也就是说会生成一个锁存器。
B)case语句
case语句是一种多分支选择语句,if只有两个分支可以选择,但是case可以直接处理多分支语句。
1)case(表达式) <case分支项> endcase
2)casex(表达式) <case分支项> endcase
3)casez(表达式) <case分支项> endcase
case分支项的一般格式如下:
分支表达式: 语句;
默认项(default) 语句;
1)case后括号内的表达式称为控制表达式,分支项后的表达式称作分支表达式,又称作常量表达式。控制表达式通常表示为控制信号的某些位,分支表达式则用这些控制信号的具体状态值来表示。
2)当控制表达式和分支表达式的值相等时,就执行分支表达式后的语句。
3)default项可有可无,一个case语句里只准有一个default项。(为了防止程序自动生成锁存器,一般都要设置default项,P57)
4)每一个case的表达是必须各不相同,执行完case分支项的语句后,跳出case块。
5)case语句的所有表达式的值的位宽必须相等。
case casex 和 casez 的真值
| case | 0 1 x z | casez | 0 1 x z | casex | 0 1 x z | ||
| 0 | 1 0 0 0 | 0 | 1 0 0 1 | 0 | 1 0 1 1 | ||
| 1 | 0 1 0 0 | 1 | 0 1 0 1 | 1 | 0 1 1 1 | ||
| x | 0 0 1 0 | x | 0 0 1 1 | x | 1 1 1 1 | ||
| z | 0 0 0 1 | z | 1 1 1 1 | z | 1 1 1 1 |
casex和casez是case的特殊情况,用来处理过程中不必考虑的情况(don't care condition)。case用来处理不用考虑高阻值,casex表示不用考虑高阻值和不定值。
上述表格说明casez中,可以将z任意匹配,casex中可以将x任意匹配。在case的分支语句中,从上到下开始匹配,输出第一个匹配成功的值。
有关casex 和casez的详细对比请参照http://www.cnblogs.com/poiu-elab/archive/2012/11/02/2751323.html
Verilog学习笔记基本语法篇(五)········ 条件语句的更多相关文章
- Verilog学习笔记基本语法篇(十二)········ 编译预处理
h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应 ...
- Verilog学习笔记基本语法篇(九)········ 任务和函数
task 和 function 说明语句分别用来定义任务和函数,利用任务和函数可以把函数模块分成许多小的任务和函数便于理解和调试.任务和函数往往还是大的程序模块在不同地点多次用到的相同的程序段.输入. ...
- Verilog学习笔记基本语法篇(七)········ 生成块
生成块可以动态的生成Verilog代码.可以用于对矢量中的多个位进行重复操作.多个模块的实例引用的重复操作.根据参数确定程序中是否包含某段代码.生成语句可以控制变量的声明.任务和函数的调用.还能对实例 ...
- Verilog学习笔记基本语法篇(八)········ 结构说明语句
Verilog中的任何过程都可以属于以下四种结构的说明语句; 1) initial; 2) always; 3) task; 4) function; 1) initial说明语句: 一个程序 ...
- Verilog学习笔记基本语法篇(六)········ 循环语句
在Verilog中存在着4种类型的循环语句,用来控制执行语句的执行次数. 1)forever语句: 连续执行的语句. 2)repeat语句: 连续执行n次的语句. 3)while语句: 执行语 ...
- Verilog学习笔记基本语法篇(十一)········ 常用系统函数
1)系统任务:$monitor 格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...
- Verilog学习笔记基本语法篇(十三)...............Gate门
Verilog中已有一些建立好的逻辑门和开关的模型.在所涉及的模块中,可通过实例引用这些门与开关模型,从而对模块进行结构化的描述. 逻辑门: and (output,input,...) nand ( ...
- Verilog学习笔记基本语法篇(十)········ 常用系统函数
$display 和 $write 任务 格式: $display (p1,p2,...,pn); $write (p1,p2,..,pn); 这两个函数和系统的任务作用是用来输出信息,即将参数p2到 ...
- Verilog学习笔记基本语法篇(四)·········块语句
块语句是指将两条或者两条以上的语句组合在一起,使其在格式上更像一条语句.块语句分为两种: 1)用begin_end语句,通常用来标识顺序执行的语句,用它标识的块称作顺序块: 2)用fork_join语 ...
随机推荐
- Codeforces 1132E(转化+dp)
要点 假设第i个最后总共选的值为ci,不妨把它分成两部分:\[c_i=cnt'_i*L+q_i\]\[L=840,\ 0<=q_i<L\]又可以写成:\[c_i=cnt_1*i+cnt_2 ...
- 调用submit()方式提交表单
今天在看高级程序设计时看到的这样一段话: 在以调用submit()方法的形式提交表单时,不会触发submit事件 写了一个小例子做了下测试,的确如此: <form id="fm&quo ...
- mysql添加用户并赋予权限命令
添加用户: create user 'gouge'@'localhost' identified by 'gouge'; 赋予权限: 给gouge 用户赋予所有test开头的数据库权限 (test% ...
- Linux 环境下安装 Nginx+php+mysql 开发环境
一直以来都没有养成记录学习的好习惯,我想从这么一天开始,把自己学习和工作中的经验和坑都记录下来.等到以后老的时候还有可以回忆的地方. 最近在学习linux,虽然已经玩linux很久了,但是没有怎么用心 ...
- IBatis.net特性展示代码
最近公司计划设计新业务平台架构.数据访问层框架要使用ibatis.net.头让我做些例子给其他同事演示下 ibatis的基本特性.然后评估下看是否使用.本来以后上官方下载NPetshop演示下就行了那 ...
- 一张图告诉你,只会NodeJS还远远不够!
NodeJS看似小巧简单,却威力无边,一张图,秒懂!!! 可能很多人还不会安装,但至少已经会了javascript,或者至少会了jquery,那么js还可以干更多的事情!js还可以干更多的事情!js还 ...
- 降低PNG图片存储大小方法、图片压缩方法
降低PNG图片存储大小方法,图片压缩方法,如何降低PNG图片存储大小?前提是分辨率和尺寸大小不变,图形的透明部分不变.请看如下办法,亲测可用. 1. 将PNG图片用PS打开. 2. 图像-模式-8位/ ...
- Obj-C Memory Management
Memory management is one of the most important process in any programming language. It is the proces ...
- 10个优秀的移动Web应用开发框架
在最近几年里,移动互联网高速发展.市场潜力巨大.继计算机.互联网之后,移动互联网正掀起第三次信息技术革命的浪潮,新技术.新应用不断涌现.今天这篇文章向大家推荐10大优秀的移动Web开发框架,帮助开发者 ...
- 新建maven的pom.xml第一行出错的解决思路
前言:博主在想要用maven创建项目的时候,忘记之前已经安装过maven了,所以再安装了另一个版本的maven,导致在pom.xml的第一行总是显示某一个jar的zip文件读取不出来. 在网上找了很多 ...