outc outc outc outc ">
最近一直在看《Reuse Methodology Manual》这本书,看过了总会忘的,不妨做一些读书笔记留给未来的自己看。当然对其他人有帮助也未可知。
注:所有的内容基本都是来源于参考文献1。
这里主要讲说说VHDL中的if-then-else语句和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;
图1. Case语句生成的多路复用器
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;
图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.