LogicLock( 逻辑锁定流程与实践:(时序约束、逻辑锁定、反标、增量编译))

LogicLock: 逻辑锁定流程与实践:(时序约束、逻辑锁定、反标、增量编译) https://weibo.com/p/1001603952035761388055?comment=1
2016年3月12日 02:50 阅读 19
2016年3月12日周六 晴小玄子
//*********************************
1.合理规划设计层次并划分模块;
2.分析综合,对设计的每个模块进行综合;
3.对每个子模块建立Quartus II软件工程,在每个独立的工程中分别对每个子模块进行时序约束,以满足每个子模块的时序性能和面积目标,创建LogicLock区域;
4.当所有子模块都满足要求后,导出所有模块和LogicLock区域的反标信息,作为后续设计的约束;
5.建立顶层工程,根据设计要求选择节点反标或布线反标,将每个子模块的LogicLock区域反标信息导入顶层设计中;
6.编译顶层设计,并观察顶层设计是否满足设计需要。
7. 主程序逻辑锁定。
8.增量编译,缩短实践


//-------------方法使用quartus II 11.1
//---------时序约束,逻辑锁定,反标,增量编译。
1>.总工程规划完成。(可先完成总工程,并时序约束。1分07秒)
2>.子模块单独建工程,
3>.子模块工程时序约束。(必须有约束文件,否则无法生成*.qxp)
1.新建约束文件:工程名.sdc
a:创建输入时钟约束,约束FPGA管脚进入的时钟
# Create clock constrains
create_clock -period 20.00 [get_ports clk_bank1]
b: 创建虚拟时钟,约束输入,输出信号。
# Create virtulal clk
create_clk -name clock_ext1 -period 10.00
create_clk -name clock_ext2 -period 10.00
c: DLL自行产生相应时钟。
derive_pll_clocks
d: setup 和 hold 应用于每个跨时钟区域。分析时钟不确定性。
#derive clock uncertainty
derive_clock_uncertainty
e:忽略跨时钟域分析,列出的时钟按异步处理,不报警。
#assinging them to asynchronus groups
set_clock_groups \
-asynchronous \
-group {clk_bank1} \
altpll0|altpll_component|auto_generated|pll1|clk[0]}]
f:设置输入,输出延时。
# set input and output delays
set_input_delay -clock { clock_ext } -max 4[get_ports {data1}]
set_input_delay -clock { clock_ext } -min -1 [get_ports {data1}]
set_output_delay -clock { clock_ext2 } -max 6 [get_ports {dataout}]
set_output_delay -clock { clock_ext2 } -min -3 [get_ports {dataout}]

2.assignment/LogicLock regions:timequest timing analyzer :添加时序文件。apply
3. 分析综合,analysis & synthesis /fillter
4. 运行 TimeQuest Timing Analyzer ; tool/timequest time analysis
5. read SDC file / Report SDC/Report Clocks / Report Clock Transfers /
6. 关闭 TimeQuest Timing Analyzer,运行全编译。
4>.创建LogicLock区域.
1.Assignment / LogicLock Regions Window.
2.右键选择“Root_region”项并选择“new”,新建区域并将名称取为lock_mult
3.右键选择新建的“lock_mult”项,打开属性窗口。将左侧的工程层次栏中的pipemult模块(IC型号下方)拖入,
拖入后会出现pipemult的标志.
4.全编译。
5-1.反标信息到处方法1
选择“Assignment”/“back-annotatedAssignment”选项,(与管脚相关模块用:默认或高级),可删除分配管脚。
全编译,生成pipemult.qsf反标文件。
project/exoort design partition/*.qxp 生成网表信息。
(5-2.反标信息到处方法1。导出assignment信息
选择“Assignment”/“Export Assignment”选项,勾选back-annotated,导出约束信息。)
5>.将子模块反标信息加入顶层工程。
1.打开顶层工程,全编译一遍。
2.替换底层模块设计文件
3.反标注选择。
回到主界面,单击左侧型号下方顶层名称,展开topmult,可以看到工程层次目录。
右键选择底层模块“pipemult:inst1”,选择“Locate”/“Locatein Assignment Editor”选项
选择“Import File Name”选择,*.qxp文件(pipemult.qsf备用),也就是刚才所选择输出设置信息
4.全部编译一遍(需要添加时序约束)。(1分38秒)
6>.反标注的模块可以都进行逻辑锁定。大小固定,状态浮动。
1.全编译一次。(1分38秒)
8>.增量编译。
1.Assignments /settings / incremental compilation / rapid recomplie:ON (快速重新编译,文件保持,则保留布局布线,)
export project v:(导入模块自动作为分区)
(还可选择使用细化的增量编译方法)
2.全编译,第一次,(1分38秒)
不更改,第二次,(39秒)

时间对比:
原始时间:67秒
反标后:98秒
增量编译后:39秒

汇总:反标后时间变为原来1.4倍。
【LogicLock( 逻辑锁定流程与实践:(时序约束、逻辑锁定、反标、增量编译))】增量编译后,时间变为原来0.58.

    推荐阅读