转载 关于case语句的优先级
对于这样的组合逻辑电路 always@(X) case(X) X1: X2: …… endcase 如果分支项包含变量X的所有取值情况,并且互相不重复,那么这样的情况,其实没有必要使用综合指令。 (一)“//synthesis parallel_case” 有一些书在介绍case语句时(例如《verilog HDL综合实用教程》)说“case语句的verilog HDL语义表明了选取case分支的优先顺序。case表达式首先与第一个分支项进行比较,依次类推……”但在Quartus中的实验表明, 当分支项包含变量X的所有取值情况,并且互相不重复时,case语句的各个分支选项的优先级是一样的,并且这时对case使用综合指令“//synthesis parallel_case”也不会起作用。 若某两个分支选项相互重叠,这时,case所暗含的优先级顺序就起作用了,在前面的分支项优先级高,并用在编译时Quartus会出现这样的警告: Warning (10935): Verilog HDL Casex/Casez warning at ddd.v(380): casex/casez item expression overlaps with a previous casex/casez item expression 提醒你说分支项重叠了。 在这种情况下,若不使用“//synthesis parallel_case”指令,则重叠的分支项,将会按照“前面的分支项优先级高”的原则被综合。 若使用“//synthesis parallel_case”指令,则我们可以划分几个子集:A1(属于X1,但不属于其它),A2(属于X2,但不属于其它),依此类推,对子集A1,严格按照X1:下的语句执行,对子集A2,严格按照X2:下的语句执行,依此类推。对于其它不能划到任何子集的情况,即重叠部分,则被视为不可能出现的情况,或者说的不关心的情况,对于这种情况,怎么综合有利于简化电路就怎么综合。 所以“//synthesis parallel_case”在这里对于简化电路就很有用了,只要设计者确定重叠的情况不会出现,就可以利用这条指令来简化电路。 这时Quartus会给出警告: Warning (10935): Verilog HDL Casex/Casez warning at Verilog1.v(15): casex/casez item expression overlaps with a previous casex/casez item expression Warning (10935): Verilog HDL Casex/Casez warning at Verilog1.v(16): casex/casez item expression overlaps with a previous casex/casez item expression Warning (10209): Verilog HDL Case Statement warning at Verilog1.v(13): honored parallel_case synthesis attribute - differences between design synthesis and simulation may occur (二)“//synthesis full_case” 在以上的组合逻辑电路中,如果分支项没有包含所有的情况,则会综合成触发器,那么你可以用default来避免这种情况,对于不关心的情况,随便赋一个值就好了,但是这种随意的赋值付出的代价就是逻辑资源。若用 “//synthesis full_case”则,综合器会自动对没列出的情况赋值,并且它赋的值有利于减少逻辑资源的消耗。至于原因嘛,我觉得可以用化简卡诺图的例子来说明,对于我们不关心的情况,就给它一个X好了,在化简的时候它既可以作为0,又可以作为1.显然比你给它一个0或者1要好点。这就是我们为什么要用“//synthesis full_case”的原因。
转至论坛你的位置:EETOP 赛灵思(Xilinx) 社区 >> 论坛 >> 交流讨论 >> 查看帖子
verilog中if else和case语句有什么区别?
发布: 2013-4-26 13:45 | 作者: MohanGrace | 来源: EETOP 赛灵思(Xilinx) 社区
QUOTE:
回复 txwm8905 不知道你是从哪看来的,你可以看一下verilog HDL综合 使用教程,孙海平译的2.14.5 ... HADIST 发表于 2013-7-14 20:26
你引用这些山寨教材有什么说服力,EDA先锋工作室的FPGA教材还说case是并行的呢。 Verilog 2001标准(IEEE 1364-2001)第132页:
CODE:
The case item expressions shall be evaluated and compared in the exact order in which they are given.
指出了case是串行有优先级。又:
CODE:
Apart from syntax, the case statement differs from the multiway if-else-if construct in two important ways: a) The conditional expressions in the if-else-if construct are more general than comparing one expression with several others, as in the case statement. b) The case statement provides a definitive result when there are x and z values in an expression.
a)是废话。b)指出了case是四态对比。除此之外和if-else没有差别。 又,根据ARM的“Verilog X Bugs”(http://www.arm.com/files/pdf/Verilog_X_Bugs.pdf) 第7页:
CODE:
Important things to note about case statements are listed below (which may help to dispel a few myths): · a Verilog case statement is priority encoded (just like a nested if expression) · the case-expression is effectively compared to the case-item with a triple -equal (===) case-equality
重复了以上说明。 这种1+1=2级别的东西是真心不想在这里啰嗦。。。标准不读,paper不看,只会道听途说,真是。。。
CODE:
module parallel_if(input a,b,c,input [2:0] sel,output reg y); always@(*) if(sel==3'b001) y=a; else if(sel==3'b010) y=b; else if(sel==3'b100) y=c; else y=1'bx; endmodule
RTL图,怎么样,用if-else也可以写出并行MUX吧?
(2)用case写一个串行MUX
CODE:
module serial_case(input a,b,c,input [2:0] sel,output reg y); always@(*) case(1'b1) sel[0]:y=a; sel[1]:y=b; sel[2]:y=c; default:y=1'bx; endcase endmodule
RTL图,怎么样,用case也可以写出串行MUX吧?
PS:添加parallel_case属性就可以综合成第一个图的结果,见证奇迹的时刻喔 不信的,请自行用Synplify 2013试验。(用Precision Synthesis也可以,但用Quartus/XST可能看不到上面的结果,因为这两个例子对综合工具的Elaborate能力要求较高。。。是不是也应该把这个例子加入QoR Benchmark)
QUOTE:
引经据典一大通,不如用Synplify 2013来试试综合结果吧。 相信理解不了if-else和case区别的人(不考虑验 ... Timme 发表于 2013-7-16 22:35
具体还是和代码怎么写的有关系,如果是one_hot的编码方式,会综合成并行电路,就前面的if_else 例子一样。
转载 关于case语句的优先级的更多相关文章
- 关于VHDL中case语句多执行语句的书写方式(转载stackoverflow.com并做翻译汇总)
很多国内的教材对于case语句的讲解非常单一,比如: 1 [标号:]CASE 多值表达式 IS 2 WHEN 选择值 => 被赋值变量 <=赋值变量: 3 WHEN 选择值 => 被 ...
- SQL中的IF ELSE(CASE语句的使用)(转载)
大家对IF ELSE语句可能都很熟悉,它是用来对过程进行控制的.在SQL的世界中CASE语句语句有类似的效果.下面简单的介绍CASE语句的用法.考虑下面的情况,假设有个user表,定义如下: CREA ...
- if语句和case语句用法展示
if语句和case语句用法展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.单分支if条件语句 1>.语法格式一 if [ 条件判断式 ];then 源代码 fi 2& ...
- SQL中的IF ELSE(CASE语句的使用)
大家对IF ELSE语句可能都很熟悉,它是用来对过程进行控制的.在SQL的世界中CASE语句语句有类似的效果.下面简单的介绍CASE语句的用法.考虑下面的情况,假设有个user表,定义如下: CREA ...
- 【shell】shell编程(三)-if,select,case语句
通过前两篇文章,我们掌握了shell的一些基本写法和变量的使用,以及基本数据类型的运算.那么,本次就将要学习shell的结构化命令了,也就是我们其它编程语言中的条件选择语句及循环语句. 不过,在学习s ...
- 逆向知识第九讲,switch case语句在汇编中表达的方式
一丶Switch Case语句在汇编中的第一种表达方式 (引导性跳转表) 第一种表达方式生成条件: case 个数偏少,那么汇编中将会生成引导性的跳转表,会做出 if else的情况(类似,但还是能分 ...
- sh4.case语句
case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构.case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: ...
- 为什么说在使用多条件判断时switch case语句比if语句效率高?
在学习JavaScript中的if控制语句和switch控制语句的时候,提到了使用多条件判断时switch case语句比if语句效率高,但是身为小白的我并没有在代码中看出有什么不同.去度娘找了半个小 ...
- 在 case 语句中使用字符串-转
http://www.cnblogs.com/del/archive/2008/07/08/1237856.html 非常遗憾 Delphi 的 case 语句不支持字符串, 但我觉得这也可能是基于效 ...
随机推荐
- 解析库之re、beautifulsoup、pyquery
BeatifulSoup模块 一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Be ...
- jQuery多层级垂直手风琴菜单
在线演示 本地下载
- 无缝走A的终极技巧:学会了你也是走A怪
ADC重点之中:改键铸造更强走A! 我们先来欣赏一波来自世界顶尖ADC大师兄Doublelift的教科书般的走A. 他使用的金克丝在空蓝的情况下,凭借娴熟的走A技巧,拿下五杀. 关于走A,其实它有着一 ...
- [翻译]在gulp构建工具中使用PostCSS
前言 PostCSS已经在一段时间内迅速普及,如果你还不知道PostCSS或还没有使用它,我建议你看一下之前的一篇介绍文章<PostCSS简介>,其中介绍了使用PostCSS的基本方法,包 ...
- Scala的两种变量
Scala有两种变量,val和var.val类似于Java的final变量,一旦初始化了,就不能再赋值了.var如同Java中的非final变量,可以在生命周期内被多次赋值.
- maven更换下载镜像源-解决下载慢问题
Maven是当前流行的项目管理工具,但官方的库在国外经常连不上,连上也下载速度很慢.国内oschina的maven服务器很早之前就关了.今天发现阿里云的一个中央仓库,亲测可用. 1 <mirro ...
- Robocopy 一个文件后关机
robocopy c:\folder \\192.168.1.10\shared somefile.dat & shutdown -s -t 30 -f 此例子复制c:\folder\some ...
- hdu 5979 Convex(水,求面积)
Convex Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- zzuli 2179 最短路
2179: 紧急营救 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 89 Solved: 9 SubmitStatusWeb Board Descri ...
- C#-foreach与yield
(转自:http://www.jb51.net/article/34627.htm) 1. foreach语句 C#编译器会把foreach语句转换为IEnumerable接口的方法和属性. fore ...