case、casez和casex的区别

参考博客:https://www.cnblogs.com/guolongnv/articles/6906929.html

1、基本概念

  1)?表示z,而不是“dont care”

  2)区分:

   case语句的表达式的值有4中情况:0、1、z、x。4种是不同的,故表达式要严格的相等才可以操作分支语句。

     casez语句中的表达式情况有三种:0、1、x。不用关心z,z可以和任何数值相等,即z =0.z= 1,z=x;

    casex语句的表达式情况有二种:0、1.不用关心x和z。即x=z=0,x=z=1.

2、测试代码

`timescale 1ns / 1ps
module case_compare(
    input[1:0] sel,
    output reg [1:0] y,

    input[1:0] z_sel,
    output reg [1:0] z_y,

    input[1:0] x_sel,
    output reg [1:0] x_y

    );

always @(*) begin
    case(sel)
        2‘b00: y = 2‘b00;
        2‘b01: y = 2‘b01;
        2‘b1?: y = 2‘b10;
        default: y = 2‘b11;
    endcase
end

always @(*) begin
    casez(z_sel)
        2‘b00: z_y = 2‘b00;
        2‘b01: z_y = 2‘b01;
        2‘b1?: z_y = 2‘b10;
        default: z_y = 2‘b11;
    endcase
end

always @(*) begin
    casex(x_sel)
        2‘b00: x_y = 2‘b00;
        2‘b01: x_y = 2‘b01;
        2‘b1?: x_y = 2‘b10;
        default: x_y = 2‘b11;
    endcase
end

endmodule

1)前仿真波形

2)综合后仿真波形

对比波形可以看出来,case(不是casez/casex的时候)的index列表里面的x和z,都被综合工具认为是不可达到的状态就被去掉了。

casez和casex里面的x/z都被认为是don‘t care,所以综合出的电路会是一致的。

3、使用建议

1)我们在写代码的时候如果用了case,那么就不要在index列表里面出现x/z/?,综合工具认不出这些,都会当做don‘t care2)casez和casex综合的结果是一致的。3)casez稍好用一些,因为它可以用来代表don‘t care的值4)最重要的一点就是,casez和casex其实没有孰优孰劣

原文地址:https://www.cnblogs.com/wt-seu/p/12348729.html

时间: 2024-07-31 08:54:47

case、casez和casex的区别的相关文章

case/casez/casex 的区分与使用

参考:http://www.cnblogs.com/poiu-elab/archive/2012/11/02/2751323.html 与  verilog数字系统设计基础 一般来说,使用最多的是CASE语句,casez和casex基本上很少使用,不过因为它们的功能强大,不能不学会它的使用. 一般性的常识是使用casez,强烈的建议不要使用casex.首先要明确的是'?'代表的不是don't care,而是'z'.再有就是case/casez/casex其实都是可综合的,这一点也要记住. 区分:

case class 和class的区别以及构造器参数辨析

工作中偶然发现Scala构造方法中的参数,无论是否有val/var修饰都可以顺利编译运行,如下: 1 class AA(name: String) 2 class BB(val name: String) 那么两者的区别在哪里呢?对于case class呢?其区别又在哪里?其应用场景又在哪里呢?下面就辨析一下如下几个类的区别 1 class AA(name: String) 2 class BB(val name: String) 3 class CC(var name: String) 4 c

Scala 中 case class 与 class 的区别(代码示例)

class 类似Java中的class case class 被称为样例类,是一种也输的类,常被用于模式匹配 具体区别: 1,初始化的时候可以不用new ,也可以加上,但是普通类必须加上new 2,默认实现了equals.hashCode方法 3,默认是可以序列化的,实现了Serializable 4,case class 构造函数参数是public的,我们可以直接按访问 5,case class默认情况下不能修改属性值 7,case class 最重要的功能,支持模式匹配,这也是定义case

常见的关系运算符(if else和case语句)

写在前面的话 说起关系运算符,真的是满心伤痕,这里有一个优先级的问题:关系运算符的优先级别低于算数运算符的优先级别. 关系运算符种类 (1) a<b     a小于b (2) a>b     a大于b (3) a<=b    a小于或者等于b (4) a>=b    a大于或者等于b 关系运算符使用意义 在进行关系运算时,如果申明的关系是假的(false),则返回值是0,如果申明的关系是真的(true),则返回值是1,如果某个操作数的值不定,则关系是模糊的,返回值是不定值. 关系运

条件控制:IF &amp; CASE语句

IF语句主要有以下三种基本形式: 一. IF-THEN语句 IF CONDITION THEN           STATEMENT 1;           ...           STATEMENT N;       END IF; 二. IF-THEN-ELSE语句 IF CONDITION THEN           STATEMENT 1;       ELSE            STATEMENT 2;       END IF; 三. ELSLF语句 IF CONDIT

自己动手写处理器之第二阶段(3)——Verilog HDL行为语句

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第七篇,我尽量每周四篇 2.6 Verilog HDL行为语句 2.6.1 过程语句 Verilog定义的模块一般包括有过程语句,过程语句有两种:initial.always.其中initial常用于仿真中的初始化,其中的语句只执行一次,而always中语句则是不断重复执行的.此外,always过程语句是可综合的,initial过程语句是不可综合的.       1.always过程语句 always过程语句的格式如图2-10所示.

Verilog的关键字及意义

always ifnone rnmos and incdir rpmos assign//标记赋值 include rtran automatic initial rtranif0 begin inout rtranif1 buf input//输入 scalared bufif0 instance showcancelled bufif1 integer signed case join small casex large specify casez liblist specparam cel

《Verilog数字系统设计教程》第3版 夏宇闻

目录 [toc] 第1章 Verilog的基本知识 数字电路系统设计: 从上到下(从抽象到具体)逐层描述自己的设计思想,用一系列分层的模块来描述极其复杂的数字系统. 利用EDA工具逐层进行仿真验证 将需要编程具体物理电路的模块组合经过自由综合工具转换到门级电路网表. ASIC或者FPGA实现功能. Verilog HDL和VHDL的比较: 重点是Verilog简单啊,入门容易. 逻辑网表EDIF: EDIF是电子设计交换格式(Electronic Design Interchange Forma

FPGA代码设计规范整理

1.设计中的FIFO.状态机接口需要有异常恢复状态和状态上报机制,格雷码电路防止被综合电路优化掉. a)自行设计的格雷码FIFO(一般用于连续数据流跨时钟域)用Synplify综合时,为了防止被优化需要添加综合引导语句:“synthesis_syn_preserve = 1”: b)各种综合工具均有状态机安全模式,综合时候建议打开. 2.电路中所以寄存器.状态机.计数器.FIFO在单板上电复位时以及使用前必须处于一个已知状态. a)对电路中的寄存器.状态机.计数器.FIFO必须进行异步复位(不依