2021-10-21
利用python生成通用的DC综合脚本
- 生成mako模板
- 生成json文件
- 创建python脚本来生成DC综合脚本
- 参考文章
生成mako模板
在设计中DC综合都是按照一定流程进行的,所以大部分内容不会被改变,在这里首先生成一个DC综合脚本的mako模板,并命名为“dc_template”。该模板中的"&{----}"都为可修改的参数部分。
##### set library and path #####
set lib_path ${lib_path}
set lib_file ${lib_file}
set symlib_path ${symlib_path}
set symlib_file ${symlib_file}
set search_path [concat $search_path $lib_path]
set target_libray [list $lib_file]
set link_library [list * $lib_file]
set symbol_library [list $symlib_path/$symlib_file]##### detect latch #####
define_name_rules VLSI_NET -allowed "a-zA-Z0-9_" -first_restricted "0-9_" -type net -max_length 256
define_name_rules VLSI_CELL -allowed "a-zA-Z0-9_" -first_restricted "0-9_" -type net -max_length 256
define_name_rules VLSI_PORT -allowed "a-zA-Z0-9_" -first_restricted "0-9_" -type net -max_length 256
define_name_rules TAN_RULE -allowed "a-zA-Z0-9_" -first_restricted "0-9_\[]" -max_lendth 256 -map {{{"*cell", "mycell"},{"*-return","myreturn"}}};
set hdlin_check_no_latch##### read_verilog #####
% for rtl in rtls:
read_verilog ${rtl}
%endfor
current_design ${top_name}
link
uniquify##### constraint set #####
set auto_wire_load_selection true
set_wire_load_mode top
creat_clock -name ${clk_name} -period ${clk_period} [get_ports ${clk_name}]
set_clock_latency -source ${clk_latency} ${clk_name}
set_ideal_network [all_clocks]
set_ideal_network [get_ports ${rst_name}]
set_clock_uncertainty &{clk_uncertain} -setup [all_clocks]
set_input_delay ${max_input_delay} -max -clock ${clk_name} [remove_from_collection [all_inputs] {${rst_name} ${clk_name}}
set_input_delay ${min_input_delay} -min -clock ${clk_name} [remove_from_collection [all_inputs] {${rst_name} ${clk_name}}
set_output_delay ${max_output_delay} -max -clock ${clk_name} [all_outputs]
set_output_delay ${min_output_delay} -min -clock ${clk_name} [all_outputs]
set_max_area ${max_area}
set_max_fanout ${max_fanout} [get_designs ${top_name}]
set_max_transition ${max_transition} [get_designs ${top_name}]
set_drive ${drive} [all_inputs]
set_load ${load} [all_outputs]
set_fix_multiple_port_nets -all -buffer_constants##### compile #####
compile -map_effort medium -boundary_optimization##### report #####
remove_unconnected_ports [get_cells -hier {*}]
change_names -hierarchy -rules TAN_RULE
report_timing -delay max -max_paths ${max_timing_path > [list ${rpt_dir}/${top_name}_timing.rpt]}
report_area > [list ${rpt_dir}/${top_name}_area.rpt]
report_constrain -all_violators -verbose > [list ${rpt_dir}/${top_name}_constrain.rpt ]##### generate sdc and netlist file #####
change_name -rule verilog -hier
write -format verilog -hierarchy -output [list ${top_name}_netlist.v]
write_sdc [list ${top_name}.sdc]
生成json文件
完成mako模板设计后,为了配置模板中的参数(&{----}),所以需要生成一个json文件,并命名位"syn.json"。即在这里将所有需要配置的参数放入到json文件中进行配置。(冒号后面参数为自己需要配置的参数)
{"lib_path" :"library path",
"lib_file" :"xxxxx.sdb",
"symlib_path" :"symbol library path",
"symlib_file" :"xxxxx.sdb",
"rtl_path" :"rtl code path",
"rtl_file" :"rtl file list:rtl.flist",
"rpt_dir" :"report save path",
"top_name" :"design top module name",
"netlist" :"netlist save path",
"sdc_file" :"sdc save path",
"clk_name" :"clock name",
"clk_period" :"clock period",
"clk_latency" :"clock latency",
"clk_uncertain" :"clock uncertainty",
"rst_name" :"reset name",
"max_input_delay" :"max input delay",
"min_input_delay" :"min input delay",
"max_output_delay" :"max output delay",
"min_output_delay" :"min output delay",
"max_timing_path" :"max timing path",
"max_area" :"max area",
"max_fanout" :"max fanout",
"max_transition" :"max transition",
"max_capcitance" :"max capacitance",
"drive" :"drive",
"load" :"load"
}
创建python脚本来生成DC综合脚本
import os
import json
from mako.template import Template#### config ####
jsonfile = open('syn.json').read()
cfg = json.loads(jsonfile)
print(cfg)
lib_path = cfg["lib_path"]
lib_file = cfg["lib_file"]
symlib_path = cfg["symlib_path"]
symlib_file = cfg["symlib_file"]
rtl_path = cfg["rtl_path"]
rtl_file = cfg["rtl_file"]
rpt_dir = cfg["rpt_dir"]
top_name = cfg["top_name"]
netlist = cfg["netlist"]
sdc_file = cfg["sdc_file"]
clk_name = cfg["clk_name"]
clk_period = cfg["clk_period"]
clk_latency = cfg["clk_latency"]
clk_uncertain = cfg["clk_uncertain"]
rst_name = cfg["rst_name"]max_input_delay = cfg["max_input_delay"]
min_input_delay = cfg["min_input_delay"]
max_output_delay = cfg["max_output_delay"]
min_output_delay = cfg["min_output_delay"]
max_timing_path = cfg["max_timing_path"]max_area = cfg["max_area"]
max_fanout = cfg["max_fanout"]max_transition = cfg["max_transition"]
max_capacitance = cfg["max_capacitance"]drive = cfg["drive"]
load = cfg["load"]
rtls = open(rtl_file,'r').read().splitlines()
print(rtls)
print('Generate syn.tcl ...')
t = open('mako.template','r').read()
mytemplate = Template(t)
scr = mytemplate.render(lib_path = lib_path ,lib_file = lib_file ,symlib_path = symlib_path ,symlib_file = symlib_file ,rtl_path = rtl_path ,rtl_file = rtl_file ,rpt_dir = rpt_dir ,top_name = top_name ,netlist = netlist ,sdc_file = sdc_file ,clk_name = clk_name ,clk_period = clk_period ,clk_latency = clk_latency ,clk_uncertain = clk_uncertain ,rst_name = rst_name ,max_input_delay = max_input_delay ,min_input_delay = min_input_delay ,max_output_delay = max_output_delay ,min_output_delay = min_output_delay ,max_timing_path = max_timing_path ,max_area = max_area ,max_fanout = max_fanout ,max_transition = max_transition ,max_capacitance = max_capacitance ,drive = drive ,load = load ,rtls = rtls)tcl = open('syn.tcl','w')
tcl.write(scr)
print('Complete the DC script')
参考文章
参考文章
http://exasic.com/article/index.php?md=py-35
2021-10-21相关推荐
- 【小5聊】微信公众平台用户信息相关接口调整,不再返回性别和地区信息(2021.10.21)
应该是为了进一步加强用户隐私信息以及过度的用户性别地区营销而进行的接口调整 2021.10.12 发布通知,平台预计10月20日完成调整,请开发者及时进行调整适配,避免影响相关服务及用户体验 各位同行 ...
- 2021.10.21 练习题
7 递归法计算两个数的最大公约数(4分) 题目内容: 利用最大公约数的性质计算.对正整数a和b,当a>b时,若a中含有与b相同的公约数,则a中去掉b后剩余的部分a-b中也应含有与b相同的公约数, ...
- Functional Options: Go中实现优雅的API的方法 | Gopher Daily (2021.10.22)
每日一谚:学会不要马上增加太多的功能,要把核心思想建立起来并进行测试 - Leah Culver Go技术生态 Go很大可能在go 1.19版本中支持编译器的FGO(feedback-guided o ...
- 电动力学每日一题 2021/10/10
电动力学每日一题 2021/10/10 上大学以前觉得自己大概数理化都能学得不错,后来大一有两门课让我认清了现实,一门是程序设计,另一门是模电.程序设计学C语言,我当时学得勤奋刻苦,每次上机课都会主动 ...
- 2021.10.25-10.31 AI行业周刊(第69期):AI进化之路
本周<Opencv基础及AI项目实战>以及<Pytorch模型推理及多任务通用范式>两门课程已经完结. 两门课程中,针对所有完成作业的同学,都颁发了毕业证书. 并且对于完成比较 ...
- Python 最近两条好消息:①TIOBE排名超过C和Java②新版本发布3.10.0,还有今天刚发布的《What’s New in Python(2021.10.15)》
来自TIOBE的最新10月份统计数据显示,Python首次超越Java.JavaScript.C语言等,成为最受欢迎的编程语言.TIOBE过去20年一直在追踪编程语言的受欢迎程度,其数据来自于对25个 ...
- 2021.1.21——星露谷作物计算器的可视化
2021.1.21--星露谷作物计算器的可视化 前言 目标 excel表格 代码 效果图 总结 前言 书承上文,之前做的计算器,仅仅是在调用excel里的数据,生成图表并放回到excel表里,每次要查 ...
- 前端16天--IFC、BFC、H5新特性、选择器、伪类元素、扩展盒模型、圆角、盒子阴影等--2021/4/21
前端16天–IFC.BFC.H5新特性–2021/4/21 HTML5是HTML标准的最新演进版本: 1.是一个新的HTML语言版本包含了新的元素.属性和行为. 2.同时包含了一系列可以被用来让web ...
- 尚硅谷——谷粒商城项目开发记录——2021.11.21
尚硅谷--谷粒商城项目开发记录--2021.11.21 概念: 1.var和let的区别: 作用域: var 声明的变量往往会越域 let 声明的变量有严格局部作用域 声明次数: var 可以声明多次 ...
- 2021.8.21 网易秋招开发笔试(题目 + java代码)
2021.8.21 网易秋招开发笔试 一.题目: 二.程序 //采用的是深度优先搜索 import java.util.HashMap;public class wangyi {public stat ...
最新文章
- commont-net.jar 代码结构图
- zookeeper思维导图
- Duplicate复制数据库并创建物理StandBy(spfile+不同实例名+不同路径)
- 游戏安全报告(2017 - 2018全年)
- HK-2000多功能数据采集仪支持命令说明
- set, unordered_set模板类
- hdu2089 不要62
- 安卓版的水经注地图_水经注万能地图下载器
- c++vs解决字符常量过多
- Stimulsoft Dashboards.WEB 2022.2.3 Crack
- linux识别新显示器,Linux 显示器未正确识别 最佳分辨率 Ubuntu 10.10 X11
- 算法练习, 红白花放置方法数
- 小提琴机器人拉法_小提琴的弓怎么拉 有什么技巧
- week16 实验B ZJM要抵御宇宙射线
- Ch支持java不,ch.hsr.geohash包使用
- centos怎么卸载mysql
- CISP——访问控制(自主访问控制和强制访问控制)
- B站视频控制代码、bilibli快捷键
- php自动生成发票,PHP创建PDF发票
- 美女谁都爱看,跳舞的美女更是,python批量采集(含源码)