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
圖 啓動Constrains Editor引腳約束編輯對象
在「Ports」選項卡中能夠看到,全部的端口都已經羅列出來了,若是要修改端口和FPGA管腳的對應關係,只須要在每一個端口的「Location」列中填入管腳的編號便可。例如在UCF文件中描述管腳分配的語法爲:blog
NET 「端口名稱」 LOC = 引腳編號;ip
須要注意的是,UCF文件是大小敏感的,端口名稱必須和源代碼中的名字一致,且端口名字不能和關鍵字同樣。可是關鍵字NET是不區分大小寫的。
3.編輯約束文件
在工程管理區中,將「Source for」設置爲「Synthesis/Implementation」,而後雙擊過程管理區中「User Constrains」下的「Edit Constraints (Text)」就能夠打開約束文件編輯器,以下圖所示,就會新建當前工程的約束文件。
圖 用戶約束管理窗口
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所要求的各個模塊。
圖 層次模塊示意圖
表 要求遍歷的符號列表
管腳和區域約束語法
LOC約束是FPGA設計中最基本的佈局約束和綜合約束,可以定義基本設計單元在FPGA芯片中的位置,可實現絕對定位、範圍定位以及區域定位。此外, LOC還能將一組基本單元約束在特定區域之中。LOC語句既能夠書寫在約束文件中,也能夠直接添加到設計文件中。換句話說,ISE中的FPGA底層工具編輯器(FPGA Editor)、佈局規劃器(Floorplanner)和引腳和區域約束編輯器的主要功能均可以經過LOC語句完成。
INST "instance_name " LOC = location;
其中「location」能夠是FPGA芯片中任一或多個合法位置。若是爲多個定位,須要用逗號「,」隔開,以下所示:
LOC = location1,location2,...,locationx;
目前,還不支持將多個邏輯置於同一位置以及將多個邏輯至於多個位置上。須要說明的是,多位置約束並非將設計定位到全部的位置上,而是在佈局佈線過程當中,佈局器任意挑選其中的一個做爲最終的佈局位置。
範圍定位的語法爲:
INST 「instance_name」 LOC=location:location [SOFT];
經常使用的LOC定位語句如表4-4所列。
表 經常使用的LOC定位語句
使用LOC完成端口定義時,其語法以下:
NET "Top_Module_PORT" LOC = "Chip_Port";
其中,「Top_Module_PORT」爲用戶設計中頂層模塊的信號端口,「Chip_Port」爲FPGA芯片的管腳名。
LOC語句中是存在優先級的,當同時指定LOC端口和其端口連線時,對其連線約束的優先級是最高的。例如,在圖4-76中,LOC=11的優先級高於LOC=38。
圖 LOC優先級示意圖
2.LOC屬性說明
LOC語句經過加載不一樣的屬性能夠約束管腳位置、CLB、Slice、TBUF、塊RAM、硬核乘法器、全局時鐘、數字鎖相環(DLL)以及DCM模塊等資源,基本涵蓋了FPGA芯片中全部類型的資源。因而可知,LOC語句功能十分強大,表4-5列出了LOC的經常使用屬性。
表 LOC語句經常使用屬性列表
本文轉自:http://blog.163.com/meredith_2004/blog/static/3209483420091034104743/