脚本学习(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、脚本源码

#第一个IC验证脚本
import os
import argparsedef 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 Agentos.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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31420.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C#实现手写Ollama服务交互,实现本地模型对话】

前言 C#手写Ollama服务交互,实现本地模型对话 最近使用C#调用OllamaSharpe库实现Ollama本地对话,然后思考着能否自己实现这个功能。经过一番查找,和查看OllamaSharpe源码发现确实可以。其实就是开启Ollama服务后,发送HTTP请求&a…

【十四】Golang 接口

💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 接口接口定义接口初始化接口嵌套空接口存储任意类…

Spark(8)配置Hadoop集群环境-使用脚本命令实现集群文件同步

一.hadoop的运行模式 二.scp命令————基本使用 三.scp命令———拓展使用 四.rsync远程同步 五.xsync脚本集群之间的同步 一.hadoop的运行模式 hadoop一共有如下三种运行方式: 1. 本地运行。数据存储在linux本地,测试偶尔用一下。我们上一节课使用…

基于Django的协同过滤算法养老新闻推荐系统的设计与实现

基于Django的协同过滤算法养老新闻推荐系统(可改成普通新闻推荐系统使用) 开发工具和实现技术 Pycharm,Python,Django框架,mysql8,navicat数据库管理工具,vue,spider爬虫&#xff0…

基于STM32的逻辑分析仪

目录 制约性能因素协议命令下位机回复CMD_ID的回复CMD_METADATA命令的回复上报的采样数 设置使用开源软件PulseView设置操作1.设置采样数2.设置采样频率3.使能或禁止通道4.设置通道的触发条件 实现准备汇编指令精确测量时间 程序C语言初实现采集数据上报…

Kafka,Mq,Redis作为消息队列使用时的差异?|消息队列

在分布式系统中,消息队列(Message Queue,MQ)扮演着至关重要的角色,负责解耦系统、削峰填谷、提升系统的吞吐量。Kafka、传统的MQ(如RabbitMQ、ActiveMQ)和Redis在实际应用中都被广泛用作消息队列…

SpringBoot + vue 管理系统

SpringBoot vue 管理系统 文章目录 SpringBoot vue 管理系统 1、成品效果展示2、项目准备3、项目开发 3.1、部门管理 3.1.1、前端核心代码3.1.2、后端代码实现 3.2、员工管理 3.2.1、前端核心代码3.2.2、后端代码实现 3.3、班级管理 3.3.1、前端核心代码3.3.2、后端代码实现 …

JVM常用概念之本地内存跟踪

问题 Java应用启动或者运行过程中报“内存不足!”,我们该怎么办? 基础知识 对于一个在本地机器运行的JVM应用而言,需要足够的内存来存储机器代码、堆元数据、类元数据、内存分析等数据结构,来保证JVM应用的成功启动以及未来平…

计算机网络基础知识(web漏洞解析与攻防实战)

感谢机械工业出版社赠送的《web漏洞解析与攻防实战》,这本书是2023年刚刚出版的,作者是安全圈子里非常出名的do9gy和phith0n,今日有幸拜读大作,欣喜万分。受益匪浅的一点是,认识到POST请求上传文件的时候,H…

Vue 过滤器 filter(s) 的使用

即过滤器是用来格式化数据的一个函数。过滤器不会修改原始数据,它的作用是过滤数据,就是对数据进行加工处理并返回处理后的数据,比如做一些数据格式上的修改,状态转换等。 过滤器分为两种 组件内的过滤器(组件内有效) 全局过滤器…

cocos creator使用mesh修改图片为圆形,减少使用mask,j减少drawcall,优化性能

cocos creator版本2.4.11 一个mask占用drawcall 3个以上,针对游戏中技能图标,cd,以及多玩家头像,是有很大优化空间 1.上代码,只适合单独图片的,不适合在图集中的图片 const { ccclass, property } cc._decorator;c…

deepseek的regflow安装mac版本

deepseek的ragflow部署安装 一:ollama安装,自行完成,我本地已安装 二:查看大模型情况oll::命令ollama list,我本地无ragflow 三:docker安装:命令docker version ,自行完成,我本地已安装 四:安装知识库软件ragflow: 简单科普下Ragflow 是一个基于深度学习模型的问答生成工具&…

【华三】STP端口角色与状态深度解析

STP端口角色与状态深度解析:构建无环网络的基石 引言一、STP基础回顾二、端口角色详解1. 根端口(Root Port)2. 指定端口(Designated Port)3. 非指定端口(阻塞端口) 三、端口状态转换流程四、角色…

【JavaWeb学习Day23】

Maven高级 分模块设计与开发 分模块设计:将一个大项目分成若干个子模块,方便项目的维护、扩展,也方便模块间的相互引用,资源共享。 策略: 1.策略一:按照功能模块拆分,比如:公共组…

MySQL(社区版)安装过程

1.下载地址 mysql官方网站:www.mysql.com 也可以从Oracle官网进入:https://www.oracle.com/ 下载地址:https://dev.mysql.com/downloads/mysql/ 选择对应版本以及操作系统,MSI是安装包方式,ZIP是压缩包方式。 2.解…

【神经网络】python实现神经网络(二)——正向推理的模拟演练

一.神经网络假设 在开始讲解之前,首先我们假设有这样一套神经网络,一共有三层: 其中,关于神经网络的权重、偏置的符号定义如下(如果不知道什么是权重和偏置,可以参考我之前写过的一篇文章:【机器学习】机器学习是什么意思): 以下文章将沿用以上这个设…

Ubuntu用户安装cpolar内网穿透

前言 Cpolar作为一款体积小巧却功能强大的内网穿透软件,不仅能够在多种环境和应用场景中发挥巨大作用,还能适应多种操作系统,应用最为广泛的Windows、Mac OS系统自不必多说,稍显小众的Linux、树莓派、群辉等也在起支持之列&#…

leetcode 78. 子集(二进制枚举详解)c++

⼆进制枚举 ⼆进制枚举:⽤⼀个数⼆进制表⽰中的 0/1 表⽰两种状态,从⽽达到枚举各种情况。 利⽤⼆进制枚举时,会⽤到⼀些位运算的知识。关于⽤⼆进制中的 0/1 表⽰状态这种⽅法,以后在讨论状态压缩 dp 中会继续使⽤到。 ⼆进制…

PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)!

PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)! 当我们成功接入大模型时,可以选中任意代码区域进行解答,共分为三个区域,分别是选中区域、提问区域以及回答区域,我…

调试正常 ≠ 运行正常:Keil5中MicroLIB的“量子态BUG”破解实录

调试正常 ≠ 运行正常:Keil5中MicroLIB的“量子态BUG”破解实录——从勾选一个选项到理解半主机模式,嵌入式开发的认知升级 📌 现象描述:调试与烧录的诡异差异 在线调试时 程序正常运行 - 独立运行时 设备无响应 ! 编译过程 0 Err…