FPGA---ucf文件語法

1.約束文件的概念web

FPGA設計中的約束文件有3類:用戶設計文件(.UCF文件)、網表約束文件(.NCF文件)以及物理約束文件(.PCF文件),能夠完成時序約束、管腳約束以及區域約束。3類約束文件的關係爲:用戶在設計輸入階段編寫UCF文件,而後UCF文件和設計綜合後生成NCF文件,最後再通過實現後生成PCF 文件。本節主要介紹UCF文件的使用方法。編輯器

UCF文件是ASC 2碼文件,描述了邏輯設計的約束,能夠用文本編輯器和Xilinx約束文件編輯器進行編輯。NCF約束文件的語法和UCF文件相同,兩者的區別在於: UCF文件由用戶輸入,NCF文件由綜合工具自動生成,當兩者發生衝突時,以UCF文件爲準,這是由於UCF的優先級最高。PCF文件能夠分爲兩個部分:一部分是映射產生的物理約束,另外一部分是用戶輸入的約束,一樣用戶約束輸入的優先級最高。通常狀況下,用戶約束都應在UCF文件中完成,不建議直接修改 NCF文件和PCF文件。工具

2.建立約束文件佈局

約束文件的後綴是.ucf,因此通常也被稱爲UCF文件。建立約束文件有兩種方法,一種是經過新建方式,另外一種則是利用過程管理器來完成。spa

第一種方法:新建一個源文件,在代碼類型中選取「Implementation Constrains File」,在「File Name」中輸入「one2two_ucf」。單擊「Next」按鍵進入模塊選擇對話框,選擇模塊「one2two」,而後單擊「Next」進入下一頁,再單擊「Finish」按鍵完成約束文件的建立。設計

第二種方法:在工程管理區中,將「Source for」設置爲「Synthesis/Implementation」。「Constrains Editor」是一個專用的約束文件編輯器,雙擊過程管理區中「User Constrains」下的「Create Timing Constrains」就能夠打開「Constrains Editor」,其界面如圖所示:orm

ucf文件語法 - mmlover - mmlover的博客

圖 啓動Constrains Editor引腳約束編輯對象

在「Ports」選項卡中能夠看到,全部的端口都已經羅列出來了,若是要修改端口和FPGA管腳的對應關係,只須要在每一個端口的「Location」列中填入管腳的編號便可。例如在UCF文件中描述管腳分配的語法爲:blog

        NET 「端口名稱」 LOC = 引腳編號;ip

須要注意的是,UCF文件是大小敏感的,端口名稱必須和源代碼中的名字一致,且端口名字不能和關鍵字同樣。可是關鍵字NET是不區分大小寫的。

3.編輯約束文件

在工程管理區中,將「Source for」設置爲「Synthesis/Implementation」,而後雙擊過程管理區中「User Constrains」下的「Edit Constraints (Text)」就能夠打開約束文件編輯器,以下圖所示,就會新建當前工程的約束文件。

ucf文件語法 - mmlover - mmlover的博客

圖 用戶約束管理窗口

UCF文件的語法說明

1.語法

        UCF文件的語法爲:

{NET|INST|PIN} "signal_name" Attribute;

其中,「signal_name」是指所約束對象的名字,包含了對象所在層次的描述;「Attribute」爲約束的具體描述;語句必須以分號「;」結束。能夠用「#」或「/* */」添加註釋。須要注意的是:UCF文件是大小寫敏感的,信號名必須和設計中保持大小寫一致,但約束的關鍵字能夠是大寫、小寫甚至大小寫混合。例如:

NET "CLK" LOC = P30;

「CLK」就是所約束信號名,LOC = P30;是約束具體的含義,將CLK信號分配到FPGA的P30管腳上。

對於全部的約束文件,使用與約束關鍵字或設計環境保留字相同的信號名會產生錯誤信息,除非將其用" "括起來,所以在輸入約束文件時,最好用" "將全部的信號名括起來。

2.通配符

在UCF文件中,通配符指的是「*」和「?」。「*」能夠表明任何字符串以及空,「?」則表明一個字符。在編輯約束文件時,使用通配符能夠快速選擇一組信號,固然這些信號都要包含部分共有的字符串。例如:

NET "*CLK?" FAST;

將包含「CLK」字符並以一個字符結尾的全部信號,並提升了其速率。

在位置約束中,能夠在行號和列號中使用通配符。例如:

INST "/CLK_logic/*" LOC = CLB_r*c7;

把CLK_logic層次中全部的實例放在第7列的CLB中。

3.定義設計層次

        在UCF文件中,經過通配符*能夠指定信號的設計層次。其語法規則爲:

* 遍歷全部層次

Level1/* 遍歷level1及如下層次中的模塊

Level1/*/ 遍歷level1種的模塊,但不遍歷更低層的模塊

例4-5 根據圖4-75所示的結構,使用通配符遍歷表4-3所要求的各個模塊。

ucf文件語法 - mmlover - mmlover的博客

圖 層次模塊示意圖

表 要求遍歷的符號列表

ucf文件語法 - mmlover - mmlover的博客

管腳和區域約束語法

LOC約束是FPGA設計中最基本的佈局約束和綜合約束,可以定義基本設計單元在FPGA芯片中的位置,可實現絕對定位、範圍定位以及區域定位。此外, LOC還能將一組基本單元約束在特定區域之中。LOC語句既能夠書寫在約束文件中,也能夠直接添加到設計文件中。換句話說,ISE中的FPGA底層工具編輯器(FPGA Editor)、佈局規劃器(Floorplanner)和引腳和區域約束編輯器的主要功能均可以經過LOC語句完成。

  • LOC語句語法

 

INST "instance_name " LOC = location;

其中「location」能夠是FPGA芯片中任一或多個合法位置。若是爲多個定位,須要用逗號「,」隔開,以下所示:

LOC = location1,location2,...,locationx;

目前,還不支持將多個邏輯置於同一位置以及將多個邏輯至於多個位置上。須要說明的是,多位置約束並非將設計定位到全部的位置上,而是在佈局佈線過程當中,佈局器任意挑選其中的一個做爲最終的佈局位置。

範圍定位的語法爲:

INST 「instance_name」 LOC=location:location [SOFT];

經常使用的LOC定位語句如表4-4所列。

表 經常使用的LOC定位語句

ucf文件語法 - mmlover - mmlover的博客

使用LOC完成端口定義時,其語法以下:

NET "Top_Module_PORT" LOC = "Chip_Port";

其中,「Top_Module_PORT」爲用戶設計中頂層模塊的信號端口,「Chip_Port」爲FPGA芯片的管腳名。

LOC語句中是存在優先級的,當同時指定LOC端口和其端口連線時,對其連線約束的優先級是最高的。例如,在圖4-76中,LOC=11的優先級高於LOC=38。

ucf文件語法 - mmlover - mmlover的博客

圖 LOC優先級示意圖

2.LOC屬性說明

LOC語句經過加載不一樣的屬性能夠約束管腳位置、CLB、Slice、TBUF、塊RAM、硬核乘法器、全局時鐘、數字鎖相環(DLL)以及DCM模塊等資源,基本涵蓋了FPGA芯片中全部類型的資源。因而可知,LOC語句功能十分強大,表4-5列出了LOC的經常使用屬性。

表 LOC語句經常使用屬性列表

ucf文件語法 - mmlover - mmlover的博客

本文轉自:http://blog.163.com/meredith_2004/blog/static/3209483420091034104743/

相關文章
相關標籤/搜索