数字电路设计之casez,case,casex的用法
来源:互联网 发布:逻辑数据独立性是指 编辑:程序博客网 时间:2024/06/05 06:25
case:在case语句中,敏感表达式与各项值之间的比较,是一种全等比较。每一位都必须相同才认为匹配。
casez:这种也可用于优先级电路。
举个栗子:
module no13(out,a,b,c,d,select );input wire a,b,c,d;input wire [3:0]select;output reg out;always@(a or b or c or d or select)begincasez(select)4'b???1: out = a;4'b??1?: out = b; 4'b?1??: out = c; 4'b1???: out = d; default: out = 1'b0;endcaseendendmodule
仿真代码:
module tb;// Inputsreg a;reg b;reg c;reg d;reg [3:0] select;// Outputswire out;// Instantiate the Unit Under Test (UUT)no13 uut (.out(out), .a(a), .b(b), .c(c), .d(d), .select(select));initial begin// Initialize Inputsa = 1;b = 0;c = 1;d = 0;select = 0;// Wait 100 ns for global reset to finish#100; select = 1; #100; select = 4'bzz10;#100;select = 4'bxx10;#100; select = 4'b1zzz;// Add stimulus hereend endmodule仿真结果:
我们可以发现只要是select[0]=1,不管别的位怎么样,它就是第一种情况。这个casez是顺序判断的。
casez和casex:casez与casex语句是case语句的两种变体, 在写testbench时用到,属于不可综合的语句。
1在casez语句中,如果分支表达式某些位的值为高阻z,那么对这些位的比较就会忽略,不予考虑,而只关注其他位的比较结果。
2 在casex语句中,则把这种处理方式进一步扩展到对x的处理,即如果比较双方有一方的某些位的值是z或x,那么这些位的比较就不予考虑。
比如:
casez (sel)3’b001: y=a+b;3’b010: y=a-b;3’b011: y=a&b;3’b100: y=a^b;default: y=3’b000;
当sel=01z的时候,由于最低位出现z,那么在比较判别时不考虑最低位,只与源比较前两位,那么出现与010,011均匹配的情况,此时由于case语句是按顺序检查的,所以先认为与010匹配,输出y=a-b。
还有我有见过使用casez来实现优先级电路的实现:
module priority_casez(input wire [3:0]a, output reg [3:0]y);always@(*) begin casez(a) 4'b1???: y = 4'b1000; 4'b01??: y = 4'b0100; 4'b001?: y = 4'b0010; 4'b0001: y = 4'b0001; default: y = 4'b0000;endendmodule
问题:
(1)处当select=4'bzzzz时,是满足4'b???1吗?
(2)处当select=4'bxx11时,应该同时可以满足两项,可是都只赋值了第一项,是只要有一个条件满足就不再判断吗?它是顺序执行的吗?从第一个条件开始逐个判断的吗?
(3)如果改casez为casex,是不是在(1)上一句out=00?
答案:
(1) 在casez语句, 当表达式的值为z时, 满足任何条件, 因此, select=4'bzzzz时, 满足4'b???1
(2) 在case, casez, casex语句中, 不同条件表达式可以彼此覆盖, 此时只有最上面一条语句被执行. 当select=4'bxx11时, 满足第一个条件, 4'b???1, 因此输出, 此时相当于优先编码器
(3) 在casex语句中, 当表达式的值为z,x时, 满足任何条件, 因此, select=4'bxxxx时, 满足4'b???1, 在20处输出out=00
不推荐使用casex语句, 因为x状态为仿真的初值, 容易引起误会. 另外, 建议无关项用?表示, 而不是x或者z.
参考资料:
http://www.xuebuyuan.com/1053057.html
http://www.360doc.com/content/11/0527/09/5735822_119706829.shtml
http://wenku.baidu.com/link?url=EvKxvV5kuchxnHTYPKAJx-8rjvXae91iR3BYWJ0l-WOK7yg3ZVmExJgb0dFIaQn3vOqpJS9Jkc0kfVjTPae-7gU23KpDjAnB4bgh0pnvG_O
- 数字电路设计之casez,case,casex的用法
- verilog -- case、casez、casex
- case/casez/casex
- case/casez/casex 区别与综合
- Verilog语法有关casez和casex的分析
- 数字电路设计之堆栈的verilog实现
- 数字电路设计之逻辑综合的优化
- 数字电路设计之function的使用
- 数字电路设计之加法器的实现
- 数字电路设计之简单的滤波算法
- 数字电路设计之简单的滤波算法
- 数字电路设计之数字电路工程师面试集锦
- 数字电路设计之Spice仿真
- 数字电路设计之VGA的字母显示的verilog实现
- 数字电路设计之同步状态机的verilog HDL实现
- 数字电路设计之各种触发器的verilog实现
- 数字电路设计之奇偶分频的verilog实现
- 数字电路设计之同步电路的一些经验
- Java字节流与字符流的区别
- 书写的好处
- Spring 系列: Spring 框架简介
- 堆和栈的区别(转过无数次的文章)
- Android学习笔记(四)
- 数字电路设计之casez,case,casex的用法
- linux中ISO文件运用
- opengl 入门学习 随笔五
- java中system.exit(0)和system.exit(1)有什么区别
- 实验五
- IE8 新特性分析:IE8的稳定性源自何处
- 一位40年经验的癌症专家:不要再上癌症的当
- 循环给Label控件赋值+计算一个月的天数+转换为中文的星期格式
- JAVA学习笔记(复习)-----2、 JAVA基础(一)