Oasys-RTL工具的使用(一)

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工具的相关内容。

 

----------------------莫问收获,只问耕耘----------------------

 

posted @ 2023-01-19 12:35  stu_wtjm  阅读(483)  评论(0)    收藏  举报