1 条件语句(if_else语句)

verilog中if语句有3种格式
e.g

格式1
if(表达式)e.gif(a>b)out1=int1;
格式2
if(表达式)语句1else语句2e.g
if(a>b)
out1=int1
else
out1=int2
格式3
if(表达式1)语句1
else if(表达式2) 语句2;
else if(表达式3) 语句3;
......
else if(表达式m) 语句m;
else             语句n;

说明:

  • 表达式的值为0,z,x时,按假处理,若为1按真处理
  • 第2,3种格式下,每个else前有一个分号,真个语句结束处有一个分号
  • 在 if和else后面可以包含一个内嵌的操作语句,也可包含多个,用begin和end将几个语句包含起来合成一个复合语句块。
  • if(expression)~if(expression==1)
  • if(!expression)~if(expression!=1)
  • if语句中包含一个或多个if语句称为if语句的嵌套。else 总是与它上面最近的if配对,当if和else个数不一样时,用begin_end语句
if( )
begin
if( )语句1(内嵌if)
end
else
语句2

2 case语句

case语句处理多分支选择,case语句通常用于微处理器的指令译码,它的一般形式如下:
(1)case(expression) <case分支项> endcase
(2)casez(expression) <case分支项> endcase
(3)casex(expression) <case分支项> endcase

case表达式一般格式
分支表达式: 语句;
默认项(default项): 语句
需要注意的是:case语句的所有表达式值的位宽必须相等,只有这样,控制表达式和分支表达式才能进行对应位的比较,不可以用’bx和’bz来替代n’bx,n’bz,因为信号x,z的默认宽度是机器的字节宽度,通常是32位。

3 条件语句的语法

verilog语言有3种类型的条件语句

  • 没有else语句
  • 有一条else语句
  • 嵌套的if_else_if语句

类比C语言即可。

4 多路分支语句

举例:

//使用case语句实现四选一多路选择器
module mux4_to_1(out,i0,i1,i2,i3,s1,s0);
//根据输入\输出图的端口声明
output out ;
input i0,i1,i2,i3;
input s1,s0;
//把输出变量声明为寄存器类型
reg out;
//任何输入信号改变,都会引起输出信号的重新计算
//使输出out重新计算的所有输入信号必须写入always@(...)的变量列表中
always@(s1 or s0 or i0 or i1 or i2 or i3)
begincase({s1,s0})2'b00:out=i0;2'b01:out=i1;2'b10:out=i2;2'b11:out=i3;default:out=1'bx;endcase
end
endmodule

5循环语句

verilog中有4中类型的循环语句

  • forever语句:连续的执行语句
  • repeat语句:连续执行一条语句n次
  • while语句:执行一条语句直到某个条件不满足。若一开始不满足,则语句一次也不能执行

forever语句

forever 语句;
或者
forever begin多条语句 end

forever循环语句常用于产生周期性波形,作为仿真测试信号,它与always语句不同之处在于其不能单独出现在程序中,必须写在initial块中

repeat语句

repeat语句;
或者
repeat(表达式) begin多条语句; end
在repeat语句中,其表达式常为常量表达式

while语句

while(表达式)语句;
while(表达式) begin 多条语句; end

for语句

for(表达式1;表达式2;表达式3)语句;

6 顺序块和并行块

块语句的类型

顺序块

//顺序块
//不带延迟
reg z,y;
reg[1:0] z,w;//位宽2
initial
beginx=1'b0;y=1'b1;z={x,y};w={y,x};
end
//带延迟
reg x,y;
reg[1:0]z,w;
initial
beginx=1'b0;//在仿真时刻0完成#5 y=1'b1;//在仿真时刻5完成#10 z={x,y};#15 w={y,x};
end

并行块

//并行块
//带延迟
reg x,y;
reg[1:0]z,w;
initial
forkx=1'b0;#5 y=1'b0;#10 z={x,y};#20 w={y,x};
join

该块语句故意引进了什么竞争,我也看不懂。。。
两条语句在同一时刻对同一个变量产生影响,就会引起竞争。上述代码中,所有语句都在仿真时刻0时进行,但是实际执行顺序未知
从仿真角度来讲,并行块中所有语句都是一起执行的,实际上运行仿真程序时,CPU在任一时刻只能执行一条语句,不同的仿真器按照不同的顺序执行
可以将并行块的关键字fork看成是将一个执行流分成多个独立的执行流,关键字join将多个独立的执行流合并成一个执行流,每个独立的执行流之间都是并发执行的。

块语句的特点

嵌套块、命名块、命名块的禁用

嵌套块:

块可以嵌套使用,顺序块和并行块可以混合在一起使用

命名块:

  • 命名块中可以声明局部变量
  • 命名块是设计层次的一部分,命名块中声明变量可以通过层次名引用进行访问
  • 命名块可以被禁用,停止其执行

命名块的禁用

diable可以用来从循环中退出,处理错误条件,根据控制信号来控制某些代码是否被执行。对于disable紧接在块语句后面的那条语句被执行,类比c语言break跳出循环二disable可以禁用任意一个命名块。
举例,举例我也看不懂,真烦,不举例了,累了。。

7 生成块

编写代码时,必须在模块中说明生成的实例范围,关键字generate-endgenerate来指定范围
生成实例可以是以下一个或者多个类型

  • 模块
  • 用户定义原语
  • 门级原语
  • 连续赋值语句
  • initial和always块
    生成的实例具有唯一的标识名,因此可以用层次命名规则引用。verilog语言允许在生成范围内声明下列数据类型
  • net(线网)、reg(寄存器)
  • integer(整型数)、real(实型数)、time(时间型)、realtime(实数时间型)
  • event(事件)
循环生成语句

循环生成语句允许使用者对下面的模块项进行多次实例引用:

  • 变量声明
  • 模块
  • 用户定义原语、门级原语
  • 连续赋值语句
  • initial和always块
    我又要举例了,对两个N位总线变量进行按位异或
//对两个N位总线变量进行按位异或
module bitwise_xor(out,i0,i1);
//参数声明语句
parameter N=32;//总线的数量为32
//端口声明语句
output [N-1:0] out;
input [N-1:0] i0,i1;
//声明一个临时循环变量
//该变量只用于生成块的循环计算
//verilog仿真时该变量在设计中不存在
genvar j;
//用一个单循环生成按位异或的异或门
generate
for(j=0;j<N;j=j+1)
begin:xor_loopxor gl(out[j],i0[j],i1[j]);
end//在生成块内部结束
endgenerate//结束生成块
endmodule

另一种写法

//另一种方法,异或门可以用always块代替
reg[N-1:0] out;
generate
for(j=0;j<N;j=j+1)
begin:bit//块名bitalways@(i0[j] or i1[j]) out[j]=i0[j]^i1[j];
end
endgenerate

条件生成语句

条件生成语句类似于if_else_if的生成构造,该结构可以在设计模块中根据经过仔细推敲并确定表达式,有条件地调用以下这些结构

  • 模块
  • 用户定义原语、门级原语
  • 连续赋值语句
  • initial或always块

case生成语句

举例,用case生成语句实现N位加法器

//n位加法器
module adder(co,sum,a0,a1,ci)
parameter n=4;
//端口声明
output[n-1:0] sum;
output co;
input[n-1:0] a0,a1;
input ci;
//根据总线的位宽,调用相应的加法器,参数n在调用时可以重新定义,不同位宽的加法器是根据不同的n来觉得的
generate
case(n)//当n=1或n=2是分别选用位宽为1位或2位的加法器,调用之前的1:adder_1bit adder1(co,sum,a0,a1,ci);//1位的加法器2:adder_2bit adder2(co,sum,a0,a1,ci);//2位的加法器//默认情况下选用位宽n位的超前加法器default:adder_cla #(n) adder3(co,sum,a0,a1,ci);
endcase

Verilog之条件语句、循环语句、块语句与生成语句相关推荐

  1. 你真的懂switch吗?聊聊switch语句中的块级作用域

      最近在代码中不小心不规范的,在switch里面定义了块级变量,导致页面在某些浏览器中出错,本文讨论以下switch语句中的块级作用域. switch语句中的块级作用域 switch语句中的块级作用 ...

  2. c语言switch的作用域,你真的懂switch吗?聊聊switch语句中的块级作用域

    最近在代码中不小心不规范的,在switch里面定义了块级变量,导致页面在某些浏览器中出错,本文讨论以下switch语句中的块级作用域. switch语句中的块级作用域 switch语句中的块级作用域可 ...

  3. Verilog学习----条件语句、循环语句、块语句与生成语句

    1.条件语句(if_else语句) 3钟形式的if语句: 1)if(表达式)语句.如 if(a>b) out1 = int1; 2)if(表达式) 语句: else 语句:如 if(a>b ...

  4. 第五章:条件、循环以及其他语句(上)

    第五章 条件.循环以及其他语句 5.1 再谈print和import 随着我们对于Python的认知越来越多,很多我们以前不清楚的东西慢慢都需要了解,下面在谈谈print和import等我们所不知道的 ...

  5. python中循环迭代语句_python条件与循环-循环

    1 while语句 while用于实现循环语句,通过判断条件是否为真,来决定是否继续执行. 1.1 一般语法 语法如下: while expression: suite_to_repeat 1.2 计 ...

  6. 第五章 条件、循环及其他语句

    第五章 条件.循环及其他语句 再谈print和import print现在实际上是一个函数 1,打印多个参数 用逗号分隔,打印多个表达式 sep自定义分隔符,默认空格 end自定义结束字符串,默认换行 ...

  7. python语句块规范_Python基础语法——代码规范判断语句循环语句

    Python基础语法 代码的执行顺序从上到下 从左到右 代码规范模块名,包名,普通数据量一般小写字母,多个单词之间用 _ 连接 不要用系统定义的名称,具有特殊意义的表示符,如:doc,txt之类的 每 ...

  8. Python基础教程笔记——条件,循环和其他语句

    条件,循环和其他语句 Table of Contents 1 print和import的更多信息 1.1 使用逗号输出 1.2 把一些东东作为另一些东东导入 2 赋值魔法 2.1 序列解包 2.2 链 ...

  9. python入门——条件控制+循环语句

    条件控制 1.if语句 一般形式 if condition_1: statement_block_1 elif condition_2: statement_block_2 else: stateme ...

最新文章

  1. xcode 4.2 不再支持 Window-Based Application 的解决办法(转载)
  2. qt中socket通信流程图_使用QT实现简单的tcp/ip通信
  3. java.lang.Enum
  4. 甘肃关于领取软考2021年上半年合格证书的通知
  5. 【PAT甲级 替换指定字符】1035 Password (20 分) Java版 4/4通过
  6. 已经了关联到svn的文件类型,如何添加到 ignore
  7. [国家集训队]middle
  8. Vim引申以及Linux下彩色进度条实现
  9. js中this的理解
  10. 视频教程-通俗易懂的全国计算机二级C语言真题精讲-C/C++
  11. 2020年最全Python常用爬虫代码就这些了(附爬虫教程)
  12. 学生作业管理系统java源码_基于jsp的学生作业管理-JavaEE实现学生作业管理 - java项目源码...
  13. 表情识别(一)——使用Dlib、opencv和Python识别面部特征
  14. js 生成条形码(JsBarcode.all.min.js)
  15. 站内搜索引擎源代码 asp.net
  16. 微信趟过运营商的河 还得翻过几座山
  17. 网络聊天室(群发助手)—— C++
  18. 揭秘“菲住布渴”中运用的黑科技:除了check in、坐电梯、开门...全部刷脸之外,还有什么?...
  19. 天马G6二期、腾龙光谷数据中心 落户武汉东湖高新区
  20. 如何防止你的代码被窃取?Python代码加密方案汇总(带实例验证)

热门文章

  1. 海南信用社计算机试题,2021年海南农村信用社计算机笔试内容17
  2. 韶关python培训班_新华字典:韶_“韶”的意思,五笔,笔画,拼音,五行_HttpCN
  3. QT The inferior stopped because it received a signal from the operating system.
  4. 【Java攻城狮宝典】04-for循环(答案)
  5. 用户行为分析,就该这么做!
  6. 优化 MT4 性能让你的MT4更加流畅
  7. 【Git从青铜到王者】第四篇:Git的分支与合并
  8. 坚果X3怎么样好不好值得买吗,和当贝X3哪款好这篇告诉你
  9. android有什么作用,Android 7.0有什么功能 Android N完整功能参数介绍
  10. 中国移动力推多频5G全网通手机,或将成为业界标准