概述
邏輯綜合是將RTL描述的電路轉(zhuǎn)換成門(mén)級(jí)描述的電路,將HDL語(yǔ)言描述的電路轉(zhuǎn)換為性能、面積和時(shí)序等因素約束下的門(mén)級(jí)電路網(wǎng)表。綜合后的門(mén)級(jí)網(wǎng)表也是.v構(gòu)成的Verilog代碼,但是里面并沒(méi)有我們所寫(xiě)的always或者assign這種語(yǔ)句,而是將標(biāo)準(zhǔn)單元(Standard Cell)實(shí)例化并進(jìn)行連接。
圖1 RTL網(wǎng)表轉(zhuǎn)為門(mén)級(jí)網(wǎng)表
常見(jiàn)的工具是synopsys公司的Design Compiler。
原因
綜合最重要的目的是對(duì)電路進(jìn)行約束,從而在性能、面積和時(shí)序之間尋求平衡。
圖2 性能面積和時(shí)序的平衡關(guān)系
與DFT的關(guān)系: DFT插入的測(cè)試邏輯也要與Function的邏輯一起綜合,也受上述三個(gè)因素的制約,所以Synthesis與DFT關(guān)系密切。
流程
邏輯綜合的流程為:翻譯(Translation)、優(yōu)化(Optimize)、映射(Mapping)。
圖3 綜合流程
1.翻譯: 綜合工具將RTL-level的邏輯電路用門(mén)級(jí)的邏輯來(lái)實(shí)現(xiàn),DC工具用自帶的GTECH庫(kù)中的標(biāo)準(zhǔn)單元去搭建門(mén)級(jí)邏輯電路,最終形成一個(gè)初級(jí)的、未優(yōu)化的門(mén)級(jí)電路。
(GTECH:Generic Technology, 是Synopsys公司提供的獨(dú)立于工藝的, 不包含約束的元件庫(kù))
2.映射: 將門(mén)級(jí)邏輯電路映射到由制造商提供的工藝庫(kù)上。(工藝庫(kù)包含時(shí)序、面積、功耗等約束信息)
3.優(yōu)化: 綜合工具對(duì)門(mén)級(jí)邏輯電路進(jìn)行分析,去掉電路中的冗余單元,根據(jù)設(shè)計(jì)者添加的約束條件對(duì)電路進(jìn)行優(yōu)化。
步驟
(1)準(zhǔn)備HDL文件和dc_synthesis.tcl運(yùn)行腳本
對(duì)于DFT工程師,需要準(zhǔn)備好插入DFT測(cè)試邏輯之后RTL-level的HDL 文件和dc_synthesis.tcl運(yùn)行腳本
(2)設(shè)置路徑和庫(kù)文件
設(shè)置DC工作路徑和庫(kù)文件搜索路徑
define_design_lib work –path work
set search_path /project/dft/library/db
在dc_synthesis.tcl運(yùn)行腳本中設(shè)置target_library(目標(biāo)庫(kù)),和link_lbirary(鏈接庫(kù))
set link_library [list adk.db memory.db pad.db]
set target_library [list adk.db memory.db pad.db]
(3)用analyze/elaborate命令讀入設(shè)計(jì)
讀入1st insertion和2nd insertion之后的所有RTL文件
*source ../inputs/use_in_synthesis.tcl *
分析HDL文件代碼檢查設(shè)計(jì)錯(cuò)誤。
讀入1st insertion和2nd insertion之后的sdc文件
source ../../tsdb_outdir/dft_inserted_designs/{design_name}_{design_id}.dft_inserted_ design/${design_name}.sdc。
elaborate ${design_name} //建立HDL代碼的門(mén)級(jí)描述
link //將讀到DC中的模塊連接起來(lái)
current_design ${design_name} //設(shè)置當(dāng)前設(shè)計(jì)名稱
check_design //設(shè)計(jì)規(guī)則檢查
(4) 設(shè)置約束條件
可以在constrait.tcl約束腳本里將約束條件設(shè)置好,再導(dǎo)入到dofile。也可以直接在dofile里設(shè)置。
*set preserve_instances [tessent_get_preserve_instances icl_extract]
*
set optimize_instances [tessent_get_optimize_instances icl_extract]
set_boundary_optimization $preserve_instances false
set_ungroup $preserve_instances false
set_boundary_optimization $optimize_instances true
preserve_instances表示不做邊界優(yōu)化的instances
optimize_instances表示做邊界優(yōu)化的instances
set_boundary_optimization表示對(duì)指定instance做邊界優(yōu)化
boundary_optimization即邊界優(yōu)化是一種優(yōu)化策略, 指是否允許DC跨module的邊界優(yōu)化, 允許的話, 有些沒(méi)用的端口會(huì)被去掉, 有些邏輯會(huì)被優(yōu)化掉, 有些信號(hào)的名字也會(huì)丟失。對(duì)于DFT工程師不希望插入的邏輯被優(yōu)化掉,所以要對(duì)插入的邏輯有選擇地進(jìn)行邊界優(yōu)化
set_ungroup表示對(duì)指定instance做ungroup
ungroup指的是打破設(shè)計(jì)的層次關(guān)系, 把hierarchical設(shè)計(jì)變成flat設(shè)計(jì), 不需要層次關(guān)系的端口, 更有利于優(yōu)化
圖4 ungroup過(guò)程
(5) 用compile命令對(duì)施加約束的門(mén)級(jí)網(wǎng)表進(jìn)行編譯,生成優(yōu)化的門(mén)級(jí)網(wǎng)表
(6) 用write/write_sdf/write_sdc/命令將優(yōu)化后的門(mén)級(jí)網(wǎng)表以指定的格式保存到指定的路徑
write -f verilog -output ../outputs/${design_name}.synthesis.v
write_file -format ddc -output ../outputs/${design_name}.synthesis.ddc
write_sdc ../outputs/${design_name}.synthesis.sdc
write_sdf ../outputs/${design_name}.synthesis.sdf
圖5 綜合具體流程
約束
DC綜合流程中設(shè)置約束的種類有:時(shí)序約束、面積約束。時(shí)序約束:包括時(shí)鐘約束、輸入/輸出接口約束和時(shí)序例外約束。時(shí)序約束是通過(guò)約束各類延遲信息,保證門(mén)級(jí)電路能夠正常工作。
圖6 約束的分類
1. 時(shí)鐘約束: 是對(duì)主時(shí)鐘進(jìn)行約束定義,幫助時(shí)序分析工具定義時(shí)序路徑分析的一個(gè)時(shí)間零點(diǎn),時(shí)鐘傳輸過(guò)程中的延時(shí)和不確定性也都會(huì)基于這個(gè)時(shí)間零點(diǎn)進(jìn)行計(jì)算和分析。
主時(shí)鐘: 是指由外部輸入模塊內(nèi)部的時(shí)鐘,或是內(nèi)部模塊產(chǎn)生的時(shí)鐘。
約束的命令為:
create_clock -name clk -period 10 -waveform {0 5}
該命令用于定義有特定周期和波形的時(shí)鐘
create_clock用于定義一個(gè)時(shí)鐘
-name用于指定時(shí)鐘名
-period用于指定時(shí)鐘周期
-waveform用于指定上升沿和下降沿的時(shí)刻
圖7 時(shí)鐘約束1
圖8 時(shí)鐘約束2
set_clock_latency –source 3 [get_clks CLK]
上述命令用于對(duì)時(shí)鐘源延時(shí)進(jìn)行約束
set_clock_latency 1 [get_clks CLK]
上述命令用于對(duì)時(shí)鐘網(wǎng)絡(luò)延時(shí)進(jìn)行約束
set_clock_uncertainty -setup -hold
上述命令用于對(duì)時(shí)鐘的偏移和抖動(dòng)進(jìn)行約束
可通過(guò)*-setup 和 -hold*參數(shù)設(shè)置建立時(shí)間和保持時(shí)間的偏移值
set_clock_transition -max 3 [get_clks CLK]
上述命令用于對(duì)時(shí)鐘的轉(zhuǎn)換時(shí)間進(jìn)行建模。默認(rèn)的上轉(zhuǎn)換時(shí)間為從電壓的20%上升至80%的時(shí)間,下轉(zhuǎn)換時(shí)間為從電壓的80%下降至20%的時(shí)間
可通過(guò)*-rise 和 -fall*參數(shù)設(shè)置上轉(zhuǎn)換時(shí)間和下轉(zhuǎn)換時(shí)間:
set_clock_transition -rise 2 -fall 3 [get_clks CLK]
圖9 時(shí)鐘約束3
2. IO約束: 指定input信號(hào)和output信號(hào)輸入或輸出模塊的延遲時(shí)間。
set_input_delay
用于指定輸入數(shù)據(jù)的路徑延時(shí), 分析從外部輸入到內(nèi)部寄存器的延遲, 需滿足內(nèi)部寄存器的建立/保持時(shí)間。
set_output_delay
用于指定輸出數(shù)據(jù)的路徑延時(shí), 分析從內(nèi)部寄存器到外部輸出的延遲,需滿足外部寄存器的建立/保持時(shí)間。
圖10 IO約束
3.時(shí)序例外約束: 可以對(duì)某些路徑放寬時(shí)序要求, 減少對(duì)布局布線資源的占用, 從而盡可能多地釋放出寶貴的資源給時(shí)序約束要求較高的關(guān)鍵路徑,合理分配資源,能夠更好地確保整個(gè)系統(tǒng)的時(shí)序收斂。
對(duì)時(shí)序例外進(jìn)行約束的命令有:
set_multicycle_path
在2個(gè)時(shí)鐘域之間傳輸數(shù)據(jù),指定從起始時(shí)鐘沿到目標(biāo)時(shí)鐘沿所需的時(shí)鐘周期數(shù)。允許數(shù)據(jù)在多個(gè)周期后穩(wěn)定并接收, 時(shí)序要求寬松。
set_false_path
指定在設(shè)計(jì)中不做分析的時(shí)序路徑,即最低優(yōu)先級(jí)的路徑。
圖11 時(shí)序例外約束
4.面積約束: 就是告訴DC工具, 綜合完成后的電路面積不能超過(guò)多少。
set_max_area 100
指定綜合完成后的最大面積為100(單位與工藝庫(kù)的要求一致)。
-
寄存器
+關(guān)注
關(guān)注
31文章
5294瀏覽量
119817 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59665 -
SDC
+關(guān)注
關(guān)注
0文章
48瀏覽量
15518 -
DFT算法
+關(guān)注
關(guān)注
0文章
27瀏覽量
7520 -
HDL語(yǔ)言
+關(guān)注
關(guān)注
0文章
46瀏覽量
8905
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論