Oasys-RTL工具的作用,用官方的语言来说就是:enable you to start with RTL and produce a placement-aware optimized netlist and floorplan.
也就是Oasys-RTL可以基于RTL做后面的综合、优化、测试等工作。
Oasys-RTL的使用流程(可以在这个基础上根据需要进行增删):
① 读取文件。事先要准备好各种库和文件,包括libraries、LEF、RTL等等。
Liberty Timing File (.lib):是最基本的时序模型,包含延迟、转换、建立和保持时间等要求。Liberty Timing File必须第一个被读取。
Library Exchange Format (.lef):有两种,分别是Technology LEF和LEF,分别存储layer信息和各种模块的layout信息。
Register Transfer Level (.vhd/.v/.sv):待综合的RTL描述,也就是用硬件描述语言写的程序。
还可以读取很多其他的特定文件,非必需所以先不做介绍。
② 综合。若后面需要做DFT,可将扫描链一起综合;若需低功耗设计,可与门控时钟一起综合。
③ 设置时序和布局上的约束。
④ 优化。对面积、时序、布局以及出现的阻塞进行优化。
⑤ DFT。插入扫描链对电路进行测试,对出现问题的地方进行修复。
⑥ 输出所需文件。如verilog文件、DEF文件、MXDB文件等。
然后按照上面的流程写一个脚本文件,这里就取名叫demo.tcl:
1 #===========================① 读取文件==========================# 2 # 设置各种库的路径 3 set lib_area "libs的路径" 4 set lef_area "lefs的路径" 5 6 # 设置用到的lib库,可能有多个 7 set timing_libs " \ 8 $lib_area/第1个timing_lib的文件名 \ 9 $lib_area/第2个timing_lib的文件名 \ 10 $lib_area/第3个timing_lib的文件名 \ 11 ...... 12 $lib_area/第n个lib的文件名" 13 14 # 设置用到的Technology LEF 15 set tech_file "$lef_area/Technology LEF的文件名" 16 17 # 设置用到的LEF 18 set lef_files " \ 19 $lef_area/第1个LEF的文件名 \ 20 $lef_area/第2个LEF的文件名 \ 21 $lef_area/第3个LEF的文件名 \ 22 ...... 23 $lef_area/第n个LEF的文件名" 24 25 # 将所有上面列好的timing_lib读取到一个目标库中,并给目标库命名,这里命名为target_timing 26 foreach lib $timing_libs { 27 read_library $lib -target_library target_timing 28 } 29 30 # 读取设置好的technology LEF 31 read_lef $tech_file 32 33 # 读取设置好的LEF 34 foreach lef $lef_files { 35 read_lef $lef 36 } 37 38 # 设置综合优化时使用的liberty Timing File为target_timing 39 set_target_library target_timing 40 41 # 将target_timing中所有单元模块设置为可使用(根据需要来,可以设置某些单元模块不可用) 42 set_dont_use [get_lib_cell * ] false 43 44 # 设置RTL文件路径,再将其赋给变量search_path 45 set rtl_dir "RTL的路径" 46 set search_path "${rtl_dir}" 47 48 # 设置需要综合的RTL模块。这里假设用的语言是VHDL,其他语言同理 49 set rtl_list { 50 module1.vhd 51 module2.vhd 52 module3.vhd 53 ...... 54 顶层模块名.vhd 55 } 56 57 # Oasys-RTL根据设置好的路径search_path去读取$rtl_list中的所有模块 58 read_vhdl $rtl_list 59 60 # 检查库文件 61 check_library 62 63 #============================② 综合=============================# 64 65 # 设置top_module为上面读取的RTL的顶层模块 66 set top_module 顶层模块名 67 68 # 从顶层模块从上至下进行综合,可根据需要插入扫描链、门控时钟 69 synthesize -module $top_module -map_to_scan true -gate_clock 70 71 #==========================③ 设置约束===========================# 72 73 # 预先写一个SDC(Synopsys Design Constraints)文件(即时序约束文件),设置时钟、延迟等各种时序条件 74 # 读取该SDC文件。-verbose:输出读取该文件时的详细信息 75 read_sdc -verbose sdc文件路径+文件名 76 77 # 设置布线最大利用率约束,可多次设置 78 # 参数1:选择Technology LEF中定义的金属层 79 # 参数2:最大利用率百分比(写成小数形式) 80 set_route_layer_max_usage 参数1 参数2 81 ...... 82 83 # 输出设计特性,包括设计用到的单元模块及其数量、面积、泄露功耗,若进行了布局优化,则还会有芯片面积、导线长度等信息 84 report_design_metrics 85 86 # 检查时序 87 check_timing 88 89 #============================④ 优化=============================# 90 91 # 针对时序进行优化,再输出时序(会报告整个设计在时序上的最长路径的详细信息)和设计特性 92 optimize -virtual 93 report_timing 94 report_design_metrics 95 96 # 针对布局进行优化,再输出时序和设计特性 97 optimize -place 98 report_timing 99 report_design_metrics 100 101 #=============================⑤ DFT=============================# 102 103 # DFT可以调用其它专业软件进行,这里用Oasys-RTL简单进行DFT。 104 105 # 设置无需进行扫描测试的电路 106 set_dont_scan 具体哪个模块的哪个位置 107 108 #设置DFT用到的端口为se(scan enable),命名为se,扫描时高电平有效,打开默认扫描使能,创建该端口 109 define_test_pin -name se -pin se -scan 1 -default_scan_enable true \ 110 -create_port 111 112 #设置用于修复DFT错误的端口,为test_mode,命名为test_mode,扫描时高电平有效,创建该端口 113 define_test_pin -name test_mode -pin test_mode -scan 1 -create_port 114 115 # 设置测试时钟为clk端口 116 define_test_clock -pin clk 117 118 # 其他需要预先设置的pin都要写好! 119 120 # 如果前面插入了门控时钟,则可以把门控时钟的测试pin与se连接 121 connect_clock_gating_test_pin -test_pin se 122 123 # 进行DFT 124 check_dft -auto_test_clock -auto_test_pins 125 126 # 用前面设置的clk和test_mode,对DFT发现的不可控时钟和不可控的异步置位复位信号进行修复 127 fix_dft_violations -type all -test_clock clk -test_control test_mode 128 129 # 再次进行DFT 130 check_dft 131 132 # 输出DFT中出现的错误 133 report_dft_violations 134 135 #=========================⑥ 输出所需文件==========================# 136 137 # 可以根据需要进行一次最终优化,输出时序和设计特性 138 optimize 139 report_timing 140 report_design_metrics 141 142 # 输出所需文件,以.odb(Oasys-RTL database)和.v文件为例,其它格式文件同理 143 write_db odb文件路径+文件名 144 write_verilog verilog文件路径+文件名
脚本文件demo.tcl写好后,就可以直接启动Oasys-RTL,执行demo.tcl。
进入demo.tcl所在目录(也可以不进入,但是执行命令时demo.tcl前面需要加上文件所在路径)。
启动oasys(可以通过-log将运行的所有信息保存在一个日志文件中):
oasys (-log 日志文件路径+文件名)
在Oasys-RTL的命令行用source命令读取并执行tcl文件:
[oasys-RTL]$ source (tcl文件路径/)demo.tcl
执行后可以看到全部执行信息。如果出现错误停止运行,则根据报错信息对输入的文件进行修改,再重新执行上面的source命令。
基本的使用流程就是这样了,后面也许会再进一步记录Oasys-RTL工具的相关内容。
----------------------莫问收获,只问耕耘----------------------
标签:文件,Oasys,lef,lib,RTL,test,timing,工具 From: https://www.cnblogs.com/stu-wtjm/p/17058747.html