1、脚本介绍
旨在一键创建符合IC验证规范的目录结构,避免手动创建目录和文件的重复劳动。
优点:模块级验证目录可一键创建,代码简单易懂,可复用性高。
缺点:子系统或系统级不适用。
2、生成的目录结构
/home/user/projects/ahb2apb/
├── rtl
│ └── dut.sv # 占位文件
├── tb
├── dv_env
│ ├── env
│ ├── agent
│ ├── interface
│ │ └── dut_if.sv # 占位文件
│ ├── sequences
│ └── cfg
├── tests
├── sim
├── scripts
│ └── run_sim.py # 占位文件
└── coverage
3、使用方法
在脚本目录下,使用命令:
python3 create_project.py --name your_project_name --root your_target_path
路径如果在当前目录可不写,默认是在当前目录下。
4、具体场景
加入了一些打印用来辅助观察生成了哪些目录以及是否完成生成。
具体场景如下:

5、脚本源码
python
#第一个IC验证脚本
import os
import argparse
def create_project(project_name, root_path="."):
"""
创建完整的项目目录结构
:param project_name: 项目名称(如 ahb2apb)
:param root_path: 项目根路径(默认为当前目录)
"""
# 定义目录结构(严格按您的要求)
dir_structure = [
"rtl", # RTL设计代码
"tb", # 测试平台顶层
os.path.join("dv_env", "env"), # 验证环境组件
os.path.join("dv_env", "agent"), # UVM Agent
os.path.join("dv_env", "interface"),# 接口定义
os.path.join("dv_env", "sequences"),# 测试序列
os.path.join("dv_env", "cfg"), # 配置类
"tests", # 测试用例
"sim", # 仿真目录
"scripts", # 脚本目录
"coverage" # 覆盖率报告
]
# 项目根目录路径
project_root = os.path.join(root_path, project_name)
print(f"🏗️ 正在创建项目目录结构:{project_root}")
# 遍历创建所有目录
for dir_path in dir_structure:
full_path = os.path.join(project_root, dir_path)
os.makedirs(full_path, exist_ok=True)
print(f"📂 已创建目录: {full_path}")
# 创建关键占位文件(可选)
placeholders = {
"rtl/dut.sv": f"// {project_name} RTL设计模块占位文件",
"dv_env/interface/dut_if.sv": f"interface dut_if;\n// {project_name} 接口信号定义\nendinterface",
"scripts/run_sim.py": f"# {project_name} 自动化仿真脚本"
}
for rel_path, content in placeholders.items():
full_path = os.path.join(project_root, rel_path)
with open(full_path, "w") as f:
f.write(content + "\n")
print(f"📄 已创建占位文件: {full_path}")
print(f"✅ 项目 '{project_name}' 目录生成完成!")
if __name__ == "__main__":
# 配置命令行参数
parser = argparse.ArgumentParser(description="生成IC验证项目目录结构")
parser.add_argument("--name", required=True, help="项目名称(如 ahb2apb)")
parser.add_argument("--root", default=".", help="项目根路径(默认当前目录)")
args = parser.parse_args()
# 调用主函数
create_project(args.name, args.root)