Verilog关键词的多分支语句实例详解

来源: 视频号营销 2023-5-12 11:23:49 显示全部楼层 |阅读模式
目录

    关键词:case,挑选器
      case 语句casex/casez 语句



关键词:case,挑选器



case 语句是一种多路条件分支的形式,可以处理 if 语句中有多个条件选项时利用不方便的题目。

case 语句

case 语句格式以下:
  1. case(case_expr)
  2.     condition1     :             true_statement1 ;
  3.     condition2     :             true_statement2 ;
  4.     ……
  5.     default        :             default_statement ;
  6. 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 可参考条件语句一章,两者完全分歧。
  1. module mux4to1(
  2.     input [1:0]     sel ,
  3.     input [1:0]     p0 ,
  4.     input [1:0]     p1 ,
  5.     input [1:0]     p2 ,
  6.     input [1:0]     p3 ,
  7.     output [1:0]    sout);
  8.     reg [1:0]     sout_t ;
  9.     always @(*)
  10.         case(sel)
  11.             2'b00:   begin      
  12.                     sout_t = p0 ;
  13.                 end
  14.             2'b01:       sout_t = p1 ;
  15.             2'b10:       sout_t = p2 ;
  16.             default:     sout_t = p3 ;
  17.         endcase
  18.     assign sout = sout_t ;
  19. endmodule
复制代码
case 语句中的条件选项表单式不必都是常量,也可以是 x 值或 z 值。
当多个条件选项下需要履行不异的语句时,多个条件选项可以用逗号分隔,放在同一个语句块的候选项中。
可是 case 语句中的 x 或 z 的比力逻辑是不成综合的,所以一般不倡议在 case 语句中利用 x 或 z 作为比力值。
例如,对 4 路挑选器的 case 语句停止扩大,举例以下:
  1. case(sel)
  2.     2'b00:   sout_t = p0 ;
  3.     2'b01:   sout_t = p1 ;
  4.     2'b10:   sout_t = p2 ;
  5.     2'b11:     sout_t = p3 ;
  6.     2'bx0, 2'bx1, 2'bxz, 2'bxx, 2'b0x, 2'b1x, 2'bzx :
  7.         sout_t = 2'bxx ;
  8.     2'bz0, 2'bz1, 2'bzz, 2'b0z, 2'b1z :
  9.         sout_t = 2'bzz ;
  10.     default:  $display("Unexpected input control!!!");
  11. endcase
复制代码
casex/casez 语句

casex、 casez 语句是 case 语句的变形,用来暗示条件选项中的无关项。
casex 用 "x" 来暗示无关值,casez 用问号 "?" 来暗示无关值。
两者的实现的功用是完全分歧的,语法与 case 语句也完全分歧。
可是 casex、casez 通常为不成综合的,多用于仿真。
例如用 casez 语句来实现一个 4bit 控制真个 4 路挑选挑选器。
  1. module mux4to1(
  2.     input [3:0]     sel ,
  3.     input [1:0]     p0 ,
  4.     input [1:0]     p1 ,
  5.     input [1:0]     p2 ,
  6.     input [1:0]     p3 ,
  7.     output [1:0]    sout);
  8.     reg [1:0]     sout_t ;
  9.     always @(*)
  10.         casez(sel)
  11.             4'b???1:     sout_t = p0 ;
  12.             4'b??1?:     sout_t = p1 ;
  13.             4'b?1??:     sout_t = p2 ;
  14.             4'b1???:     sout_t = p3 ;  
  15.         default:         sout_t = 2'b0 ;
  16.     endcase
  17.     assign      sout = sout_t ;
  18. endmodule
复制代码
以上就是Verilog关键词的多分支语句实例详解的具体内容,更多关于Verilog关键词多分支语句的材料请关注剧本之家别的相关文章!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

视频号营销

5
粉丝数
3892
帖子数
商业洽谈 文章投递 寻求报道
电话咨询: 15924191378
关注微信