原创 case与if…else优化

2009-7-21 22:04 5134 12 19 分类: FPGA/CPLD

caseifelse优化<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


    两段代码, EX1使用ifelse语句,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视图。


点击看大图


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


Ifelse语句综合的RTL视图



点击看大图


case语句综合的RTL视图


    单从RTL视图来看,二者综合后的结果是有明显区别的。Ifelse趋向于有优先级的结构,而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



点击看大图


IfelseTechnology Map Viewer



点击看大图


CaseTechnology Map Viewer


    二者完全的一致,所以,可以明确的说,在这个例子中,Ifelsecase语句最终的实现都是并行的,而且完全一致。


    记得特权过去也曾认为Ifelsecase综合实现的结果是不一样的。也曾就这个实例写过博文,分析的头头是道。但是现在的结果似乎推翻了这样一种思想,过去使用的是Quartus II 7.1i做这个测试,现在使用了9.1版本,8.1的也测试了,也许Ifelsecase语句的优化随着软件的升级,已经不再简单的交给用户的代码来决定,而是默认优化了。就像状态机中讨论独热码好还是格雷码好一样,其实这个优化已经成为了软件选项了。


    而综合的RTL视图到Technology Map Viewer其实也还是有差距的,它们之间的优化就是映射所要干的活。


    总之,Ifelsecase语句实现的结构到底是怎样还是要看工具,具体问题具体分析。不能片面的强调Ifelsecase语句谁好谁坏。


 

PARTNER CONTENT

文章评论7条评论)

登录后参与讨论

用户961355 2013-4-26 09:03

稍微了解了一点点。

用户377235 2013-4-15 10:32

正在玩ZED板子。。。。

用户1665873 2013-4-10 14:30

这个算是high performance reconfigurable computing 么?

用户377235 2013-3-2 23:24

哈哈~今天刚拿到这本书

用户575829 2010-12-6 16:38

学习了!

用户234619 2010-4-25 20:20

不惟书,不惟人,学习!

用户1377542 2009-8-11 00:26

支持

用户536736 2009-8-5 11:32

不错地分析啊,很好学习了啊

ilove314_323192455 2009-7-22 13:49

riple兄说得很对,今天又做了个完全不同实现的特例测试,发现综合实现的结构确实有那么些差别

ash_riple_768180695 2009-7-22 08:56

具体逻辑具体分析。如果需要表达的是同一个逻辑问题,那么if...else与case只不过是形式上的不同。综合工具的优化能力足够强的话,就能看穿这个形式上的不同,实现逻辑上的相同。反过来说,如果二者的综合结果不同,很有可能表达的是两个不同的逻辑问题,也就失去了相互比较的价值。这个问题,很难举出反例啊。
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
EE直播间
更多
我要评论
7
12
关闭 站长推荐上一条 /3 下一条