摘 要:VHDL電路的優化目標是充分利用CPLD/FPGA芯片的內部資源,使設計文件能適配到一定規模的CPLD/FPGA芯片中,并提高系統的工作速度和降低系統成本。分析VHDL語言的特點,并從設計思想、語句運用和描述方法等方面對電路進行優化,提出了利用串行化設計思想和外擴E2PROM的方法對VHDL電路進行優化,通過對比實驗,驗證了這兩種方法能有效減少程序占用的宏單元(Macro Cell)。
關鍵詞:VHDL;CPLD/FPGA;電路設計;優化
中圖分類號:TP930 文獻標識碼:A
文章編號:1004-373X(2010)03-191-03
Optimized Design of Circuits in VHDL Based on CPLD/FPGA
DU Zhichuan,ZHENG Jianli
(School of Medical Instrument and Food Engineering,University of Shanghai for Science and Technology,Shanghai,200093,China)
Abstract:The optimized design of VHDL is for making full use of hardware resources provided by CPLD/FPGA,making the design suit for certain scale of CPLD/FPGA chip,increasing the system′s speed and reducing system′s costs.The advantages of VHDL language are analysed and the circuit design is optimized from the design idea,the use of statements,coding style.In this paper,serial design methods and the use of E2PROM to optimize the circuit design are proposed,these two methods are proved to be effective in reducing Macro Cell occupied by the program.
Keywords:VHDL;CPLD/FPGA;circuit design;optimization
0 引 言
VHDL(Very High Speed Integrated Circuit Hardware Description Language)是IEEE工業標準硬件描述語言,是隨著可編程邏輯器件(PLD)的發展而發展起來的[1]。它是一種面向設計、多層次的硬件描述語言,是集行為描述、RTL描述、門級描述功能為一體的語言,并已成為描述、驗證和設計數字系統中最重要的標準語言之一[2,3]。由于VHDL在語法和風格上類似于高級編程語言,可讀性好,描述能力強,設計方法靈活,可移植性強,因此它已成為廣大EDA工程師的首選。目前,使用VHDL語言進行CPLD/FPGA設計開發,Altera和Lattice已經在開發軟件方面提供了基于本公司芯片的強大開發工具。但由于VHDL設計是行為級設計,所帶來的問題是設計者的設計思想與電路結構相脫節,而且其在設計思路和編程風格等方面也存在差異,這些差異會對系統綜合后的電路整體性能產生重要的影響。
在VHDL語言電路優化設計當中,優化問題主要包括面積優化和速度優化[4]。面積優化是指CPLD/FPGA的資源利用率優化,即用盡可能少的片內資源實現更多電路功能;速度優化是指設計系統滿足一定的速度要求,即用更多的片內資源換取更快的處理速度,常用于視頻信號采集系統和通信系統之中。面積優化和速度優化通常是一對矛盾,一般情況下,速度指標是首要的,在滿足速度要求的前提下,盡可能實現面積優化[5]。因此,本文結合在設計超聲探傷數據采集卡過程中的CPLD編程經驗,提出串行設計、防止不必要鎖存器的產生、使用狀態機簡化電路描述、資源共享[6],利用E2PROM芯片節省片內資源等方法對VHDL電路進行優化。
1 VHDL電路優化設計的方法
優化設計是可編成邏輯設計的精華所在,如何節省所占用的面積、如何提高設計的性能是可編成邏輯設計的核心,這兩點往往也成為一個設計甚至項目成敗的關鍵因素[7]。下面結合超聲探傷數據采集卡設計過程中,并基于Altera公司的EPM7192 CPLD芯片的編程經歷來論述VHDL電路的優化方法。
1.1 采用串行設計代替并行設計
串行設計是指把原來單個時鐘周期內完成的并行操作的邏輯功能分割出來,提取相同的功能單元,在時間上分時復用這些功能單元,在滿足系統速度要求的前提下,用多個時鐘周期來完成單個時鐘周期即可完成的功能。
根據項目的要求,超聲探傷數據采集卡要有5個模擬通道,每隔125 μs就會采集到330個點。如果等5個超聲通道采樣結束后再進行數據處理和傳輸,幾乎是不可能滿足該超聲探傷系統的實時性要求,而且數據量也遠遠超過ARM板上總線接口的傳輸速率2 MB/s。對于這么高的實時性要求,最好的解決辦法是在CPLD內部進行數據壓縮,即邊采集邊壓縮,以滿足系統使用的ARM板的總線速率要求。經過系統評估,每個超聲通道只需保留一個最大值即可滿足系統的性能要求。在這里,通過在三個8位數A,B,C中找出最大值的例子來說明串行設計方法的優勢,代碼如下所示。
程序一:
signal A:std_logic_vector(7 downto 0);
signal B:std_logic_vector(7 downto 0);
signal C:std_logic_vector ( 7 downto 0);
process(clk)
begin
if( clk′event and clk=′1′) then
A<=AD_RESULT;
B<=A;
C<=B;
else
1;
end if;
end process;
process(A,B,C)
variable max : std_logic_vector (7 downto 0);
begin
if(A > B) then
if (A < = C) then
max :=C;
else
max :=A;
end if;
else
if(B < = C)then
max:=C;
else
max:=B;
end if;
end if;
end process;
程序二:
signal max : std_logic_vector(7 downto 0);
process(clk)
variable temp: std_logic_vector(7 downto 0);
begin
if( clk′event and clk=′1′ ) then
temp:=AD_RESULT;
if(temp >= max)then
max<=temp;
else
1;
end if;
else
1;
end if;
end process;
程序一是用并行方法設計,而程序二是采用串行方法設計。從表1的實驗數據可見,采用串行方法以后,電路的優化效果比較明顯。優化前,程序一需要消耗38個宏單元(Micro Cell),一個時鐘周期即可完成找最大值操作;優化后,實現相同的邏輯功能程序二僅需要12個宏單元,但需要3個時鐘周期才能完成一次運算,優化率達68.4%。值得注意的是,此方法是以速度換取資源的方法,只適用于對速度要求不高的系統。
表1 優化前后資源使用情況
程序名稱實驗平臺器件消耗宏單元個數 /個
程序一程序二
Quartus II 7.2EPM7192SQC160-1538
12
1.2 防止不必要鎖存器的產生
在VHDL設計中,使用語句不當也是導致電路復雜化的原因之一,這使得綜合后的電路當中存在很多不必要的鎖存器,降低電路的工作速度[8]。因此,在設計一個邏輯電路時,設計人員應該避免由于VHDL使用習慣的問題,無意識地在電路中添加不必要的鎖存器。由于IF或者CASE語句較容易引入鎖存器,所以當語句的判斷條件不能覆蓋所有可能的輸入值的時候,邏輯反饋就容易形成一個鎖存器。當然,隨著高級編譯軟件的出現,如Quartus Ⅱ 7.2,這樣的問題通過編譯軟件已經得到很好的解決。對一個設計人員而言,有意識地防止不必要鎖存器的產生可以加快編譯速度。
在超聲探傷數據采集卡VHDL程序設計當中,涉及10 MHz系統時鐘clk的同步D觸發器的設計,即每當clk時鐘信號的上升沿到來時,將輸入信號in的值賦給輸出信號out,代碼如下所示。
程序三:
process ( clk )
begin
if ( clk′event and clk=′1′ ) then
out <= in;
end if;
end process;
程序四:
process(clk)
begin
if ( clk′event and clk=′1′ ) then
out <= in;
else
1;
end if;
end process;
通過對比,程序四比程序三只多了一條空語句,但這樣做可有效防止綜合器生成不必要鎖存器,并提高電路的工作速度。
1.3 使用狀態機簡化電路描述
由于狀態機的結構模式簡單,有相對固定的設計模板,特別是VHDL支持定義符號化枚舉類型狀態,這就為VHDL綜合器充分發揮其強大的優化功能提供了有利條件[9]。因此采用狀態機比較容易地設計出高性能的時序邏輯模塊,在超聲探傷數據采集卡的CPLD程序設計中,使用有限元狀態機(FSM)設計CY7C4225 1K×16 b FIFO芯片的讀寫控制模塊,并且達到很好的效果,邏輯轉換圖如圖1所示。實踐證明,實現相同的邏輯功能,使用狀態機設計能使設計的電路得到更好的優化。
圖1 寫FIFO邏輯轉換圖
1.4 資源共享
資源共享的思想是通過使用數據緩沖器或多路選擇器等方法來共享數據通道中占用資源較多的模塊[10],如算法單元。通過共享電路單元模塊可有效提高芯片內部資源的利用率,達到優化電路的目的。
1.5 利用E2PROM芯片節省片內資源
在用VHDL進行項目開發的過程中,經常需要存儲一些配置參數值。理論上講,每存儲一個字節的配置參數需要使用8個CPLD宏單元,因此在CPLD內部存儲這些參數并不是好的方案,除非使用的CPLD芯片已集成了E2PROM存儲單元。例如,在設計超聲探傷系統的數據采集卡的過程中,每個通道的采樣數都需要保存在CPLD里面。由于項目初期芯片選型不當,
選擇一款EPM7192S160-15,該款芯片內部只有192個宏單元,因此考慮把參數存儲在外擴的E2PROM芯片24WC02中。經實驗證明,在CPLD內部實現一個I2C控制器僅需要43個宏單元。由此可見,當初始化參數大于5個的時候,通過外擴E2PROM芯片來存儲配置參數是可行的,只需在CPLD/FPGA芯片內實現I2C控制器即可方便地讀寫E2PROM存儲芯片。
2 結 語
使用VHDL進行CPLD/FPGA電路設計時,要根據實際項目的具體情況,合理地劃分項目功能,并用VHDL實現相應的功能模塊。用模塊來構建系統,可有效地優化模塊間的結構和減少系統的冗余度,并在模塊設計過程中始終貫徹以上的優化設計原則,借助于強大的綜合開發軟件進行優化,才能達到最優化電路的目的。
參考文獻
[1]趙桂青,于會山,穆健,等.VHDL編碼中面積優化探討[J].嵌入式軟件應用,2007,23(1):116-117.
[2]吳繼華,王誠.Altera FPGA/CPLD設計[M].北京:人民郵電出版社,2005.
[3]Steve Carison.VHDL Design(Representation Synthesis)[M].New Jersey:Prentice Hall,2000.
[4]潘松.EDA技術實用教程[M].北京:科學出版社,2004.
[5]沈祖斌.基于FPGA/CPLD的數字系統設計優化[J].江漢大學學報,2006,34(1):47-49.
[6]Bhasker J.VHDL Primer[M].3rd Edition.NJ:Prentice Hall,1999.
[7]楊鮮艷,王珊珊,李萍,等.VHDL電路優化設計及方法[J].航船電子工程,2007,(2):112-114.
[8]鄔楊波,王曙光,胡建平.有限狀態機的VHDL設計及優化[J].信息技術,2004,28(1):75-78.
[9]Volnei A.Pedroni-Circuit Design with VHDL[M].MIT Press,2004.
[10]任勇峰,莊新敏.VHDL與硬件實現速成[M].北京:國防工業出版社,2005.