ISE中UCF約束檔案的編寫

2021-09-30 11:53:44 字數 3154 閱讀 7597

ise 約束檔案的基本操作

1.約束檔案的概念

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檔案。建立約束檔案有兩種方法,一種是通過新建方式,另一種則是利用過程管理器來完成。

第二種方法:在工程管理區中,將「source for」設定為「synthesis/implementation」。「constrains editor」是乙個專用的約束檔案編輯器,雙擊過程管理區中「user constrains」下的「create timing constrains」就可以開啟「constrains editor」,其介面如圖所示:

圖 啟動constrains editor引腳約束編輯

在「ports」選項卡中可以看到,所有的埠都已經羅列出來了,如果要修改埠和fpga管腳的對應關係,只需要在每個埠的「location」列中填入管腳的編號即可。例如在ucf檔案中描述管腳分配的語法為:

net 「埠名稱」 loc = 引腳編號;

需要注意的是,ucf檔案是大小敏感的,埠名稱必須和源**中的名字一致,且埠名字不能和關鍵字一樣。但是關鍵字net是不區分大小寫的。

3.編輯約束檔案

在工程管理區中,將「source for」設定為「synthesis/implementation」,然後雙擊過程管理區中「user constrains」下的「edit constraints (text)」就可以開啟約束檔案編輯器,如下圖所示,就會新建當前工程的約束檔案。

圖 使用者約束管理視窗

ucf檔案的語法說明

1.語法

ucf檔案的語法為:

"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語句完成。

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語句常用屬性列表

ISE工具和它生成的檔案

在ise系列軟體中,cpld fpga設計的實現主要包括轉換 translate 對映 map 布局佈線 place route 和時間引數提取 timing 等幾個方面。1.轉換 在轉換過程中,多個設計檔案和約束檔案將被合併為乙個ngd檔案,並同時輸出bld檔案。其中,ngd檔案包含當前設計的全部...

ISE中FPGA的實現流程

spartan3 和virtex4 之外的fpga,ncd還包含基元的布局資訊 pcf 物理約束檔案,用於約束各個fpga基元之間的 位置關係等 mrp map過程的報告 五.par place and route par過程用於將輸入檔案ncd中的fpga基元放置在具體的位置,並且完整各個基元之間...

ISE中FPGA的實現流程

spartan3 和virtex4 之外的fpga,ncd還包含基元的布局資訊 pcf 物理約束檔案,用於約束各個fpga基元之間的 位置關係等 mrp map過程的報告 五.par place and route par過程用於將輸入檔案ncd中的fpga基元放置在具體的位置,並且完整各個基元之間...