首页 > 其他分享 >Verilog的多分支语句

Verilog的多分支语句

时间:2022-12-23 23:02:06浏览次数:57  
标签:语句 case default casez Verilog input 分支 sout

关键词:case,选择器

case 语句是一种多路条件分支的形式,可以解决 if 语句中有多个条件选项时使用不方便的问题。

case 语句

case 语句格式如下:

case(case_expr)
condition1 : true_statement1 ;
condition2 : true_statement2 ;
……
default : default_statement ;
endcase

case 语句执行时,如果 condition1 为真,则执行 true_statement1 ; 如果 condition1 为假,condition2 为真,则执行 true_statement2;依次类推。如果各个 condition 都不为真,则执行 default_statement 语句。

default 语句是可选的,且在一个 case 语句中不能有多个 default 语句。

条件选项可以有多个,不仅限于 condition1、condition2 等,而且这些条件选项不要求互斥。虽然这些条件选项是并发比较的,但执行效果是谁在前且条件为真谁被执行。

ture_statement1 等执行语句可以是一条语句,也可以是多条。如果是多条执行语句,则需要用 begin 与 end 关键字进行说明。

case 语句支持嵌套使用。

下面用 case 语句代替 if 语句实现了一个 4 路选择器的功能。仿真结果与 testbench 可参考​​条件语句​​一章,两者完全一致。

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 @(*)
case(sel)
2'b00: begin
sout_t = p0 ;
end
2'b01: sout_t = p1 ;
2'b10: sout_t = p2 ;
default: sout_t = p3 ;
endcase
assign sout = sout_t ;

endmodule

case 语句中的条件选项表单式不必都是常量,也可以是 x 值或 z 值。

当多个条件选项下需要执行相同的语句时,多个条件选项可以用逗号分开,放在同一个语句块的候选项中。

但是 case 语句中的 x 或 z 的比较逻辑是不可综合的,所以一般不建议在 case 语句中使用 x 或 z 作为比较值。

例如,对 4 路选择器的 case 语句进行扩展,举例如下:

case(sel)
2'b00: sout_t = p0 ;
2'b01: sout_t = p1 ;
2'b10: sout_t = p2 ;
2'b11: sout_t = p3 ;
2'bx0, 2'bx1, 2'bxz, 2'bxx, 2'b0x, 2'b1x, 2'bzx :
sout_t = 2'bxx ;
2'bz0, 2'bz1, 2'bzz, 2'b0z, 2'b1z :
sout_t = 2'bzz ;
default: $display("Unexpected input control!!!");
endcase

casex/casez 语句

casex、 casez 语句是 case 语句的变形,用来表示条件选项中的无关项。

casex 用 "x" 来表示无关值,casez 用问号 "?" 来表示无关值。

两者的实现的功能是完全一致的,语法与 case 语句也完全一致。

但是 casex、casez 一般是不可综合的,多用于仿真。

例如用 casez 语句来实现一个 4bit 控制端的 4 路选择选择器。

module mux4to1(
input [3: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 @(*)
casez(sel)
4'b???1: sout_t = p0 ;
4'b??1?: sout_t = p1 ;
4'b?1??: sout_t = p2 ;
4'b1???: sout_t = p3 ;
default: sout_t = 2'b0 ;
endcase
assign sout = sout_t ;

endmodule

标签:语句,case,default,casez,Verilog,input,分支,sout
From: https://blog.51cto.com/u_15641375/5966335

相关文章

  • git clone 某一特定分支
    网上搜索自己想要的答案,往往会搜大一大堆感觉没用的,或者看不懂的东西,最好终于找到了想要答案,特记录一下:==============================================clone某个分支......
  • nginx通过set变量来实现if语句的AND判断;
    http://www.doself.com/?post=105今天在配置一个网站的rewrite规则时碰到了这个问题。在Nginx里不能够采用这样的语句 1if ($request_method=POST&&$htt......
  • Git创建分支
    一、创建test分支提交步骤1.列出所有分支gitbranch-a2.创建test分支gitbranchtest3.切换到test分支:gitcheckouttest4.添加add修改:gitadd.5.添加comm......
  • sql语句出现group by分组之后查询其他非分组字段的方式
    如题,当sql中出现groupby时这时其他非分组字段只能带函数才能出现在select列中,所以最好的办法只能连表去查询其他字段 @Select("<script>"+"select......
  • Verilog语言的条件语句
    关键词:if,选择器条件语句条件(if)语句用于控制执行语句要根据条件判断来确定是否执行。条件语句用关键字if和else来声明,条件表达式必须在圆括号中。条件语句使用结构说明如......
  • 数据库低端sql查询语句片段
     SELECT*FROMtableSELECT*FROMtableWHEREname='强哥'SELECT*FROMtableORDERBYupdateTimeDESC......
  • 错误:对数据库的备份、文件操作(如 ALTER DATABASE ADD FILE)以及加密更改必须序列化。
    错误:对数据库的备份、文件操作(如ALTERDATABASEADDFILE)以及加密更改必须序列化。请在当前备份或文件操作完成后重新发出该语句。 处理方式1:先分离数据库   ......
  • git 远程分支
    先本地创建一个分支(分支名:develop)gitcheckout-bdevelop将该分支推送到远程并创建(当然这里你也可以写好自己的代码后再执行该操作)gitpushorigindeve......
  • html常用语句
    下拉框<tr><td>开课节次:</td><td><selectname="jieci"><optionvalue="1-2节">1-2节</option><optionvalue="3-4节">3-4......
  • C语言关键字和语句
    auto自动(变量类型前,一般省略了,例inta=0;其实int前就修饰了auto)break返回,一般用于循环和swith的结束,循环就直接跳出循环,case   swith语句里的判断,const 常量修饰......