"); //-->
case与if…else优化
两段代码, EX1使用if…else语句,EX2使用case语句,它们综合的结果有多大差异呢?最终布局布线后的结构又有多大差异呢?
EX1:
input clk;
input rst_n;
input[3:0] data;
output[2:0] add;
reg[2:0] add;
always @ (posedge clk) begin
if(!rst_n) begin
add <= 0;
end
else begin
if(data<4) add <= 1;
else if(data<8) add <= 2;
else if(data<12) add <= 3;
else add <= 4;
end
end
EX2:
input clk;
input rst_n;
input[3:0] data;
output[2:0] add;
reg[2:0] add;
always @ (posedge clk) begin
if(!rst_n) begin
add <= 0;
end
else begin
case(data)
0,1,2,3: add <= 1;
4,5,6,7: add <= 2;
8,9,10,11: add <= 3;
12,13,14,15: add <= 4;
default: ;
endcase
end
end
先看看综合后的RTL视图。

If…else语句综合的RTL视图

case语句综合的RTL视图
单从RTL视图来看,二者综合后的结果是有明显区别的。If…else趋向于有优先级的结构,而case则是并行的结构。
但是,我们再往下看。它们所占用的资源情况:
If else结构的资源占用:
Resource Usage
Total logic elements 3
-- Combinational with no register 0
-- Register only 0
-- Combinational with a register 3
Logic element usage by number of LUT inputs
-- 4 input functions 0
-- 3 input functions 2
-- 2 input functions 1
-- 1 input functions 0
-- 0 input functions 0
Logic elements by mode
-- normal mode 3
-- arithmetic mode 0
-- qfbk mode 0
-- register cascade mode 0
-- synchronous clear/load mode 0
-- asynchronous clear/load mode 0
Total registers 3
I/O pins 9
Maximum fan-out node rst_n
Maximum fan-out 3
Total fan-out 14
Average fan-out 1.17
case结构的资源占用:
Resource Usage
Total logic elements 3
-- Combinational with no register 0
-- Register only 0
-- Combinational with a register 3
Logic element usage by number of LUT inputs
-- 4 input functions 0
-- 3 input functions 2
-- 2 input functions 1
-- 1 input functions 0
-- 0 input functions 0
Logic elements by mode
-- normal mode 3
-- arithmetic mode 0
-- qfbk mode 0
-- register cascade mode 0
-- synchronous clear/load mode 0
-- asynchronous clear/load mode 0
Total registers 3
I/O pins 9
Maximum fan-out node data[2]
Maximum fan-out 3
Total fan-out 14
Average fan-out 1.17
二者资源占用的情况基本是完全一样,连平均扇出也一致。
再看他们的Technology Map Viewer:

If…else的Technology Map Viewer

Case的Technology Map Viewer
二者完全的一致,所以,可以明确的说,在这个例子中,If…else和case语句最终的实现都是并行的,而且完全一致。
记得特权过去也曾认为If…else和case综合实现的结果是不一样的。也曾就这个实例写过博文,分析的头头是道。但是现在的结果似乎推翻了这样一种思想,过去使用的是Quartus II 7.1i做这个测试,现在使用了9.1版本,8.1的也测试了,也许If…else和case语句的优化随着软件的升级,已经不再简单的交给用户的代码来决定,而是默认优化了。就像状态机中讨论独热码好还是格雷码好一样,其实这个优化已经成为了软件选项了。
而综合的RTL视图到Technology Map Viewer其实也还是有差距的,它们之间的优化就是映射所要干的活。
总之,If…else和case语句实现的结构到底是怎样还是要看工具,具体问题具体分析。不能片面的强调If…else和case语句谁好谁坏。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
单片机系统的数码管显示驱动和键盘扫描
RF2175 400MHz线性放大器引脚
大尺度抽象化竞赛启幕,数据中心迎来全新变革
智平方获超10亿B轮融资,跻身百亿阵营
“hanshuyujifen2”的uCGUI移植成功演示视频
芯片清洗:洁净标准的全新挑战
[讨论]如何在WindML 2.0 下移植FreeType字体
赛灵思平台开发高级副总裁 Victor Peng 畅谈 Vivado
单片机系统的动态加密技术
用单片机配置FPGA选用哪种方案好?
“hanshuyujifen2 ”的串口控制输出方波频率视频
雷诺签署股权收购协议 收购沃尔沃45%、达飞10%股权 实现Flexis全资控股
开放式耳机超越形态差异化,迈入价值延伸新纪元
哪位大侠驱动过夏普的lcd屏?
化合物半导体衬底市场年复合增长率达 14%
广州联智推出系列arm9开发板ep9301,ep9302,ep9312,ep9315
RF2155构成的915MHz功率放大器应用电路图
RF2162 900MHz线性放大器引脚
何小鹏定调 2026:今年将量产机器人与飞行汽车
RF2162构成的美国TDMA应用电路图
千寻智能完成近20亿融资 估值突破百亿
泛华测控左毅畅谈军用测试需求
前荣耀CMO郭锐加盟智界汽车任CEO
TI C665x 概览视频与专家咨询系列短片
单片机温度控制系统在电阻炉中的应用
单片机系统常用软件抗干扰措施
单片机系统的电磁兼容性设计
[推荐]深圳翔源pcb抄板,电子产品克隆开发设计
RF2162构成的美国CDMA应用电路图
春节车市“购”“租”两旺 多重政策激活需求,新能源租车占比首破四成