本帖最后由 Timme 于 2013-7-16 23:56 编辑
引经据典一大通,不如用Synplify 2013来试试综合结果吧。
相信理解不了if-else和case区别的人(不考虑验证,就是完全没有区别),抓破脑袋都看不懂这个综合结果。。。
(1)用if-else写一个并行MUX
- 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
- 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) |