问题标签 [riscv32]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
35 浏览

riscv - 如何将图形建模为 c 中的 riscv 自定义指令

指令推荐工具 Graph

我正在尝试创建一个自定义指令并将其添加到 riscv-gnu-toolchain 和尖峰。上面的链接将显示我使用 rvnewop 生成的图表,它基本上是一个指令推荐工具。因此,该工具的作用是运行我的转储文件,然后通过建议图形格式的指令来推荐可以做什么来基本上优化代码。

有什么方法可以模拟这个图,它基本上显示指令流到 ac 代码中,然后可以添加到工具链和尖峰?

0 投票
1 回答
51 浏览

assembly - 可以告诉我在程序集(riscv32)中做错了什么,它错误地打印了警告。我正在使用 rars 模拟器

我的代码有问题,它只是打印“方向无效”,并且矩阵信息是正确的,我的输入是这个 .word 3 1 1 1 0 5 2 2 0 1 6 4。

以下是该程序应如何工作的说明。

敌舰被放置在一个名为“ships”的字符串中,该字符串存在于区域数据 (.data) 中,必须在游戏开始时由 insert_ships 函数读取。弦船具有以下模式。在插入的第一行中告知船舶的数量。以下每一行都有一艘船。指定船只的行有 4 个值,用空格分隔,如下所示:第一个值是船的布局,0 表示水平船,1 表示垂直船;第二个值是船的长度;第三个值是船舶的起跑线;第四个值是船的起始列。观察示例: 3 1 5 1 1 0 5 2 2 0 1 6 4

船舶的定位高于结果如下定位:

在此处输入图像描述

插入船只的功能必须验证船只定位的有效性,在以下情况下会生成错误消息:
- 船只的位置无效。示例:0 3 11 7
- 船舶根据矩阵的维度进行外推。示例:0 4 2 7
- 重叠发生在船上。示例 0 4 2 2 和 1 3 0 3

现在是完整的代码,它有什么问题?

0 投票
0 回答
27 浏览

floating-point - RISCV-Boom中浮点寄存器中的值是什么格式的?

我正在研究 Boomv3 中浮点指令的执行过程。我从一个简单的fadd.s指令开始。我添加了代码来输出 Boom/src/main/scala/exu/execution-units/functional-unit.scala 中 FPUUnit 类中寄存器的值。但输出结果并不完全符合浮点数的IEEE754。

我添加的代码是:

看下面两条指令,指令005470d3中f5的值为0,f8的值为1.5。

Boom 的输出是:

为什么 rs1 和 rs2 中的值不完全对应 0 和 1.5?

谢谢!

0 投票
1 回答
96 浏览

debugging - 如何调试我在 RISC-V 程序集中编写的阶乘函数?

我正在尝试学习 RISC-V 并编写了一个阶乘函数,但它遇到了模拟器错误,暗示可能存在无限循环。我现在不确定如何调试我的代码,并且想知道人们是否可以提示我可能做错了什么。

谢谢!

0 投票
1 回答
335 浏览

gcc - 具有矢量支持的 RISC-V 工具链

我正在寻找支持官方规范定义的 RISC-V 矢量扩展 v1.0 的 C/C++ 工具链。

Spike似乎支持矢量 rvv1.0,但我很难找到一个工具链来使用它。

GCC (我只看到rvv0.9的一个分支)和 LLVM(我使用的是 LLVM/clang 13.0.0,它只升级到 rvv0.10)似乎都不支持最新的规范。

有人可以向我指出一个有效的工具链,还是我只需要再等一些工具才能赶上?

0 投票
1 回答
49 浏览

assembly - 为什么 riscv32 中的 mulh 指令给出 0?

mulh指令应根据 RISC-Vs pec 给出结果的高 XLEN 位。但是当我mulh t0, a0, a1;使用 multiplier ina0和 multiplicand in运行时a1,结果t0为 0。有人可以解释为什么吗?我在 RV32IMAC(FE310 内核)中运行它。

汇编和 C 代码如下:

0 投票
2 回答
298 浏览

assembly - 裸机 RISC-V CPU - 处理器如何知道从哪个地址开始获取指令?

我正在设计自己的 RISC-V CPU,并且已经能够实现一些指令代码。

我已经安装了 GCC 编译器的 RV32I 版本,所以我现在可以使用汇编器了riscv32-unknown-elf-as

我试图用一条指令组装一个程序:

我用汇编器编译它,然后用这个命令运行 objdump:

这将打印出以下内容:

我的问题是:

  1. 这里发生了什么?我以为我会有一个简单的单行十六进制,但还有很多事情要做。
  2. 如何指示我的处理器开始读取某个内存地址的指令?看起来 objdump 也不知道指令将从哪里开始。

需要明确的是,此时我将处理器视为裸机。我想象我将在处理器中硬编码指令从内存地址 X 开始,数据在内存地址 Y 可用,堆栈在内存地址 Z 可用。这是正确的吗?或者这是错误的方法?

0 投票
1 回答
67 浏览

riscv - GCC 上的 RISC-V 程序集 - 为什么会生成冗余 mv 命令?

我有以下几行

L2 的地址在哪里0x2018

当我生成 ELF 文件并使用 检查它时objdump,这就是我所看到的(仅相关部分):

1018 处的行,即mv a4 a4转换addi a4, a4, 0为多余的行。为什么会产生这个?如果没有这条线,它是否仍然有效?

gcc 是否需要始终为指令生成 2la条指令?

0 投票
0 回答
13 浏览

assembly - 如何在 RISC-V 中获取数组中的下一个元素?

不是每次增加 4 个字节,我需要增加 8 个字节吗?例如,addi x9, x9, 8而不是addi x9, x9, 4? 或者我们是否需要考虑每个单词本身的大小?

0 投票
0 回答
28 浏览

gcc - 使用“riscv32/64-unknown-elf-gcc”时,如何将 main() 或 _start() 函数的指令代码放在指令内存中?

我设计了 RISCV32IM 处理器,并使用“riscv32/64-unknown-elf-gcc”生成测试代码。

我在没有操作系统的系统上进行测试,当我使用下面的编译选项(-O0)时,我很不情愿,因为有很多不必要的代码生成。

使用编译选项(-O1 或 -O2)时,只生成必要的代码,但根据 C 代码,main() 或 _start() 函数的指令代码位置可能不是指令记忆。

由于系统的性质,main() 或_start() 的代码位置必须位于指令内存的开头。

解决上述问题的编译器选项有哪些?