case/casez/casex
来源:互联网 发布:世界局势知乎 编辑:程序博客网 时间:2024/06/05 10:11
还是来自一篇paper 分清楚case/casez/casex 在simulation/synthesis到底有什么不同
我基本就是照着翻译下来,基本没啥我总结的东西,因为消化的不好
首先,一般性的常识是使用casez,强烈的建议不要使用casex,(虽然我没有这个常识)。这是为啥呢?待续。
首先要明确的是'?'代表的不是don't care,而是'z'。这点一定要明确。
再有就是case/casez/casex其实都是可综合的,这一点也要记住。
好,再说区别
casez treats 'z' as dont care
casex treats 'z' & 'x' as dont care
这就是区别,下面来具体解释一下
一、simulation difference
1、先看case
不同的sel,对应
sel y case item
00 a 00
11 g default
xx g default
x0 c x0
1z f 1?
z1 g default
为啥呢?就是因为case会认出每种情况,1/0/z/x,所以就得到了上面的结果
2. casez,就是会把z/?匹配成任意,也会把任意匹配成z/?的。
对应的
sel y case item
00 a 00
11 f 1?
xx g default
x0 c x0 (would have matched with z0(item 5) if item 3 is not present.)
1z d 1x (would have matched with z0(item 5) & 1?(item 6) also.)
z1 b 01 (would have matched with 1?(item 6) also.)
首先,case的描述,匹配都是从上到下进行的,如果使用了casez,看上面的casez的列表,只要输入有z/?的话,就能和任意匹配,只要列表的index项有z/?,就能匹配任意项,再对照上面的例子,就明了了。
3、casex呢,再来
结果呢?
还是一样的道理,casex也是从上到下匹配,当出现x/z/?的输入的时候,都不会care,只管不是大大情况来匹配,上面的解释也是很容易看懂。就不多说了。
二、synthesis difference
综合的时候又是另一番景象了,因为综合工具其实都不会管你什么x/z/?之类的,他能认识什么呢?让我们再来测试一下,case/casez/casex不同写法的综合结果,例子都是同样的
1、例子1
2、例子2
通过上面两个例子我们得到的结论是:
1. Case statement will not consider for synthesis, the items containing x or z.
2. Casez and Casex will give the same output after synthesis, treating both x, z in case items as dont cares.
就是说你的case(不是casez/casex的时候)的index列表里面的x和z,都被综合工具认为是不可达到的状态就被去掉了。
casez和casex里面的x/z都被认为是don't care,所以综合出的电路会是一致的。
三、simulation vs synthesis
例子
再看simulation与synthesis的结果
+---+-----------------------------------+-----------------------------------+| | casez | casex |
|sel| Pre-synthesis Post-synthesis | Pre-synthesis Post-synthesis |
+---+-----------------------------------+-----------------------------------+
|xx | mux_in[3] x | mux_in[0] x |
|1x | mux_in[2] mux_in[2] | mux_in[2] mux_in[2] |
|0x | mux_in[3] x | mux_in[0] x |
|zz | mux_in[0] x | mux_in[0] x |
|1z | mux_in[2] mux_in[2] | mux_in[2] mux_in[2] |
|0z | mux_in[0] x | mux_in[0] x |
+---+-----------------------------------+-----------------------------------+
作者此时说了两句话就是Another interesting, very important observation is that when ever there is a mismatch, post-synthesis result will become x. During RTL simulation if sel becomes xx, casez executes default statement(which is the intended behaviour) but casex executes case item1 (which is not the intended behaviour), clearly a mismatch.
看上面的表这就能说明问题了,不管用casez还是casex,simulation和synthesis的结果都会有出入的,所以在写代码的时候,考虑到综合,casez与casex都是完全等同的了,就不必要非得纠结写哪个比较好了。
或许casez有那么一点好处,能体现在
这样的代码,如果用case写的话
就是这点有点罢了~
四、summary
2、casez和casex综合的结果是一致的。
3、casez稍好用一些,因为它可以用来代表don't care的值
4、最重要的一点就是,casez和casex其实没有孰优孰劣
就这样,以后我用的时候没准会更多的用casez,case其实也是好东西,最好弄明白了自己真正要表达的意思是什么再动手写代码,还要深刻理解case/casez/casex到底起到的什么作用~
- verilog -- case、casez、casex
- case/casez/casex
- case/casez/casex 区别与综合
- 数字电路设计之casez,case,casex的用法
- Verilog语法有关casez和casex的分析
- case
- CASE
- case
- case
- Verilog一个小程序:采用casez语句描述数据选择器
- case用法
- SQL CASE
- Sql case
- select case
- Where Case
- test case
- Cold Case
- Cold Case
- ORACLE 12C新特性——CDB与PDB
- springboot 高版本后继续使用log4j的解决方法
- (待完善)Ubuntu 16.04下1080Ti显卡的安装方式
- 标准库类型string
- 17ICPC南宁 G I 计算几何+暴力
- case/casez/casex
- 使用Python3将manifest.xml转为excel供查看
- Android Studio-Didn't find class XXX on path: DexPathList [zip file "/data/app/packagename/base.apk]
- LeetCode 23:Merge k Sorted Lists 解题与思考
- 西瓜书读书笔记(一)
- 阿里云centos7 下安装svn服务器教程笔记
- day11-jQuery事件
- linux 内核驱动--Platform Device和Platform_driver注册过程
- 高级C语言教程