相关阅读
Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm=1001.2014.3001.5482
search_path是Design Compiler中的一个变量,指定了在不使用绝对路径和相对路径时,Design Compiler进行搜索的范围。
它具有例1所示的默认值,这因为Design Compiler安装目录/admin/setup下的.synopsys_dc.setup初始化文件有相关初始化设置命令,该文件会在每次Design Compiler启动时自动执行。
# 例1
dc_shell> printvar target_library # 或者使用echo命令和puts命令
search_path = ". /opt/Synopsys/syn2018/syn/O-2018.06-SP1/libraries/syn /opt/Synopsys/syn2018/syn/O-2018.06-SP1/minpower/syn /opt/Synopsys/syn2018/syn/O-2018.06-SP1/dw/syn_ver /opt/Synopsys/syn2018/syn/O-2018.06-SP1/dw/sim_ver"
在Design Vision也能观察到这些变量默认的值,如图1所示。
图1 变量设置窗口
为了更好地说明,首先在Design Compiler的启动目录中新建一个.synopsys_dc.setup文件,加入例2所示的命令,Design Compiler会优先执行启动目录下的初始化文件。
# 例2
set_app_var search_path "" # 或者使用set命令
绝对路径和相对路径
就像Linux中的Bash shell那样,当想在Design Compiler中表示一个文件时,可以使用绝对路径(从根目录开始的路径,使用/开头)和相对路径(使用./或../开头,./可省略)。
当想读取一个Verilog文件时,可以使用例3所示的几种方式。
# 例3
# 假设文件结构如下所示,当前目录为folder2
.
└── folder├── folder1│ ├── folder2│ │ └── test2.v│ └── test1.v└── test.v
##############################################################################
read_file -format verilog test2.v # 相对路径,相对当前目录(省略./)
read_file -format verilog ./test2.v # 相对路径,相对当前目录
read_file -format verilog ../test1.v # 相对路径,相对当前目录的父目录
read_file -format verilog /home/zhangchen/Desktop/folder/test.v # 绝对路径
这两种路径对于读取类的命令都是适用的,比如下面这些常用的命令。
- analyze
- read_verilog
- read_lib
- read_db
- read_ddc
- read_sdc
- .....
对于库变量target_library、link_library、 symbol_library和synthetic_library中的文件,会在某些时候自动读取,因此也适用上述规则。
搜索路径
search_path变量实际上是为了简便书写文件名(不包括目录)而推出的,它是一个列表,包含了一些目录名,在使用相对路径(不使用../且省略./)时,Design Compiler会从左到右依次在列表中的目录中搜索文件,注意这种相对路径已经不是相对当前工作文件夹了。
既然列表中包含了目录名,这些名字也应该遵守规则,即使用绝对路径(从根目录开始的路径,使用/开头)和相对路径(使用./或../开头,./可省略)。
这听起来有点绕,下面将会以一些例子说明搜索路径的作用。
# 例4
# 假设文件结构如下所示,当前目录为folder2
.
└── folder├── folder1│ ├── folder2│ │ └── test2.v│ └── test1.v└── test.v
##############################################################################
set_app_var search_path "/home/zhangchen/Desktop/folder/" # 设置搜索路径(绝对路径)
read_file -format verilog test.v # 相对路径,相对搜索路径
read_file -format verilog ./test2.v # 相对路径,相对当前目录
read_file -format verilog ../test1.v # 相对路径,相对当前目录的父目录set_app_var search_path "./folder1/" # 设置搜索路径(相对路径)
read_file -format verilog test1.v # 相对路径,相对搜索路径cd .. # 将当前目录切换到folder1
set_app_var search_path "folder2/" # 设置搜索路径(相对路径,省略./)
read_file -format verilog test2.v # 相对路径,相对搜索路径
read_file -format verilog test1.v # 这会导致错误,如果search_path不为空,省略./的相对路径不被当作是相对于当前目录而是相对搜索路径
搜索路径对某些命令是无效的,尝试使用cd命令切换当前目录到一个搜索目录中的子目录是无法实现的,如例5所示。
# 例5
# 假设文件结构如下所示,当前目录为folder2
.
└── folder├── folder1│ ├── folder2│ │ └── test2.v│ └── test1.v└── test.v
##############################################################################
set_app_var search_path "/home/zhangchen/Desktop/folder/" # 设置搜索路径(绝对路径)
cd folder1
Error: couldn't change working directory to 'folder1' (CMD-027)
看似如果search_path不为空,不使用../且省略./的相对路径只能表示搜索目录下及子目录中的文件,但其实可以使用..完成高于搜索目录的索引,如例6所示。
# 例6
# 假设文件结构如下所示,当前目录为folder
.
└── folder├── folder1│ ├── folder2│ │ └── test2.v│ └── test1.v└── test.v
##############################################################################
set_app_var search_path "/home/zhangchen/Desktop/folder/folder1/" # 设置搜索路径(绝对路径)
read_file folder2/../../test.v # 相对路径,相对搜索路径
可以使用which命令,显示一个路径名会被解析的完整路径,这对于搜索路径中的多个路径下有同名文件是很有用的,如例7所示。
# 例6
# 假设文件结构如下所示,当前目录为folder
.
└── folder├── folder1│ ├── folder2│ │ └── test.v│ └── test.v└── test.v
##############################################################################
set_app_var search_path "/home/zhangchen/Desktop/folder/ /home/zhangchen/Desktop/folder/folder1/ /home/zhangchen/Desktop/folder/folder1/folder2/" # 设置搜索路径(绝对路径)
which test.v # 首先在搜索路径从左往右的第一个目录中搜索
/home/zhangchen/Desktop/folder/test.v
set_app_var search_path "/home/zhangchen/Desktop/folder/folder1/ /home/zhangchen/Desktop/folder/ /home/zhangchen/Desktop/folder/folder1/folder2/" # 设置搜索路径(绝对路径)
which test.v # 首先在搜索路径从左往右的第一个目录中搜索
/home/zhangchen/Desktop/folder/folder1/test.v