Synplify Pro軟件的使用

FPGA設計中,許多設計人員都習慣於使用綜合工具Synplify Pro。雖然ISE軟件可以不依賴於任何第三方EDA軟件完成整個設計,但Synplify Pro軟件有綜合性能高以及綜合速度快等特點,無論在物理面積上還是工作頻率都能達到較理想的效果。因此如何在ISE中調用Synplify Pro綜合工具,並進行無縫的設計連接仍然是設計人員需要解決的一個設計流程問題。

1. Synplify Pro
綜合軟件的安裝

下面介紹Synplify Pro的安裝步驟。運行安裝程序,歡迎界面過後,將出現如圖4-89所示的安裝選擇界面,可以根據自己的需要選擇相應的組件。然後按照默認選項繼續即可完成安裝。




4-89 Synplify的安裝選擇界面


Synplify安裝完後,還需要安裝Identify。在開始 程序 Synplify菜單欄中會出現“Identify 211 Installation”,雙擊即開始安裝,一般來講,可以按照默認選項繼續,直至安裝完畢。安裝完之後需要添加授權的License文件,才能正常使用。

2.
關聯ISESynplify Pro

完成了Synplify Pro安裝後,需要將其和ISE軟件關聯後才能使用Synplify Pro進行綜合。運行ISE軟件,在主界面中選擇“Edit|Preference”菜單項,進行“Reference”設定如圖4-90所示。在彈出的 Preference對話框中選擇“Integrated Tools”選項卡。該選項卡用於設定與ISE集成的軟件的路徑,第三項的Synplify Pro就用於設定Synplify Pro仿真軟件的路徑,如圖4-91所示。

 

                                 4-90 選擇Preference菜單項                                                             4-91 ISE集成工具設定頁面

單擊Synplify Pro文本框後面的按鈕,會彈出一個文件選擇對話框,選擇Synplify Pro安裝路徑下bin目錄下的“synplify_pro.exe”文件即可。

注意:在“Integrated Tools”選項卡中還可以看到其他幾個可以和ISE進行無縫鏈接的第三方軟件,如ModelSimsynplifyLeonardoSpectrumChip Scope Analyzer等軟件。

3. Synplify Pro
的使用方法簡介

Synthesis
簡單地說就是將HDL代碼轉化爲門級網表的過程,其對電路的綜合包括以下3個步驟:首先,HDL compilation HDL的描述編譯成已知的結構元素;其次,運用一些算法,對設計進行面積優化和減小時延。在沒有目標庫的情況下,Synplify只能執行一些最基本的優化措施;最後,將設計映射到指定廠家的特定器件上,並執行一些附加的優化措施,包括根據由器件供應商提供的專用約束進行優化。工程文件以*.prj 作爲擴展名,以tcl 的格式保留了以下信息:設計文件、約束文件、綜合時開關選項的設置情況等。

1Synplify Pro用戶界面介紹

Synplify Pro是標準的windows應用程序,所有功能均可以通過菜單選擇來實現。下面按照圖4-92中數字所標示的次序,對其界面作簡要介紹。圖中1表示 Synplify的主要工作窗口,在這個窗口中可以詳細顯示設計者所創建工程的詳細信息,包括工程的源文件,綜合後的各種結果文件。同時如果綜合完成後,每個源文件有多少錯誤或者警告都會在這個窗口顯示出來。圖中2表示TCL窗口,在這個窗口中設計者可以通過TCL命令而不是菜單來完成相應的功能。圖中3 表示觀察窗口,在這裏可以觀察設計被綜合後的一些特性,比如最高工作頻率等。圖中4是狀態窗口,它表示現在Synplify所處的狀態,比如下圖表示 Synplify處於閒置狀態,在綜合過程中會顯示編譯狀態、映射狀態等等。圖中5所示的一些複選框,可以對將要綜合的設計的一些特性進行設置。 Synplify可以根據這些設置對設計進行相應的優化工作。圖中6是運行按鈕,當一個工程加入之後,按這個RUN 按鈕,Synplify就會對工程進行綜合。圖中7所示的是Synplify的工具欄。

 

4-92 Synplify Pro綜合工具示意圖

2  建立工程、添加源文件

建立工程首先需要打開Synplicity Pro。點擊開始菜單,依次選擇程序Synplicity Synplify Pro”,啓動Synplify Pro。在工程窗口中包含了以下內容:源文件信息、結果文件信息和目標器件信息。

缺省情況下,當Synplify啓動時將自動建立一個新工程。這時,可以選擇將工程,以新名字保存。如果結束了一個工程的操作,想新建一個工程,則可以選擇“FILE NEW”;然後選擇工程文件,就可以建立一個新的工程。這項操作也可以通過工具條來進行,單擊工具條的P圖標,則在彈出對話框選擇工程文件即可。

新建工程之後,需要將源文件添加進來。點擊“ADD FILE”按鈕。添加源文件和約束文件。Synplify Pro把最後編譯的“module/entity and the architecture”作爲頂層設計,所以需要把頂層設計文件用左鍵拖拉到源文件菜單的末尾處或者點擊“Impl Options”按鈕,在Verilog屬性頁中設置頂層模塊的名稱。

3)工程屬性設置

添加完源文件後需要設置工程屬性,點擊“Impl option”按鈕出現屬性頁對話框,如圖4-51所示。下面介紹常用的芯片設置、綜合選項、約束設置以及實現結果選項等參數的配置。

 

4-93 設置器件屬性頁

1.   首先,設置FPGA芯片信息。打開 “Device”屬性頁,分別設置器件廠家器件型號、速度級別和封裝信息。根據設計的速度和麪積要求。可以設置最大扇出係數,缺省是10000。根據該工程所屬模塊是否和片外有信號聯繫,選中或者不選中“Disable I/O insert”,如果選中該選項,則Synplify Pro不會爲輸入輸出信號加緩衝,缺省爲不選。

2.   設置通用綜合選項。點擊“options”屬性頁,選中“Symbolic FSM Compiler”Synplify Pro會在綜合過程中啓動有限狀態機編譯器,對設計中的狀態機進行優化。選中“Resource Sharing”選項,則啓動資源共享;設置了資源共享後,設計的最高工作頻率會低於不選中的情況,但是資源會節約很多,因此在設計能夠滿足時鐘頻率要求的情況下,一般選中以節省資源。選中“Use FSM Explorer”選項,即可以用synplify內置的狀態機瀏覽器觀察狀態機的各種屬性。選中“Pipelining”選項,即啓動流水,在高速時鐘設計中,如果其他措施都不能達到目標頻率則最好選中此項。

3.   設置約束選項。點擊“Constraints”屬性頁,設置模塊最高工作頻率以及添加約束文件(.sdc)。過嚴或是過鬆的約束都達不到最佳的效果。一般可先嚐試通用的約束,如時鐘扇出限制等;如果沒有達到要求,可加入一些嚴格的具體約束,同時注意放鬆一些可以放鬆的約束。需要注意的是,綜合約束的結果是估計值,應該以佈局佈線的結果爲準。

4.   設置實現結果。點擊“Implementation Results”屬性頁,設置綜合結果放置的目錄,綜合結果的文件名稱。同時一定要將“Write Vendor Constraint File”“Write Verification Interface Format”選項選中。

4)時序約束

定義時間約束是爲了讓綜合結果滿足預期的時序要求,時間約束通常分爲兩類:一是通用時間約束,用於目標結構的時序要求;二是黑盒時間約束,用於在設計中指定爲黑盒的模塊時間約束。在Synplify Pro中,可通過SCOPE、約束文件以及綜合屬性和指示等3種方法添加時序。本節主要介紹利用約束文件添加約束的方法。

約束文件採用Tcl語言,以*.sdc 保存,用來提供設計者定義的時序約束、綜合屬性以及FPGA生產商定義的屬性等。約束文件既可以通過SCOPE創建編輯也可以使用正文編輯器創建編輯可被添加到在工程窗口的代碼菜單中也可以被Tcl腳本文件調用。 

 5)綜合屬性和指示

1)綜合屬性和指示簡介

綜合指示用於控制綜合中編譯階段的設計分析,因而必須加入到源代碼中。屬性是在編譯後讀入的,因而既可以在源程序中說明,也可以在約束文件中說明。約束文件提供了較大的靈活性,使得可以僅修改約束而不用重新編譯源程序,因而是強烈推薦採用的方法。

Verilog源程序中,說明指示或屬性採用註釋的方法語法如下:

// synthesis directive|attribute = "value"
/* synthesis directive |attribute = "value" */

2)綜合指示

綜合指示用於通知Synplify Pro軟件某些用戶定製的設置,常以註釋的形式出現在源代碼後面,Synplify軟件會自動識別相應的說明,按照用戶指令完成綜合。常用的綜合只是如下:

black_box_pad_pin

聲明用戶定義的黑盒管腳作爲外部環境可見的I/O pad。如果有不止一個端口列在雙引號內,則以逗號分開。由於Synplify提供了預定義的I/Os,一般不需要這一屬性。其語法如下:

object /* synthesis syn_black_box black_box_pad_pin = "port_list" */ ;

例如:

module BS(D,IN,PAD,Q) /*synthesis syn_black_box black_box_pad_pin="PAD" */;

block_box_tri_pins

聲明黑盒的一個輸出端口是三態,如不止一個列在雙引號內,則以逗號分開。其語法如下:

object /* synthesis syn_black_box black_box_tri_pins = "port_list" */ ;

例如:

module BBDLHS(D,E,GIN,GOUT,PAD,Q) /* synthesis syn_black_box
black_box_tri_pins="PAD" */ ;

full_case

僅用於Verilog中的case語句,表明所有可能的狀態都已經給出,不需要其他邏輯保持信號的值,其語法如下:
object /* synthesis full_case */
其中object可以是casecasexcasezstatementsdeclaration

parallel_case

僅用於Verilogcase語句,表明生成一個並行的多路選擇結構而不是一個優先譯碼結構。其語法如下:
object /* synthesis parallel_case */
其中object可以是casecasexcasezstatementsdeclaration

syn_block_box

說明一個模塊或組件爲黑盒,僅利用其界面進行綜合,而不管內部是否爲空,也不進行優化。一般應用於廠家原語或宏或IP等用戶定義的宏。其語法如下:

object /* synthesis syn_black_box */ ;
其中object可以是moduledeclaration

syn_encoding

強制選擇自動機實現的方式,其可選值(value)如下:

default
:綜合根據狀態的數量選擇編碼方式編碼方式可以是onehot gray sequential
onehot
:採用onehot編碼方式;
gray
:採用格雷碼;
sequential
:採用自然碼;
safe
:如果不能到達任一個狀態時讓其回到復位態。
syn_encoding
的語法如下:
object /* synthesis syn_encoding = "value" */ ;
其中object是狀態寄存器定義。

syn_isclock

說明黑盒的一個輸入是時鐘信號。對名字爲clk rclk wclk的黑盒輸入信號,軟件自動當作時鐘,可以用這個屬性說明任意輸入信號爲時鐘信號。其語法如下:

object /* synthesis syn_isclock = 0|1 */ ;

其中object是黑盒的input port

例如:

module ram4(myclk, out, opcode, a, b) /* synthesis syn_black_box*/;
output [7:0] out;
input myclk /* synthesis syn_isclock = 1 */;
input [2:0] opcode;
input [7:0] a, b;
/* Other coding */

syn_keep

保證被指定的wire在綜合中保持不動,不會被優化掉,常用於用define_multicycle_pathdefine_false_path,用了-through 選項。如果你用了這一屬性,將生成一個keepbuf,可對其定義時間約束,且這個Buffer只佔用一個位置,不出現在門級網表裏。其語法如下:
object /* synthesis syn_keep = 0|1 */ ;
其中objectwirereg聲明。

syn_noprune

用來保持一個或多個component的實例,而不管其輸出能否完成映射。一般在沒有該指示的情況下,未用輸出端口的實例會從EDIF文件中刪除。syn_noprune可被置於約束文件中,其語法如下:

.sdc
文件中:
define_attribute {module|instance} syn_noprune {0|1}
Verilog
中:
object /* synthesis syn_noprune = 0|1 */ ;
其中object可以是moduledeclaration,也可以是實例。

syn_preserve

用在某些獨立的寄存器上或模塊,使模塊中的所有寄存器在優化時保持不動,也可用於保持某個自動機在優化時不動。其語法如下:

object /* synthesis syn_preserve = 0|1 */ ;

其中object可以是寄存器定義信號,也可以是Module

·      syn_sharing
確定綜合時是否對運算符進行資源共享。缺省值是禁止,也可以在project視窗裏設置這一選項。其語法如下:
object / * synthesis syn_sharing = " on|off " */ ;
其中object可以是module定義語句。

·      syn_state_machine
對設計中的某組狀態寄存器進行自動機優化,其語法如下:
object /* synthesis syn_state_machine = 0|1 */ ;
其中object是該組狀態寄存器。

·      syn_tco<n>
提供黑盒的輸出延遲信息,其語法如下:
object /* syn_tcon = "[!]clock -> bundle = value" */ ;
其中bundle是總線或標量信號的集合。

·      syn_tpd<n>
提供穿過黑盒的組合邏輯的傳輸延遲信息,其語法如下:
object /* syn_tpdn = "[!]clock -> bundle = value" */ ;
其中bundle是總線或標量信號的集合。

·      syn_tristate
指定黑盒的一個輸出端口爲三態端口,其語法如下:
object /* synthesis syn_tristate = 0|1 */ ;
其中object可以是黑盒的output port

·      syn_tsu<n>
說明一個黑盒的輸入要求的建立時間,其語法如下:
object /* syn_tsun = "[!]clock -> bundle = value" */ ;

·      translate_on/translate_off

用於與其他綜合軟件的兼容,這兩者經常配對使用。在這兩個指示中間的所有代碼將在綜合時被忽略,也可以用於在源代碼中插入一段仿真代碼。其語法如下:

/* synthesis translate_off */
綜合時忽略的代碼
/* synthesis translate_on */

6
)綜合報告解讀

綜合報告主要由3部分組成:編譯報告、映射優化報告以及時序報告,但是該報告是冗長的,不容易快速找出用戶所關心的結果。因此,Synplify公司提供了綜合報告觀察窗,如圖4-92中第3部分所示,可從綜合報告文件中取出重要的信息。該窗口的使用非常簡單,點擊空白的參數顯示欄,在下拉欄中選擇要查看的項目,則會在同行的右側顯示出結果,如圖4-94所示。



4-93 Synplify綜合結果示意圖

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章