后端设计笔记1 - 逻辑综合

1.理论

2.实践

项目介绍OC8051

 

 3.DCT介绍

1.为什么要用DCT

DCT需要的数据

如何使用DCT

DCT实践

#source ../scripts/dc_setup.tcl
source ../scripts/icc_setup.tcl

sh mkdir -p ../rpts
sh mkdir -p ../output_data

##################################################独特的####################
create_mw_lib   -technology $TECH_FILE \
                -mw_reference_library $MW_REFERENCE_LIB_DIRS \
                $MW_DESIGN_LIBRARY

open_mw_lib $MW_DESIGN_LIBRARY

set_tlu_plus_files -max_tluplus $TLUPLUS_CMAX \
                   -tech2itf_map $TLUPLUS_MAP
##################################################独特的####################

set_svf ../output_data/${top}.svf


define_design_lib temp_work -path ./tmp_work
#analyze -format verilog ${RTL_SOURCE_FILES}
#elaborate ${DESIGN_NAME}
source /disk2/course/proj/oc8051/design/read_design.dc.tcl

current_design $top
link


#sdc
read_sdc /disk2/course/proj/oc8051/design/sdc/8051.sdc
set_operating_conditions -max WORST -max_library saed90nm_max_hth \
			 -min WORST -min_library saed90nm_max_hth
#set_app_var auto_wire_load_selection false
#set_wire_load_model  -name 8000
#set_wire_load_mode top

set_max_leakage_power 0 
set_max_area 0
set_dont_touch_network [get_ports clk]


set ports_clock_root [filter_collection [get_attribute [get_clocks] sources] object_class==port]
group_path -name reg2out -from [all_registers -clock_pins] -to [all_outputs] 
group_path -name in2reg -from [remove_from_collection [all_inputs] $ports_clock_root] -to [all_registers -data_pins]
group_path -name in2out -from [remove_from_collection [all_inputs] $ports_clock_root] -to [all_outputs]

set_critical_range 3 [current_design]

##################################################独特的####################
###physical cons
set_ignored_layers -min_routing_layer M1 -max_routing_layer M6

read_floorplan /disk2/course/proj/oc8051/flow/pnr/output_data/v0/init_floorplan.for_dct.tcl

set_fix_multiple_port_nets -all -buffer_constants
##################################################独特的####################


set_clock_gating_style \
        -positive_edge_logic {integrated:saed90nm_max_hth_cg_lvt/CGLPPRX8_LVT} \
        -control_point before \
        -max_fanout 32 \
        -no_sharing \
        -minimum_bitwidth 8 \
        -sequential_cell latch
   
#extra cmds
#set_structure false
#set_flatten true -effort high


compile_ultra -gate_clock -scan -spg
report_constraint -all_violators  > ../rpts/all_vios1.rpt

compile_ultra -incr -only_design_rule -spg
#Ecompile_ultra -incremental -scan -spg
report_constraint -all_violators  > ../rpts/all_vios2.incr.rpt

set_svf -off

#outpu data
change_names -rules verilog -hierarchy
write -format ddc -hierarchy -output ../output_data/${top}.mapped.ddc
write -f verilog -hierarchy -output ../output_data/${top}.mapped.v




##############################################
############### insert scan chain ############
##############################################

set_dft_insertion_configuration -preserve_design_name true

# Do not run incremental compile as a part of insert_dft
set_dft_insertion_configuration -synthesis_optimization none
set_scan_configuration -clock_mixing mix_clocks

create_port -direction in {scan_en test_mode scan_clk}
create_port -direction in {si[0]}
create_port -direction in {si[1]}

create_port -direction out {so[0]}
create_port -direction out {so[1]}


set_dft_signal -view spec -type ScanDataIn -port si[*]
set_dft_signal -view spec -type ScanDataOut -port so[*]
set_dft_signal -view spec -type ScanEnable -port scan_en  -active_state 1 -usage {scan}
set_dft_signal -view spec -type TestMode -port test_mode  -active_state 1 -usage {clock_gating}
set_dft_signal -view existing_dft -type ScanClock -port [get_ports scan_clk] -timing {45 55}
set_dft_signal -view existing_dft -type Reset -port rst -active 0
#set_dft_signal -view existing_dft -type ScanClock -port [get_ports scan_clk] -timing {45 55}
#set_dft_signal -view spec -type ScanClock -port [get_ports scan_clk];# -timing {45 55}

set_dft_configuration -fix_clock enable -test_points enable -control_points enable
set_dft_configuration -fix_set enable
set_dft_configuration -fix_reset enable

set_scan_configuration -chain_count 2

#set_autofix_configuration -method mux -type clock -fix_data enable -control_signal test_mode -test_data scan_clock
#set_autofix_configuration -method mux -type reset -fix_data enable -control_signal test_mode -test_data rst

create_test_protocol
#dft_drc
#report_scan_configuration
#report_dft_insertion_configuration
#preview_dft
insert_dft


change_names -rules verilog -hierarchy
write_scan_def -output ../output_data/${top}.mapped.scan.def

disconnect_net data_source [get_port data_source]
remove_port data_source
#create_port -direction in scan_clk
connect_net data_source scan_clk


#compile_ultra -incremental -scan

#outpu data
write -format ddc -hierarchy -output ../output_data/${top}.mapped.scan.ddc
write -f verilog -hierarchy -output ../output_data/${top}.mapped.scan.v

环境初始化与库配置(1-12行)

  1. 创建报告和输出目录
    • ../rpts存放时序/面积报告
    • ../output_data存放网表、DDC数据库等输出文件
  2. 创建Milkyway物理库
    • -technology指定工艺文件(.tf)
    • -mw_reference_library设置参考标准单元库路径
    • 使用$MW_DESIGN_LIBRARY变量定义设计库名称

二、设计输入与链接(13-20行)

  1. 采用分层设计读取方式
    • 通过read_design.dc.tcl 脚本加载RTL设计
    • 使用current_design $top指定顶层模块
    • link命令验证设计层次完整性
  2. 设置TLUPlus文件
    • 用于RC寄生参数提取的工艺映射文件
    • -max_tluplus指定最坏情况下的互连模型

三、约束设置(21-38行)

  1. 时序约束
    • 读取8051.sdc 约束文件(时钟定义、I/O延迟等)
    • 设置最坏工况库saed90nm_max_hth
    • 定义三条关键路径组:
      • reg2out:寄存器到输出路径
      • in2reg:输入到寄存器路径
      • in2out:纯组合逻辑路径
  2. 物理约束
    • 设置布线层范围(M1-M6)
    • 读取初始布局规划文件init_floorplan.for_dct.tcl

四、逻辑综合优化(39-58行)

  1. 时钟门控配置
    • 指定CGLPPRX8_LVT单元作为门控单元
    • 设置最大扇出32,最小位宽8,禁用共享
  2. 两级优化策略
    • compile_ultra -gate_clock:主综合阶段(插入扫描链前)
    • compile_ultra -incr:增量优化(解决DRC违规)
  3. 输出中间结果
    • 生成DDC数据库和Verilog网表
    • 保存约束违例报告all_vios*.rpt

五、扫描链插入(59-105行)

  1. DFT配置
    • 创建扫描使能(scan_en)、测试模式(test_mode)、扫描时钟(scan_clk)端口
    • 设置双扫描链结构(chain_count 2)
    • 保留设计名称-preserve_design_name true
  2. 特殊信号定义
    • si[0:1]作为扫描输入端口
    • so[0:1]作为扫描输出端口
    • 配置扫描时钟时序窗口(45-55时间单位)
  3. 扫描插入流程
    • create_test_protocol生成测试协议
    • insert_dft执行实际扫描单元替换
    • 最终输出包含扫描链的DEF文件和网表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值