qtrvsim 使用

news2025/1/13 17:32:10

qtrvsim 使用

介绍

Qtrvsim 是一个基于 WebAssembly(基于非 js 语言并使得其可以在浏览器中运行)的图形化 RISC-V 微处理器模拟器,给初学者提供了一个实现 RISC-V 架构的渠道。

Developed by the Computer Architectures Education project at Czech Technical University.

github 项目链接:cvut/qtrvsim: RISC-V CPU simulator for education purposes (github.com)

1691839752338

下载使用

有两种使用方法,第一种是直接访问基于 WebAssembly 的 Qtrvsim 网站在线设计,另一种是下载仓库代码编译运行。

在线网站:https://comparch.edu.cvut.cz/qtrvsim/app

下载运行:这里作者只尝试了 Ubuntu 环境下的搭建。

$ git clone git@github.com:cvut/qtrvsim.git
# 需要安装的其他环境:Qt 5, elfutils 
$ cmake -DCMAKE_BUILD_TYPE=Release /path/to/qtrvsim
$ make

模版程序运行

下面作者演示一下在其上运行 Web 中提供的测试程序的流程。

打开 Web 网站,配置程序信息,这里选择无缓存和管道的基础配置,点击 Start Empty:

image-20230812184332926

在 File 中找到提供好的模板文件:

image-20230812184252880

可以看到模板程序是一个简单的存取操作

//  Template file with simple memory example
//  QtRVSim simulator https://github.com/cvut/qtrvsim/
//
//  template-os.S       - example file
//
//  (C) 2021 by Pavel Pisa
//      e-mail:   pisa@cmp.felk.cvut.cz
//      homepage: http://cmp.felk.cvut.cz/~pisa
//      work:     http://www.pikron.com/
//      license:  public domain

// Directives to make interesting windows visible
#pragma qtrvsim show registers # 打开寄存器窗口
#pragma qtrvsim show memory # 打开内存窗口

.globl _start
.option norelax

.text

_start:
loop:
	// load the word from absolute address
	lw     x2, 0x400(x0)
	// store the word to absolute address
	sw     x2, 0x404(x0)

	// stop execution wait for debugger/user
	// break
	// ensure that continuation does not
	// interpret random data
	beq    x0, x0, loop # 不断把 x0 的值赋给 x2,再把 x2 的值赋给 x0,赋值失败跳出循环
	nop
	nop
	ebreak # 断点

.data
.org 0x400 # 声明后续数据地址

src_val:
	.word  0x12345678 # x0 初值
dst_val:
	.word  0 # x2 初值

// Specify location to show in memory window
#pragma qtrvsim focus memory src_val

接下来,点击上方的下载标志箭头下载程序,把程序烧录到 Program 栏中;点击三角形按钮开始运行。

image-20230812185344866

可以看到程序开始逐行执行。

image-20230812185357032

左侧 Program 窗口的字段分别是:断点 breakpoint,指令地址,指令值(hex),指令本身。

右侧 memory 窗口中的值是对应内存中数据值,可以看到 0x400 处 和 0x404 处都被赋值为 0x12345678.

上方寄存器窗口存放了寄存器中存储的数据,作为临时存储的 x2 值被赋值为 0x12345678.

我们在第一条指令(0x00000200)BP 处双击打断点,这时可以看到 Core 中具体数据状态。

image-20230812185924407

PC 处是当前指令位置,Instruction 取得当前指令值,

上方 Control Unit 标明:当前指令为读取内存,读到寄存器中,且要对 src 地址做运算,因此开启了相应状态位。

rs1 rs2 rd 标明源寄存器和目标寄存器,x0 为 rs1,x2 为 rd。

立即数是指定 x0 偏移地址为 0x400.

再看第二条指令时 Core 状态如下:

image-20230812190051048

PC 值随着指令执行而逐渐增加,Control Unit 中的标志位标明:将数据写入内存,且要对 src 地址进行运算。

x0 为 rs1,x0 为 rs2,此指令不存在 rd。

可以看到寄存器中传输了 0x12345678 数据到 Data Memory 中。

立即数是指定 x0 偏移地址为 0x404.

最后再看最后一条指令的执行状态:

1691838523792

主控单元标明此指令为一个判断跳转指令,x0=0 时跳转到 loop 处也就是 0x00000200.

这里立即数采用的是 -8 的补码表示,表示若判断成功应+(-8)跳转到 0x00000200 处。

总结

Qtrvsim 提供了一个很有趣的在线 RISC-V 架构实现平台,非常适合初学者学习,实现一些 RISC-V 模块。不过目前还不是特别完善,现阶段只支持 RVxxG ,RVxxM 和一些伪指令。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.2 互联网通信安全

数据参考:CISP官方 目录 一、什么是互联网通信安全二、为什么要关注互联网通信安全三、电子邮件应用安全四、即时通讯应用安全 一、什么是互联网通信安全 1、互联网通信应用的概念 通信的进化史 互联网通信技术(OSI七层模型) 互联网应…

【第二阶段】kotlin的lambda学习

匿名函数lambdm表达式 1.两数相加 fun main() {//匿名函数lambda表达式//两数相加 等价:val addResult:(Int,Int)->String{a,b->"两数相加结果:${ab}"}val addResult{a:Int,b:Int->"两数相加结果${ab}"}println(addResul…

解码Transformer:自注意力机制与编解码器机制详述与代码实现

目录 一、 Transformer的出现背景1.1 技术挑战与先前解决方案的局限性RNN和LSTM卷积神经网络(CNN)在序列处理中的尝试 1.2 自注意力机制的兴起1.3 Transformer的革命性影响 二、自注意力机制2.1 概念和工作原理元素的权重计算加权求和自注意力与传统注意…

没有上司的舞会(树形dp)

思路: (1)每个人有一个开心值,并且人物关系呈树形分布。 (2)我们所求为根部人物及其下属的总开心值,显然存在某种递归关系;注意到要求是不能直系父子同时出现,于是考虑…

数据分析 | 为什么Bagging算法的效果优于单个评估器

1. 回归问题如何降低方差 以随机森林为例,假设随机森林中含有n个弱评估器,由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的方差和偏差,因此假设任意弱评估器上输出结果为,方差均为,则随机森林的输出…

PyTorch翻译官网教程-NLP FROM SCRATCH: CLASSIFYING NAMES WITH A CHARACTER-LEVEL RNN

官网链接 NLP From Scratch: Classifying Names with a Character-Level RNN — PyTorch Tutorials 2.0.1cu117 documentation 使用CHARACTER-LEVEL RNN 对名字分类 我们将建立和训练一个基本的字符级递归神经网络(RNN)来分类单词。本教程以及另外两个“from scratch”的自然…

Selenium图片滑块验证码

因为种种原因没能实现愿景的目标,在这里记录一下中间结果,也算是一个收场吧。这篇文章主要是用selenium解决滑块验证码的个别案列。 思路: 用selenium打开浏览器指定网站 将残缺块图片和背景图片下载到本地 对比两张图片的相似地方&#…

openocd调试esp32(通过FT232H)

之前在学习ESP32,其中有一部分课程是学习openocd通过JTAG调试程序的,因为我用的是ESP32-wroom,usb端口没有集成对应的usb转jtag的ft232,查了ESP32相关的资料(JTAG 调试 - ESP32 - — ESP-IDF 编程指南 latest 文档 (es…

【yolov系列:小白yolov7跑数据集建立环境】

首先在github上面获取别人的源码 这个是github的源码包,直接下载解压使用 打开解压后的文件夹应该可以看到这个页面。 进入文件夹的requirements.txt的页面 这篇文章是为了记录自己的环境配置过程,当作笔记使用来看,目前网上各种安装教程都…

微信小程序中键盘弹起输入框自动跳到键盘上方处理

效果展示 键盘未弹起时 键盘弹起后: 实现方式 话就不多说了 我直接贴代码了 原理就是用你点击的输入框的底部 距离顶部的位置 减去屏幕高度除以2,然后设成负值,再将这个值给到最外层相对定位的盒子的top属性,这样就不会出现顶…

linux文件I/O之 fcntl() 函数用法:设置文件的 flags、设置文件锁(记录锁)

头文件和函数声明 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); 函数功能 获取、设置已打开文件的属性 返回值 成功时返回根据 cmd 传递的命令类型的执行结&#xff0c;失败时返回 -1&#xff0c;并设置 errno 为相…

山西电力市场日前价格预测【2023-08-12】

日前价格预测 预测明日&#xff08;2023-08-12&#xff09;山西电力市场全天平均日前电价为330.52元/MWh。其中&#xff0c;最高日前电价为387.00元/MWh&#xff0c;预计出现在19: 45。最低日前电价为278.05元/MWh&#xff0c;预计出现在13: 00。 价差方向预测 1&#xff1a; 实…

【Bert101】最先进的 NLP 模型解释【02/4】

0 什么是伯特&#xff1f; BERT是来自【Bidirectional Encoder Representations from Transformers】变压器的双向编码器表示的缩写&#xff0c;是用于自然语言处理的机器学习&#xff08;ML&#xff09;模型。它由Google AI Language的研究人员于2018年开发&#xff0c;可作为…

最强自动化测试框架Playwright(9)- 下载文件

对于页面下载的每个附件&#xff0c;都会发出 page.on&#xff08;“download”&#xff09; 事件。 下载开始后&#xff0c;将发出下载事件。下载完成后&#xff0c;下载路径将变为可用 所有这些附件都下载到一个临时文件夹中。可以使用事件中的下载对象获取下载 URL、文件系…

BClinux8.6 制作openssh9.2p2 rpm升级包和升级实战

一、背景说明 BClinux8.6 安装的openssh 版本为9.3p1&#xff0c;经绿盟扫描&#xff0c;存在高危漏洞&#xff0c;需要升级到最新。 OpenSSH 命令注入漏洞(CVE-2020-15778) OpenSSH 安全漏洞(CVE-2023-38408) 目前官网只提供编译安装包&#xff0c;而BClinux8.6 为rpm方…

上市公司绿色发展专题:重污染行业企业名单与绿色创新数据

数据简介&#xff1a;上市公司&#xff0c;尤其是重污染行业上市公司实现绿色发展&#xff0c;广泛开展绿色创新&#xff0c;是我国高质量发展的必然要求&#xff0c;受到了来自学界与各级ZF的诸多关注。现有研究中对上市公司绿色发展问题的研究发现&#xff0c;重污染行业上市…

剑指offer14-I.剪绳子

昨天写的那道题是数组中除了一个元素外其余元素的乘积&#xff0c;这道题自然就想到了把一个数分成两个的和&#xff0c;然后积就是这两个数的积&#xff0c;而这两个数中的每个数又可以分成两个数&#xff0c;所以可以用动态规划的方法&#xff0c;dp[i] dp[j]*dp[i-j]。但是…

ChatGPT应用在律师行业需谨慎,南非有律师被它的幻觉误导了!

ChatGPT自去年以来大受欢迎&#xff0c;没想到它这么快会出现在法庭上。 最近&#xff0c;南非约翰内斯堡地区法院审理一个案件时&#xff0c;有律师因为使用ChatGPT生成的虚假参考资料而受到指责。[1] 根据《星期日泰晤士报》的报道&#xff0c;法院判决认为&#xff0c;该名…

pgsql checkpoint机制(1)

检查点触发时机 检查点间隔时间由checkpoint_timeout设置pg_xlog中wall段文件总大小超过参数max_WAL_size的值postgresql服务器在smart或fast模式下关闭手动checkpoint 为什么需要检查点&#xff1f; 定期保持修改过的数据块作为实例恢复时起始位置&#xff08;问题&#xf…

6.利用matlab完成 符号矩阵的秩和 符号方阵的逆矩阵和行列式 (matlab程序)

1.简述 利用M文件建立矩阵 对于比较大且比较复杂的矩阵&#xff0c;可以为它专门建立一个M文件。下面通过一个简单例子来说明如何利用M文件创建矩阵。 例2-2 利用M文件建立MYMAT矩阵。(1) 启动有关编辑程序或MATLAB文本编辑器&#xff0c;并输入待建矩阵&#xff1a;(2) 把…