if语句

一个if语句通常可以创造出一个2选1选择器,当条件为真时选择一个输入,为假时选择另一个。

always @(*) beginif (condition) beginout = x;endelse beginout = y;end
end

这等同于连续性赋值语句的条件运算符:

assign out = (condition) ? x : y;

然而if语句也增加了更多制造错误方式,只有当out总是被赋值时电路才是组合型的。~https://hdlbits.01xz.net/wiki/Always_if


一个普遍的错误来源:如何避免制造锁存器

当我们设计一个电路时,首先要考虑的应该是电路:

  • 我想要一个逻辑门
  • 我想要一个三输入三输出的组合逻辑
  • 我想要一个有一系列触发器的组合逻辑电路

一定不要先写代码,然后希望由代码产生一个适当的电路。

  • If (cpu_overheated) then shut_off_computer = 1;
  • If (~arrived) then keep_driving = ~gas_tank_empty;

语法正确的代码不一定会产生一个合理的电路(组合逻辑+触发器)。通常的原因是:我们需要考虑在我们指定的情况之外发生了什么?Verilog的回答是:保持输出不变。

保持输出不变这个行为意味着当前状态需要被记住,因此就产生了一个锁存器。组合逻辑(比如逻辑门)不能记住任何状态。注意这条信息:Warning (10240): ... inferring latch(es),除非是我们有计划的产生一个锁存器,它通常意味着一个bug。组合电路必须在所有条件下都给输出信号赋一个值,这也就意味着我们必须写else从句,或者是在这个always过程块的第一句也就是case之前,就给输出信号提前赋一个默认值。case语句中同样要注意这个问题。

always @(*) beginup = 1'b0; down = 1'b0; left = 1'b0; right = 1'b0;case (scancode)... // Set to 1 as necessary.endcase
end

https://hdlbits.01xz.net/wiki/Always_if2


case语句

在Verilog中case语句等同于一系列的if-elseif-else语句,在这些语句中把一个条件表达式和其他的相比较。它的语法和功能不同于c语言中的switch。

always @(*) begin     // This is a combinational circuitcase (in)1'b1: begin out = 1'b1;  // begin-end if >1 statementend1'b0: out = 1'b0;default: out = 1'bx;endcase
end
  • case语句以case开始,并且每一个case可选项以冒号:结束。
  • 每个case选项可以准确地执行一条语句。这意味着如果你需要执行多条语句,那么你必须使用begin...end。
  • 重复(和部分重复)case选项是被允许的,将会执行第一个匹配的case选项。

casez、casex

在优先编码器中经常会用到casez,case语句的行为就像是按顺序检查每一项(事实上,更像一个巨大的真值表),一旦第一项符合就不会再执行后面的可选项了,因此为了编码时缩短代码和编码后方便阅读,可选项可以部分重复。

always @(*) begincasez (in[3:0])4'bzzz1: out = 0;   // in[3:1] can be anything4'bzz1z: out = 1;4'bz1zz: out = 2;4'b1???: out = 3;default: out = 0;endcase
end
  • casex和casez类似,它把x和z都会当做don't care,其实casex并没有什么卵用,casez就足够用了。
  • 问号?是z的同义词,因此 2'bz0 和 2'b?0 是一样的。

https://hdlbits.01xz.net/wiki/Always_casez

Verilog语言之结构语句:if、case相关推荐

  1. verilog 中if....else语句以及case语句详细理解

    1.if else: (1)if(表达式)语句: (2)if(表达式) 语句一else语句二 (3)if(表达式1) 语句一:else if(表达式2) 语句2:else if(表达式3) 语句3:e ...

  2. Verilog中if- else if语句和case语句用法:

    一.if语句: 1.两种情况 if(条件语句)begin-- end else begin-- end 2.多种情况 if(条件语句)begin-- end else if(条件语句)begin-- ...

  3. verilog case语句_浅谈Design Compiler -- Verilog语言结构到门级的映射

    昨天的文章中,我们了解到Design Compiler(DC)作为Synopsys公司开发的一款用于电路综合的EDA工具,在全球数字电路市场去得了巨大的成功,它的设计初衷是将用Verilog HDL语 ...

  4. Verilog语言语句介绍

    Verilog语言语句介绍 结构语句 initial语句 always语句 赋值语句 阻塞赋值 非阻塞赋值 使用方法 条件语句 if_else语句 case语句 结构语句 共有两个重要的结构语句 in ...

  5. C语言分支结构的作用,C语言丨用switch语句实现多分支选择结构

    C语言永远不会过时 其实学编程关键是学习其思想,如果你精通了一门,再去学其他的时候也很容易上手.C不会过时的,尤其是在unix.linux操作平台上,学好C是必须的. C跟C++在很多方面也是兼容的, ...

  6. c语言选择结构的语句有,选择结构

    if else选择程序结构用于判断给定的条件,根据判断条件的成立与否来控制程序的流程.选择结构有单选择.双选择和多选择3种形式 单选择结构用if语句实现: 形式一:if(表达式) /*若条件成立则实行 ...

  7. c语言 判断一个图是否全连通_C语言:程序运行流程图与顺序结构语句

    程序运行流程图 流程图是描述问题处理步骤的一种常用图形工具,它是由一些图框和流程线组成的.流程图描述问题的处理步骤,形象直观,便于阅读.画流程图时必须按照功能选用相应的流程图符号,常用的流程图符号如下 ...

  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. C语言中的选择结构语句

    C语言中,选择结构语句可分为为if语句和switch语句 if语句的三种形式: if 语句   单分支结构 if...else 语句   双分支结构 if...else  if...else语句    ...

最新文章

  1. iptables mangle表研究(未完)
  2. 【正一专栏】曼城攻击力惊人露出冠军相
  3. android4.3 Bluetooth(le)分析之startLeScan分析
  4. 华硕vm510l拆电池图解_图解说设备:凯斯CX80C你会买吗?
  5. script中的event和for的意思
  6. 【人生】不管你挣多少, 钱永远是问题
  7. 人生苦短之我用Python篇(socket编程)
  8. 数字电子技术基础第5版笔记和课后习题答案 阎石
  9. mockserver使用
  10. hmdb51数据集,视频+标签
  11. react-native0.66==windows环境搭建、demo测试
  12. DSP28335 eCAP 测频
  13. 程序控制结构-飞机超速报警系统
  14. layui表单提交时出现一闪而过的验证信息的原因
  15. 我为什么要立刻放弃React而使用Vue?
  16. 简单实现通讯录中文名字按拼音首字母排序
  17. Listen1使用教程
  18. 【leetcode题解——动态规划之完全背包】518.零钱兑换II(python版本详解+表格+dp五部曲)
  19. YII Framework学习教程-YII的Model-开发规范-路径别名-命名空间-2011-11-22
  20. 基础护理学类毕业论文文献都有哪些?

热门文章

  1. POI 颜色Color
  2. android 11 antutu AID64 等检测软件电池容量不匹配
  3. 江南情节——紫砂壶品茶
  4. SNMP 网络协议介绍
  5. 银保监机构保险许可证数据(2007-2022年)
  6. ajax请求有多少种写法,Ajax 请求的三种写法
  7. 【机器学习】李宏毅 - 02 回归
  8. 已安装各个模块,程序仍报错:ModuleNotFoundError: No module named 'numpy'
  9. [Python]使用QRCode生成彩色二维码
  10. 真实测评vivoY30和红米k30哪个好-vivoY30和红米k30区别