Verilog语言之结构语句:if、case
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相关推荐
- verilog 中if....else语句以及case语句详细理解
1.if else: (1)if(表达式)语句: (2)if(表达式) 语句一else语句二 (3)if(表达式1) 语句一:else if(表达式2) 语句2:else if(表达式3) 语句3:e ...
- Verilog中if- else if语句和case语句用法:
一.if语句: 1.两种情况 if(条件语句)begin-- end else begin-- end 2.多种情况 if(条件语句)begin-- end else if(条件语句)begin-- ...
- verilog case语句_浅谈Design Compiler -- Verilog语言结构到门级的映射
昨天的文章中,我们了解到Design Compiler(DC)作为Synopsys公司开发的一款用于电路综合的EDA工具,在全球数字电路市场去得了巨大的成功,它的设计初衷是将用Verilog HDL语 ...
- Verilog语言语句介绍
Verilog语言语句介绍 结构语句 initial语句 always语句 赋值语句 阻塞赋值 非阻塞赋值 使用方法 条件语句 if_else语句 case语句 结构语句 共有两个重要的结构语句 in ...
- C语言分支结构的作用,C语言丨用switch语句实现多分支选择结构
C语言永远不会过时 其实学编程关键是学习其思想,如果你精通了一门,再去学其他的时候也很容易上手.C不会过时的,尤其是在unix.linux操作平台上,学好C是必须的. C跟C++在很多方面也是兼容的, ...
- c语言选择结构的语句有,选择结构
if else选择程序结构用于判断给定的条件,根据判断条件的成立与否来控制程序的流程.选择结构有单选择.双选择和多选择3种形式 单选择结构用if语句实现: 形式一:if(表达式) /*若条件成立则实行 ...
- c语言 判断一个图是否全连通_C语言:程序运行流程图与顺序结构语句
程序运行流程图 流程图是描述问题处理步骤的一种常用图形工具,它是由一些图框和流程线组成的.流程图描述问题的处理步骤,形象直观,便于阅读.画流程图时必须按照功能选用相应的流程图符号,常用的流程图符号如下 ...
- (24)Verilog HDL条件语句:case语句
(24)Verilog HDL条件语句:case语句 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL条件语句:case语句 5)结语 1.2 FP ...
- C语言中的选择结构语句
C语言中,选择结构语句可分为为if语句和switch语句 if语句的三种形式: if 语句 单分支结构 if...else 语句 双分支结构 if...else if...else语句 ...
最新文章
- iptables mangle表研究(未完)
- 【正一专栏】曼城攻击力惊人露出冠军相
- android4.3 Bluetooth(le)分析之startLeScan分析
- 华硕vm510l拆电池图解_图解说设备:凯斯CX80C你会买吗?
- script中的event和for的意思
- 【人生】不管你挣多少, 钱永远是问题
- 人生苦短之我用Python篇(socket编程)
- 数字电子技术基础第5版笔记和课后习题答案 阎石
- mockserver使用
- hmdb51数据集,视频+标签
- react-native0.66==windows环境搭建、demo测试
- DSP28335 eCAP 测频
- 程序控制结构-飞机超速报警系统
- layui表单提交时出现一闪而过的验证信息的原因
- 我为什么要立刻放弃React而使用Vue?
- 简单实现通讯录中文名字按拼音首字母排序
- Listen1使用教程
- 【leetcode题解——动态规划之完全背包】518.零钱兑换II(python版本详解+表格+dp五部曲)
- YII Framework学习教程-YII的Model-开发规范-路径别名-命名空间-2011-11-22
- 基础护理学类毕业论文文献都有哪些?