这几天在做一个无人机定位的项目,时间比较紧,自己也不太懂,所以就边忙别愁就没有了精力写博客了。可是想想这样也不好,还是抽出点时间写博客,即使写的比较简单也行,至少能解答自己的疑惑就够了。

Verilog HDL中的case语句有两种变种,casex和casez,既然存在这两种形式,肯定是合理的,为了应对特殊的情况。我们只需要掌握其具体用法,需用用到的地方就用上,倒也不必考虑太多。(我见有些人还分析综合前和综合后,这种探索精神值得肯定,但目前来说,我没理由考虑那么多,究竟有没有意义我也不知道!)

最后,本文内容参考:《从算法设计到硬件逻辑的实现》,这是一本好书,让我学到了很多知识。


case语句是一种多分支选择语句,if语句只有两个分支可供选择,而实际问题中常常需要用到多分支选择,Verilog语言提供的case语句直接处理多分支选择。case语句通常用于微处理器的指令译码,
它的一般形式如下:
1) case(表达式) <case分支项> endcase
2) casez(表达式) <case分支项> endcase
3) casex(表达式) <case分支项> endcase
case分支项的一般格式如下:
分支表达式: 语句
缺省项(default项): 语句

说明:
a) case括弧内的表达式称为控制表达式,case分支项中的表达式称为分支表达式。控制表达式通常表示为控制信号的某些位,分支表达式则用这些控制信号的具体状态值来表示,因此分支表达式又可以称为常量表达式。
b) 当控制表达式的值与分支表达式的值相等时,就执行分支表达式后面的语句。如果所有的分支表达式的值都没有与控制表达式的值相匹配的,就执行default后面的语句。
c) default项可有可无,一个case语句里只准有一个default项。(具体而言,尽量要有一个default,可以是一个空语句。当然语法上,没有default也不会报错。)


下面是一个简单的使用case语句的例子。该例子中对寄存器rega译码以确定result的值。

reg [15:0] rega;
reg [9:0] result;case(rega)
16 'd0: result = 10 'b0111111111;
16 'd1: result = 10 'b1011111111;
16 'd2: result = 10 'b1101111111;
16 'd3: result = 10 'b1110111111;
16 'd4: result = 10 'b1111011111;
16 'd5: result = 10 'b1111101111;
16 'd6: result = 10 'b1111110111;
16 'd7: result = 10 'b1111111011;
16 'd8: result = 10 'b1111111101;
16 'd9: result = 10 'b1111111110;
default: result = 'bx;
endcase

继续给出注意事项:

d) 每一个case分项的分支表达式的值必须互不相同,否则就会出现矛盾现象(对表达式的同一个值,有多种执行方案)。
e) 执行完case分项后的语句,则跳出该case语句结构,终止case语句的执行。
f) 在用case语句表达式进行比较的过程中,只有当信号的对应位的值能明确进行比较时,比较才能成功。因此要注意详细说明case分项的分支表达式的值。
g) case语句的所有表达式的值的位宽必须相等,只有这样控制表达式和分支表达式才能进行对应位的比较。一个经常犯的错误是用'bx, 'bz 来替代 n'bx, n'bz,这样写是不对的,因为信号x, z的缺省宽度是机器的字节宽度,通常是32位(此处 n 是case控制表达式的位宽)。


casez和casex:

下面先给出 case, casez, casex 的真值表:

对于那些分支表达式中存在不定值x和高阻值z位时,case语句提供了处理这种情况的手段。下面的两个例子介绍了处理x,z值位的case语句。(注意分支表达式中的z可以写成?)!

给出几个应用实例:

1)

case ( select[1:2] )
2 'b00: result = 0;
2 'b01: result = flaga;
2 'b0x,
2 'b0z: result = flaga? 'bx : 0;
2 'b10: result = flagb;
2 'bx0,
2 'bz0: result = flagb? 'bx : 0;
default: result = 'bx;
endcase

2)

case(sig)
1 'bz: $display("signal is floating");
1 'bx: $display("signal is unknown");
default: $display("signal is %b", sig);
endcase

Verilog HDL针对电路的特性提供了case语句的其它两种形式用来处理case语句比较过程中的不必考虑的情况( don't care condition )。其中casez语句用来处理不考虑高阻值z的比较过程,casex语句则将高阻值z和不定值都视为不必关心的情况。所谓不必关心的情况,即在表达式进行比较时,不将该位的状态考虑在内。这样在case语句表达式进行比较时,就可以灵活地设置以对信号的某些位进行比较。见下面的两个例子:

3)

reg[7:0] ir;
casez(ir)
8 'b1???????: instruction1(ir);
8 'b01??????: instruction2(ir);
8 'b00010???: instruction3(ir);
8 'b000001??: instruction4(ir);
endcase

4)

reg[7:0] r, mask;
mask = 8'bx0x0x0x0;
casex(r^mask)
8 'b001100xx: stat1;
8 'b1100xx00: stat2;
8 'b00xx0011: stat3;
8 'bxx001100: stat4;
endcase

【 Verilog HDL 】case, casez, casex 之干货总结相关推荐

  1. case/casez/casex 的区分与使用

    参考:http://www.cnblogs.com/poiu-elab/archive/2012/11/02/2751323.html 与  verilog数字系统设计基础 一般来说,使用最多的是CA ...

  2. case/casez/casex 区别与综合

    首先,一般性的常识是使用casez,强烈的建议不要使用casex,(虽然我没有这个常识).这是为啥呢?待续. 首先要明确的是'?'代表的不是don't care,而是'z'.这点一定要明确. 再有就是 ...

  3. Verilog中case,casex,casez的区别

    在case语句中,敏感表达式中与各项值之间的比较是一种全等比较,每一位都相同才认为匹配. Note: casez与casex语句是case语句的两种变体, 在写testbench时用到,属于不可综合的 ...

  4. case、casex、casez的区别

    一.case.casex.casez的区别 下表给出case.casex.casez的真值表: 在这里插入图片描述 在case语句中,敏感表达式中与各项值之间的比较是一种全等比较,每一位都相同才认为匹 ...

  5. Verilog HDL 基础

    Verilog HDL 基础 一.Verilog 的基本概念 1. 硬件描述语言HDL 1.1 特点: 描述电路的连接.描述电路的功能.在不同抽象级上描述电路. 描述电路的时序.表达具有并行性 1.2 ...

  6. 一周掌握FPGA Verilog HDL语法 day 4

    今天给大侠带来的是一周掌握FPGA Verilog HDL 语法,今天开启第四天. 一周掌握FPGA Verilog HDL语法 day 3 被平台综合了,如果想要看详细介绍的话,可以到公众号内部&q ...

  7. Verilog中case,casez,casex语句的用法

    文章目录 1.case的用法 2.casez/casex的用法 3.case语句的常数表达式 1.case的用法 case语句是一种多路选择结构语句,根据表达式(expression)中的值,对选项( ...

  8. (24)Verilog HDL条件语句:case语句

    (24)Verilog HDL条件语句:case语句 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL条件语句:case语句 5)结语 1.2 FP ...

  9. (126)Verilog HDL:设计一个复用器之Always case

    (126)Verilog HDL:设计一个复用器之Always case 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL:设计一个复用器之Alwa ...

最新文章

  1. (十二) 完整注释的代码摘录
  2. 速度提升2倍,超强悍CPU级骨干网络PP-LCNet
  3. 【杂谈】梦想与饼干,AI是你的谁?
  4. Linux Cobbler自动部署装机
  5. LeetCode 121:买卖股票的最佳时机 思考分析
  6. 2022图书出版行业营销白皮书
  7. 6-10 阶乘计算升级版(20 分)
  8. 麦克风失灵_iPhone7Plus手机麦克风失灵怎么办?请看解决方案
  9. 【es】es 的 cat API是如何加载的
  10. 一)关于java的认识:
  11. vs2017下载安装教程
  12. 如何在虚拟机中安装操作系统???
  13. vss服务器状态失败_vss问题解决办法
  14. 数据库开发工程师岗位职责and技能要求
  15. java正则表达式双引号_java正则表达式去掉双引号
  16. 族蚂建站课堂:域名相关基础内容
  17. word打开出现乱码要如何解决呢?
  18. codeforces 416E President's Path floyd+D(递)P(推)
  19. Bootstrap 徽章
  20. mybatisplus 自增主键失效,自增主键超大

热门文章

  1. 用户行为分析笔记(一):概述
  2. 数据库性能分析及调整一例
  3. Windows中如何正确认识和安装驱动程序
  4. 适合平面设计的linux版本,Qogir - 色彩鲜艳的Linux平面设计图标主题
  5. 抗侧力构件弹性位移如何计算_穿心棒法盖梁施工计算书(工字钢)
  6. 利用python读取txt文档的方法_利用Python读取txt文档的方法讲解
  7. 人工智能python框架_Python 与 AI 智能框架 - 随笔分类 - Hopesun - 博客园
  8. python3运算符和表达式实验报告_对Python3 * 和 ** 运算符详解
  9. 虚拟机win2003安装mysql教程_CentOS7.2虚拟机上安装MySQL 5.6.32的教程
  10. java mysql insert_MySQL中INSERT的一般用法