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

 更新时间:2023年04月11日 11:52:06   作者:向阳逐梦  
这篇文章主要为大家介绍了Verilog关键词的多分支语句实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

关键词: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

以上就是Verilog关键词的多分支语句实例详解的详细内容,更多关于Verilog关键词多分支语句的资料请关注脚本之家其它相关文章!

相关文章

  • Verilog语言的循环语句示例详解

    Verilog语言的循环语句示例详解

    这篇文章主要为大家介绍了Verilog语言的循环语句示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 调试JScript/VBScript的方法

    调试JScript/VBScript的方法

    调试JScript/VBScript的方法...
    2007-03-03
  • linux Shell学习笔记第二天

    linux Shell学习笔记第二天

    今天做笔记稍微整理了下,但是避免不了出现错误,如果有错误麻烦大家给提出,本文最后将会共享今天的三个脚本文件。
    2010-12-12
  • 用CE5.2版找武林外传一级基址的方法(图文教程)

    用CE5.2版找武林外传一级基址的方法(图文教程)

    好帖子,正好解决了我的遇到的瓶颈问题,收藏一下
    2009-07-07
  • 脚本的DVD开发

    脚本的DVD开发

    脚本的DVD开发...
    2007-01-01
  • 两个很详细的shell 实例代码

    两个很详细的shell 实例代码

    现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意
    2012-02-02
  • 详解npm脚本和package.json

    详解npm脚本和package.json

    npm是前端开发广泛使用的包管理工具,它让js开发者分享、复用代码更方便。这篇文章主要介绍了npm脚本和package.json,需要的朋友可以参考下
    2019-12-12
  • FcScript V1.0 使用说明帮助文件

    FcScript V1.0 使用说明帮助文件

    FcScript是由Forcal和MForcal支持的脚本控件(这两个动态库必须在windows搜索路径内,或者在文件夹“c:\FcDll”中),目前仅定义了VBScript接口,以后再增加其他接口。VBScript接口全部使用VARIANT参数。
    2009-01-01
  • Verilog语言数据类型基础教程

    Verilog语言数据类型基础教程

    这篇文章主要为大家介绍了Verilog语言数据类型基础教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 基于canvas剪辑区域功能实现橡皮擦效果

    基于canvas剪辑区域功能实现橡皮擦效果

    这篇文章主要介绍了基于canvas剪辑区域功能实现橡皮擦效果,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-03-03

最新评论