脚本学习(1)验证目录自动化生成脚本

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)
相关推荐
我送炭你添花9 分钟前
Pelco KBD300A 模拟器:07+2.Python 专题:线程安全与信号槽机制——项目多线程最佳实践
python·自动化·运维开发
小途软件44 分钟前
ssm607家政公司服务平台的设计与实现+vue
java·人工智能·pytorch·python·深度学习·语言模型
laplace01231 小时前
Part3 RAG文档切分
笔记·python·中间件·langchain·rag
dhdjjsjs1 小时前
Day59 PythonStudy
python
brent4231 小时前
DAY48 Grad-CAM与Hook函数
python
闲人编程1 小时前
商品管理与库存系统
服务器·网络·数据库·python·api·数据模型·codecapsule
ServBay1 小时前
8 个 Python 自动化脚本让你告别重复劳动
后端·python
测试老哥1 小时前
2026最新软件测试面试热点问题(含答案+文档)
自动化测试·软件测试·python·测试工具·面试·职场和发展·测试用例
paopao_wu1 小时前
LangChainV1.0[05]-记忆管理
人工智能·python·langchain·ai编程
头发够用的程序员2 小时前
Ultralytics 代码库深度解读【六】:数据加载机制深度解析
人工智能·pytorch·python·深度学习·yolo·边缘计算·模型部署