通過熟悉器件架構,選擇合適的硬件平臺和硅片特性,并借助配置恰當且性能優(yōu)良的實現(xiàn)工具,設計人員就能獲得較高的設計性能。不過,在提高設計性能的眾多方法中最容易被忽視的也許就是為目標器件編寫高效的HDL代碼。本文所討論的編程風格與技巧可提高設計性能。
使用復位對性能的影響
很少有哪種系統(tǒng)級的選擇能夠像復位選擇那樣對性能、面積和功率產生如此重要的影響。一些系統(tǒng)架構師規(guī)定必須使用系統(tǒng)全局異步復位。采用賽靈思的FPGA架構,復位的使用和類型將對代碼性能產生重要影響。
在目前所有的賽靈思FPGA架構中,查找表(LUT)單元就像邏輯、ROM/RAM或移位寄存器(SRL或移位寄存器LUT)那樣是可配置的。綜合工具可以根據RTL代碼推斷出采用某一種結構。不過,為了將LUT用作移位寄存器,代碼中不能描述復位功能,因為SRL本身沒有復位功能。這也意味著具有復位功能的移位寄存器代碼不能獲得最佳實現(xiàn)(移位寄存器之間需要多個觸發(fā)器和相關路徑),而沒有復位功能的代碼則可以獲得快速而緊湊的實現(xiàn)結果(使用SRL)。
這兩種情況對面積和功率的影響更明顯一些,但對性能的影響不很明顯。一般而言,采用觸發(fā)器生成的移位寄存器不會成為設計中的關鍵路徑,因為寄存器之間的時序路徑通常沒有足夠的長度成為設計中最長的路徑。而資源(觸發(fā)器和布線)的額外消耗會對其它設計部分的布局和布線選擇產生負面影響,因而可能導致更長的布線路徑。
專用乘法器和RAM模塊
乘法器通常用于DSP設計。但由于賽靈思的FPGA架構中包含有乘法專用資源,因此在許多設計中都有乘法器的應用。這些乘法器除了執(zhí)行乘法操作外,還提供其它功能。同樣地,實際上不管哪種應用,每個FPGA設計都會用到大小不一的RAM。
賽靈思FPGA包含幾個RAM模塊,在設計中可以用作RAM、ROM、大型LUT甚至通用邏輯。使用乘法器和RAM資源可獲得更加緊湊、具有更高性能的設計,不過復位選擇對性能既有正面的,也有負面的影響,具體取決于使用的復位類型。RAM和乘法器模塊只包含同步復位,因此如果這些功能的代碼用異步復位編寫,那么這些模塊中的寄存器就無法使用了。這對性能的影響是非常嚴重的。例如,Virtex-4器件的全管線式乘法器采用異步復位設計時,頻率最高只能達到200MHz,而將代碼改成同步復位后,性能可提高兩倍以上,頻率可達500MHz。
要從兩個方面看待與RAM有關的問題。與乘法器類似,Virtex-4塊RAM具有可選的輸出寄存器,使用它們可以減少RAM的時鐘到輸出時間,提高整體設計速度。但這些寄存器只提供同步復位,不提供異步復位,因此當代碼中的寄存器采用異步復位描述時就無法使用這些寄存器。
第二個問題來自RAM被用作LUT或通用邏輯時。有時基于面積和性能方面的考慮,將配置為ROM或通用邏輯的多個LUT壓縮進單個塊RAM是非常有益的。這可通過人工設定結構,或以自動方式將部分邏輯設計映射到未用的RAM存儲區(qū)來實現(xiàn)。因為塊RAM具有同步復位功能,因此當使用同步復位(或沒有復位)時,無需改變已經定義好的設計功能就可實現(xiàn)通用邏輯的映射。但當采用異步復位描述時,這就不可能實現(xiàn)。
通用邏輯
異步復位對通用邏輯結構也會產生影響。由于所有的賽靈思FPGA通用寄存器都具有將復位/置位編程為異步或同步的能力,因此設計人員可能認為使用異步復位沒什么不妥。但這種假設通常是錯誤的。如果沒有使用異步復位,那么置位/復位邏輯就可以被置為同步邏輯。這樣一來,就可釋放額外的資源用于邏輯優(yōu)化。
為了更好地理解異步復位如何影響優(yōu)化結果,我們來看看以下一些不夠理想的代碼例子:
VHDL例子#1
process (CLK, RST)
begin
if (RST = '1') then
Q <= '0';
elsif (CLK'event and CLK = '1') then
Q <= A or (B and C and D and E);
end if;
end process;
Verilog例子#1
always @(posedge CLK, posedge RST)
if (RESET)
Q <= 1'b0;
else
Q <= A | (B & C & D & E);
為實現(xiàn)這些代碼,綜合工具只能為數(shù)據路徑選擇兩個LUT,因為總共有5個信號與實現(xiàn)上述邏輯功能相關。上述代碼的一種可能性的實現(xiàn)方案如圖1所示。