脚本学习(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)
相关推荐
FreakStudio16 小时前
小作坊 GitHub 协作闭环:fork-sync-dev-pr-merge 实战指南
python·单片机·嵌入式·面向对象·电子diy
普通网友17 小时前
阿里云国际版服务器,真的是学生党的性价比之选吗?
后端·python·阿里云·flask·云计算
小陈工18 小时前
2026年4月2日技术资讯洞察:数据库融合革命、端侧AI突破与脑机接口产业化
开发语言·前端·数据库·人工智能·python·安全
陈晓明start18 小时前
【python】豆包模型,自动生成测试用例初探索
python
阿kun要赚马内18 小时前
Python中元组和列表差异:底层结构分析
开发语言·python
万添裁19 小时前
pytorch的张量数据结构以及各种操作函数的底层原理
人工智能·pytorch·python
浔川python社19 小时前
张雪机车:以热爱为轮,让中国摩托驰骋世界之巅
python
zl_dfq19 小时前
Python学习5 之【字符串】
python·学习
ZC跨境爬虫19 小时前
Python异步IO详解:原理、应用场景与实战指南(高并发爬虫首选)
爬虫·python·算法·自动化