【ysyx】verilator初使用 02

本文详细介绍了如何使用Verilator工具在C++中进行电路模拟,涉及添加Verilator路径、创建`our.v`和`sim_main.cpp`示例,以及如何编译和运行双控开关模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用verilator运行C++例子

① 为了能在verilator安装路径以外的地方运行,需要添加以下路径
在这里插入图片描述
VERILATOR_ROOT等号后面为自己的verilator的安装路径

② 在任意文件夹下创建两个文件our.vsim_main.cpp
在这里插入图片描述
在这里插入图片描述
Vour.h对应的是our.v文件,包括第8行代码的Vour也是与our.v文件名相关

③命令行输入

verilator --c --exe --build -j 0 -Wall sim_main.cpp our.v

--c:获取C++的输出文件
--exe:使cpp文件能创建成可执行文件
--build:使verilator能够自动make
-j 0:创建线程
-Wall:警告功能使能

④ 运行完成后,会生成obj_dir文件
在这里插入图片描述
⑤运行obj_dir文件夹的Vour,终端输入以下指令

obj_dir/Vour

得到以下结果
在这里插入图片描述

使用verilator运行双控开关

①创建双控开关文件double_sw.v,module的名字一定要和文件名对应(这是容易踩坑的地方)
在这里插入图片描述
② 修改sim_main.cpp内容
在这里插入图片描述
蓝色部分是随机产生1bit的数,通过eval()函数更新电路状态

③ 输入执行命令

verilator --c --exe --build -j 0 -Wall sim_main.cpp double_sw.v

④ 会生成一个obj_dir文件夹,运行里面的Vdouble_sw文件
在这里插入图片描述

obj_dir/Vdouble_sw

⑤ 因为程序没有停止的函数,需要手动crtl+c停止

### YSYX PA1 技术文档概述 YSYX 是基于 RISC-V 架构的教学实验平台之一,通常用于高校计算机体系结构课程中的实践教学。PA1 主要涉及的内容是对指令集架构的理解与实现,具体来说是在 NEMU 平台上完成对 RISC-V 指令的支持。 #### 一、PA1 的核心目标 PA1 的主要目的是帮助学习者深入了解 RISC-V 指令集的工作机制,并通过实际编码来验证这些理论知识。这一步骤的重点在于实现一个能够解析和执行基本 RISC-V 指令的模拟器模块[^2]。 以下是 PA1 中可能涉及到的关键技术点: 1. **RISC-V 指令集支持** - 需要在现有框架下扩展对更多 RISC-V 指令的支持。 - 这些指令包括但不限于 `add`, `sub`, `lw`, 和 `sw` 等基础算术逻辑操作以及内存访问命令。 2. **寄存器文件设计** - 设计并实现通用目的寄存器 (General Purpose Registers),这是 CPU 数据存储的核心组件。 - 寄存器应具备读写功能,并遵循 RISC-V 规范定义的行为模式。 3. **数据通路搭建** - 创建必要的硬件模型以表示 ALU(算数逻辑单元)、PC(程序计数器)以及其他控制信号路径。 - 正确连接各部件之间的交互关系,确保每条指令都能按预期顺序被执行。 4. **异常处理机制引入** - 添加步错误检测能力,比如非法地址访问或者未定义的操作码识别等功能。 - 当遇到上述情况时,系统应当停止正常流程并向用户提供相应提示信息。 #### 二、开发环境设置建议 为了顺利完成 YSYX PA1 的任务,推荐按照如下方式配置工作区: - 使用 VMware 虚拟化软件安装 Ubuntu 20.04 LTS 版本操作系统作为主机运行环境; ```bash sudo apt update && sudo apt upgrade -y ``` - 下载最新版 NEMU 源代码仓库至本地目录: ```bash git clone https://github.com/njucourses/nemu.git cd nemu make ``` - 安装依赖项以便编译 C/C++ 文件及其他工具链资源包: ```bash sudo apt install build-essential cmake git libboost-all-dev python3-pip -y pip3 install --upgrade pip setuptools wheel ``` 以上步骤完成后即可进入正式编程环节开始挑战各项子课题啦! ### 示例代码片段展示 下面给出一段简单的伪代码用来演示如何加载一条整型数值到指定位置处: ```c void load_word(int reg_num, uint32_t value){ /* 将value保存进编号为reg_num的目标寄存器 */ cpu.gpr[reg_num] = value; } ``` 此函数实现了向某个特定 GPR(Global Processor Register)赋值的功能,在后续复杂运算过程中会频繁调用此类基础服务例程。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值