脚本学习(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)
相关推荐
OreoCC2 小时前
第N5周:Pytorch文本分类入门
人工智能·pytorch·python
zimoyin4 小时前
解决 Java/Kotlin 资源加载问题
java·python·kotlin
wjcroom4 小时前
数字投屏叫号器-发射端python窗口定制
开发语言·python
静候光阴4 小时前
python使用venv命令创建虚拟环境(ubuntu22)
linux·开发语言·python
Y1nhl4 小时前
力扣hot100_二叉树(4)_python版本
开发语言·pytorch·python·算法·leetcode·机器学习
wjcroom5 小时前
文本转语音-音画适时推送rtsp并播放
python
老胖闲聊6 小时前
Flask 全栈学习指南
后端·python·flask
小枫小疯6 小时前
Pytorch 转向TFConv过程中的卷积转换
人工智能·pytorch·python
油盐不进的吗6 小时前
4.桥接模式
开发语言·python·桥接模式
魔障阿Q6 小时前
labelimg标注的xml标签转换为yolo格式标签
xml·人工智能·python·深度学习·yolo·计算机视觉