在激光雷達(dá)中,使用FPGA實現(xiàn)TDC時需要手動約束進(jìn)位鏈的位置。這里簡單記錄下。
Efinity從2022.1開始支持邏輯鎖定,從2022.2開始支持邏輯和布線鎖定。當(dāng)然鎖定布線時也要鎖定相應(yīng)的邏輯
因為手動約束是處于開發(fā)階段,Efinity 2022.1,2022.2,2023.1中需要使用.ini文件
在outflow下會生成一個.qplace文件。用于指示布線的各個原語資源的分布位置 。
它的內(nèi)容主是
是原語的單元名
表示水平位置,對應(yīng)floorplan.
表示垂直位置 ,對應(yīng)floorplan.
表示子塊的位置 。目前只DSP24和DSP12可以有子塊。在一個block可以指定多個字塊。
是給block的一個編號,從0開始往下排。
鎖定過程如下[老的方法]:
stp1:并把outflow下面的.qplace文件得到到工程目錄下(可以修改名字也可以不修改,假如我們修改為carrychain.qplace)。把該qplace文件中想要鎖定的block保留,其余可以刪除。
stp2:在工程目錄下建一個efx_pnr_settings.ini文件 。
stp3:在efx_pnr_settings.ini文件中輸入
fix_pins=carrychain_prj.qplace
stp4:重新編譯。
以加法進(jìn)位鏈為例 ,上面我們生成了一個4級的加法進(jìn)位鏈。具體約束在哪個位置可以在floorplan中確認(rèn)位置 。
比如這里我們把它的位置約束到第8列。看下面的語句,第二行是進(jìn)位鏈的輸入位置用于進(jìn)入進(jìn)位鏈,第3,4,5,6依次約束進(jìn)位鏈的carry_tap[0][x]~FF即可。
之前也有一個疑問是是否應(yīng)該約束加法器,但是資源列表中并沒有相應(yīng)的資源,而且經(jīng)過分析也認(rèn)為只需要約束寄存器即可。
#block name x y subblk block number#---------- -- -- ------ ------------carry_tap[0][0]~FF 8 3 0 #0carry_tap[0][1]~FF 8 4 0 #1carry_tap[0][2]~FF 8 5 0 #2carry_tap[0][3]~FF 8 6 0 #3tdc[0].carry_chain_inst/CHAIN_GEN[0].genblk1.EFX_ADD_inst 8 2 0 #2605
約束的效果如下:
邏輯鎖定【新的方法】
(1)在工程目錄下新建一個efx_pnr_settings.ini文件,并輸入dump_placeloc = on,編譯;在在outflow文件夾下生成一個<工程名>.out.placeloc文件。
(2)新建文件my_logicloc.placeloc(文件名可以自己定義),把<工程名>.out.placeloc內(nèi)部想要鎖定的信息復(fù)制到my_logicloc.placeloc,下面是以進(jìn)位鏈為例進(jìn)行說明
(3)重新編譯,然后打開floorplan查看,這里我們把進(jìn)位鏈鎖在第2列。
走線鎖定
從v2022.2開始,截止到2024.1目前走線鎖定只適用于鈦金系列FPGA。
布線的鎖定是要和邏輯鎖定一起使用的。
(1)確認(rèn)自己想要約束的路徑
我們從程序上找一條路徑,從send_en_r_lock信號到lvds_tx_TX_DATA[0]
易靈思推薦使用統(tǒng)一的名字對需要鎖定的信號進(jìn)行命名,比如netname_LOCKED,可以方便我們在模版文件中快速定位這些信號。并使用(**syn_keep = “true"*)屬性防止信號被優(yōu)化。當(dāng)然名字是可以任意的,只要能區(qū)別清楚都是可以的。
這個鏈路的src是send_en_r_lock,des寄存器是lvds_tx_TX_DATA[0],中間經(jīng)過的路徑是send_en_r_lock和w_pos_send_lock。這兩條路徑在.rcf.template中都能找到。
(2)在工程目錄下新建一個efx_pnr_settings.ini文件,并輸入
dump_placeloc = ongenerate_rcf_template = on
編譯之后。在在outflow文件夾下生成一個.out.placeloc和.out.rcf文件。這兩個文件分別對應(yīng)布局和布線信息。還有.troutingtraces和.rcf_reference.troutingtraces
(2)把這三個文件拷備出來,比如放到工程目錄下。
目前的現(xiàn)象是troutingtraces文件如果不修改名字會每次編譯時被清除
(3)把你希望約束的cells和nets復(fù)制到自己的.placeloc和.rcf文件中。這里我們命名為my_route.rcf和my_logic.palceloc
在my_rout.rcf文件中添加了下面的語句 ,要注意自己的rcf文件中不能指定outflow文件夾下面的.troutingtraces文件 。該語句從.rcf.template中可以換到
在my_logic.placeloc中添加了要鎖定的起始和結(jié)束位置
(4)并把自己的文件添加到.ini文件中。
loc_assignment =/ .placeloc rcf_file = / .rcf
efx_pnr_settings.ini文件中內(nèi)部如下:
編譯之后查看路徑延時
% report_path -from send_en_r_lock~FF -to lvds_tx_TX_DATA[0]~FF|D
當(dāng)把把程序屏蔽一部分之后走線延時能確定下來(在沒有完整的使用該功能之前編譯延時是會變化的):
測試程序如下:
-
FPGA
+關(guān)注
關(guān)注
1629文章
21736瀏覽量
603375 -
布線
+關(guān)注
關(guān)注
9文章
772瀏覽量
84330 -
TDC
+關(guān)注
關(guān)注
0文章
38瀏覽量
13777 -
易靈思
+關(guān)注
關(guān)注
5文章
47瀏覽量
4866
發(fā)布評論請先 登錄
相關(guān)推薦
評論