专栏中心

EEPW首页 > 专栏 > case与if…else优化

case与if…else优化

发布人:0750long 时间:2009-07-22 来源:工程师 发布文章

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语句谁好谁坏。

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

大尺度抽象化竞赛启幕,数据中心迎来全新变革

智平方获超10亿B轮融资,跻身百亿阵营

“hanshuyujifen2”的uCGUI移植成功演示视频

视频 2012-05-04

芯片清洗:洁净标准的全新挑战

赛灵思平台开发高级副总裁 Victor Peng 畅谈 Vivado

视频 2012-05-03

单片机系统的动态加密技术

“hanshuyujifen2 ”的串口控制输出方波频率视频

视频 2012-05-04

雷诺签署股权收购协议 收购沃尔沃45%、达飞10%股权 实现Flexis全资控股

汽车电子 2026-02-25

开放式耳机超越形态差异化,迈入价值延伸新纪元

化合物半导体衬底市场年复合增长率达 14%

何小鹏定调 2026:今年将量产机器人与飞行汽车

千寻智能完成近20亿融资 估值突破百亿

泛华测控左毅畅谈军用测试需求

视频 2012-05-04

前荣耀CMO郭锐加盟智界汽车任CEO

汽车电子 2026-02-25

TI C665x 概览视频与专家咨询系列短片

视频 2012-05-03

单片机温度控制系统在电阻炉中的应用

单片机系统常用软件抗干扰措施

单片机系统的电磁兼容性设计

春节车市“购”“租”两旺 多重政策激活需求,新能源租车占比首破四成

更多 培训课堂
更多 焦点
更多 视频

技术专区