首页 > 其他分享 >Verilog语言的条件语句

Verilog语言的条件语句

时间:2022-12-22 20:00:13浏览次数:32  
标签:语句 begin end 语言 else Verilog sel sout

关键词:if,选择器

条件语句

条件(if)语句用于控制执行语句要根据条件判断来确定是否执行。

条件语句用关键字 if 和 else 来声明,条件表达式必须在圆括号中。

条件语句使用结构说明如下:

if (condition1)       true_statement1 ;
else if (condition2) true_statement2 ;
else if (condition3) true_statement3 ;
else default_statement ;
  • if 语句执行时,如果 condition1 为真,则执行 true_statement1 ;如果 condition1 为假,condition2 为真,则执行 true_statement2;依次类推。
  • else if 与 else 结构可以省略,即可以只有一个 if 条件判断和一组执行语句 ture_statement1 就可以构成一个执行过程。
  • else if 可以叠加多个,不仅限于 1 或 2 个。
  • ture_statement1 等执行语句可以是一条语句,也可以是多条。如果是多条执行语句,则需要用 begin 与 end 关键字进行说明。

下面代码实现了一个 4 路选择器的功能。

module mux4to1(
input [1:0] sel ,
input [1:0] p0 ,
input [1:0] p1 ,
input [1:0] p2 ,
input [1:0] p3 ,
output [1:0] sout);

reg [1:0] sout_t ;

always @(*) begin
if (sel == 2'b00)
sout_t = p0 ;
else if (sel == 2'b01)
sout_t = p1 ;
else if (sel == 2'b10)
sout_t = p2 ;
else
sout_t = p3 ;
end
assign sout = sout_t ;

endmodule

testbench 代码如下:

`timescale 1ns/1ns

module test ;
reg [1:0] sel ;
wire [1:0] sout ;

initial begin
sel = 0 ;
#10 sel = 3 ;
#10 sel = 1 ;
#10 sel = 0 ;
#10 sel = 2 ;
end

mux4to1 u_mux4to1 (
.sel (sel),
.p0 (2'b00), //path0 are assigned to 0
.p1 (2'b01), //path1 are assigned to 1
.p2 (2'b10), //path2 are assigned to 2
.p3 (2'b11), //path3 are assigned to 3
.sout (sout));

//finish the simulation
always begin
#100;
if ($time >= 1000) $finish ;
end

endmodule

仿真结果如下。

由图可知,输出信号与选择信号、输入信号的状态是相匹配的。

Verilog语言的条件语句_条件语句

事例中 if 条件每次执行的语句只有一条,没有使用 begin 与 end 关键字。但如果是 if-if-else 的形式,即便执行语句只有一条,不使用 begin 与 end 关键字也会引起歧义。

例如下面代码,虽然格式上加以区分,但是 else 对应哪一个 if 条件,是有歧义的。

if(en)
if(sel == 2'b1)
sout = p1s ;
else
sout = p0 ;

当然,编译器一般按照就近原则,使 else 与最近的一个 if(例子中第二个 if)相对应。

但显然这样的写法是不规范且不安全的。

所以条件语句中加入 begin 与 and 关键字就是一个很好的习惯。

例如上述代码稍作修改,就不会再有书写上的歧义。

if(en) begin
if(sel == 2'b1) begin
sout = p1s ;
end
else begin
sout = p0 ;
end
end

标签:语句,begin,end,语言,else,Verilog,sel,sout
From: https://blog.51cto.com/u_15641375/5963251

相关文章

  • Go语言基础之包
    在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的。本文介绍了Go语言中如何定义包、如何导出包的内容及如何导入其他包。包与依赖管理本......
  • 数据库低端sql查询语句片段
     SELECT*FROMtableSELECT*FROMtableWHEREname='强哥'SELECT*FROMtableORDERBYupdateTimeDESC......
  • 错误:对数据库的备份、文件操作(如 ALTER DATABASE ADD FILE)以及加密更改必须序列化。
    错误:对数据库的备份、文件操作(如ALTERDATABASEADDFILE)以及加密更改必须序列化。请在当前备份或文件操作完成后重新发出该语句。 处理方式1:先分离数据库   ......
  • 时间老去,Ruby不死,Ruby语言基础入门教程之Ruby3全平台开发环境搭建EP00
    如果说电子游戏是第九艺术,那么,编程技术则配得上第十艺术的雅称。艺术发展的普遍规律就是要给与人们对于艺术作品的更高层感受,而Matz的Ruby语言则正是这样一件艺术品。无论......
  • Go语言基础之结构体
    Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口,比面向对象具有更高的扩展性和灵活性。类型别名和自定义类型......
  • html常用语句
    下拉框<tr><td>开课节次:</td><td><selectname="jieci"><optionvalue="1-2节">1-2节</option><optionvalue="3-4节">3-4......
  • Go语言基础之指针
    区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。Go语言中的指针......
  • C语言接口编写
    C语言中,没有interface这个语法,因此上面的代码在C语言中,需要用struct来实现。具体包括:每个接口函数,需要声明一个单独的函数指针类型;整个interface的方法集,用一个struct......
  • R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达
    全文下载链接:http://tecdat.cn/?p=25880 最近我们被客户要求撰写关于泊松过程的研究报告,包括一些图形和统计输出。本文描述了一个模型,该模型解释了交易的聚集到达,并展示......
  • R语言Gibbs抽样的贝叶斯简单线性回归仿真分析|附代码数据
    全文下载链接:http://tecdat.cn/?p=4612最近我们被客户要求撰写关于Gibbs抽样的研究报告,包括一些图形和统计输出。贝叶斯分析的许多介绍都使用了相对简单的教学实例(例如,根......