脚本学习(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)
相关推荐
星空33 分钟前
学习 Django 之前
python·django
27669582922 小时前
美团优选小程序 mtgsig 分析 mtgsig1.2
java·python·小程序·美团·mtgsig·mtgsig1.2·美团优选
小咕聊编程2 小时前
【含文档+PPT+源码】基于大数据的交通流量预测系统
大数据·python·django
mqiqe2 小时前
java 加入本地lib jar处理方案
java·python·jar
意.远2 小时前
PyTorch线性代数操作详解:点积、矩阵乘法、范数与轴求和
人工智能·pytorch·python·深度学习·线性代数·矩阵
带娃的IT创业者2 小时前
《Python实战进阶》No45:性能分析工具 cProfile 与 line_profiler
开发语言·python
专注于大数据技术栈3 小时前
pyspark将hive数据写入Excel文件中
hive·hadoop·python·excel
纪元A梦3 小时前
华为OD机试真题——斗地主之顺子(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
java·c语言·javascript·c++·python·华为od
钢铁男儿3 小时前
Python 使用一等函数实现设计模式(案例分析:重构“策略”模式)
python·设计模式·重构
川石课堂软件测试4 小时前
涨薪技术|0到1学会性能测试第44课-apachetop模块监控
服务器·数据库·python·功能测试·性能优化·单元测试