outc outc outc outc ">
博客首页 | 排行榜 |

KiKi的博客

FPGA工程实践,欢迎互相学习和交流,yq000cn at gmail.com

个人档案
博文分类
Case Statements vs. if-then-else Statements  2010-03-03 21:01

最近一直在看《Reuse Methodology Manual》这本书,看过了总会忘的,不妨做一些读书笔记留给未来的自己看。当然对其他人有帮助也未可知。

注:所有的内容基本都是来源于参考文献1。
 

这里主要讲说说VHDL中的if-then-else语句和Case语句的比较

首先看一个多路复用器的实例。

Case:

Select_proc_case : process (sel,a,b,c,d)
    begin
        case sel is
        when "00" => outc <= a;
        when "01" => outc <= b;
        when "10" => outc <= c;
        when others => outc <= d;
        end case;
    end process
end process Select_proc_case;

  image

图1. Case语句生成的多路复用器

-------------------------------------------------

if-then-else:

Select_proc_if : process (sel,a,b,c,d) 
    begin
        if (sel = "00") then
            outi <= a;
        elsif (sel = "01") then
            outi <= b;
        elsif (sel = "10") then
            outi <= c;
        else
        outi <= d;
     end if;
end process select_proc_if;

image

图2. if-then-else语句生成的多路复用器

 

总结

   Case 语句的特点:

简单直观,所有信号都是平等,没有优先级,所以信号是同时到达的;相对于if-then-else语句,生成的电路相对更加快。还有就是仿真器运行case语句比If-then-else更快。
如果信号没有优先级的话,首先考虑就应该是case语句。

if-then-else语句的特点:

见图2,容易看出输入信号是有优先级的存在,a信号优先级最高,b其次,c和d最后;再看信号的传输特点,d和c需要通过三个选择器才能输出,所以最慢,而a最快。
如果信号有优先级的话,应该选择if-then-else语句来描述。如果传输的信号中有先后到达,为了同步,可以使用if-then-else语句,将先到达的信号放到优先级低的端口,对应图2中的c或者d,最后到达的信号放到a端口。

Ref:

1. Reuse Methodology Manual,For System-ON-A Chip Designs, third Edition.

类别:VHDL |
上一篇:ISE约束--UCF编辑的入门介绍 | 下一篇:【FPGA博客大赛】基于FPGA的随机数发生器的实现以及利用ChipScope的验证
以下网友评论只代表其个人观点,不代表本网站的观点或立场