问题标签 [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 回答
25 浏览

gcc - 使用“riscv32/64-unknown-elf-gcc”时如何删除堆栈点?

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

它是一个无操作系统系统,指令代码中不需要堆栈指针。但是,如下编译时,会创建堆栈点操作,初始SP值为0,因此在指令代码执行过程中会出现故障。

C代码如下。

编译生成的指令代码如下。在操作“4000005c”中,它跳出指令存储区并发生故障。

我想删除 SP 行为,我该怎么做?或者有没有办法即使使用 SP 也能正常工作?

0 投票
1 回答
56 浏览

gcc - 使用 riscv32 工具链时如何禁用压缩

在此处输入图像描述

我只需要32-bit说明,但通过压缩gcc编译我的c代码。我尝试了没有 c 的 -march= 选项,但压缩指令仍然存在。如何获得未压缩的(?)指令?

0 投票
1 回答
66 浏览

assembly - CPU模拟器如何计算程序的结尾?

我对 RISC-V 很陌生,我需要你的帮助。

我正在为裸机环境的 RV32I 架构编写一个简单的 RISC-V ISA 模拟器。我知道我们可以在elf文件中获取入口点(程序的开始),但是没有关于程序结束的信息。

我看到了下面的 exit() 函数的汇编代码。

当程序到达exit()函数时,CPU会陷入死循环(跳转到自己),这种情况下,CPU应该怎么做呢?应该如何处理这样的跳转指令,应该如何判断这是程序的结束?

提前致谢

0 投票
0 回答
29 浏览

vhdl - 有没有办法在 ModelSim 中查看核心的流水线阶段?

我有一个核心(用 VHDL 编写),它有一个 5 级管道,我使用 ModelSim 进行仿真。我对 clk 应用了一些错误,以查看它对内核的影响。

我需要查看管道阶段是否正常运行?是否可以在 ModelSim 中看到流水线阶段?

我将不胜感激任何建议!

0 投票
0 回答
33 浏览

clang - RISCV-vector clang 导致尖峰中的非法指令

我希望你能帮助我解决我的 RISC-V 问题。

我目前正在试验对 RISC-V 的向量 (RVV) 指令的工具链支持。根据我在互联网上找到的信息,该规范目前冻结在 v1.0。GCC 有一个支持 RVV,但它不再被积极维护。另一方面,LLVM 支持 RVV。

所以我继续设置了一个 Docker 容器,其中包含:RISC-V 工具(Repo at basic-rvv)、spike(最新提交)和 LLVM(最新提交)。

接下来,我使用以下命令编译了一个sgemm 示例clang -march=rv32gcv --target=riscv32 --sysroot=/usr/local/riscv32-unknown-elf --gcc-toolchain=/usr/local -O2 sgemm.c -o sgemm.elf:该命令成功运行,我得到一个 elf 文件,使用 objdump 看起来不错:它使用向量指令。

现在到我的问题:之后,我想用指令集模拟器尖峰验证二进制文件。因此,我运行了: spike /usr/local/riscv32-unknown-elf/bin/pk sgemm.elf,最终执行了一条非法指令(完整的错误消息见下文)。以下 OP 失败:0xb2905457. echo "DASM(0xb2905457)" | spike-dasm我用-->解码了指令vfmacc.vf v8, v9, ft0,这对我来说很好。

我已经浏览了spike的代码,以及为什么它可能会失败,但我迷路了。

也许你知道这里出了什么问题?我感觉我的矢量单元配置错误(setvl说明)。我希望你们能在这方面给我一些支持!

首先十分感谢!蒂姆

来自尖峰的错误消息:

0 投票
0 回答
21 浏览

riscv32 - 为什么 risc-v ADDI 指令不采用十六进制的 12 位值?

ADDI 指令取 -1 并将其扩展到 32 位,如下所示

但是当 imm12 的值为 0x800 时,会抛出非法操作数错误。为什么?我发现当 imm12 的 MSB(第 11 位)设置为 1(如 0x800、0xc00)时会出现问题。它不会抱怨 0x400。

0 投票
0 回答
44 浏览

rust - cargo/rustc 生成没有编译函数的 no_std ELF (riscv32i-unknown-none-elf)

鉴于此.cargo/config

这个main.rs:

cargo build --release生成一个缺少所有 rust 函数的二进制文件:

然而,链接器似乎是 "finding" rust_main,因为如果我只更改函数名,链接将失败,因为当时未定义的符号。

我是否遗漏了什么,或者这是 rust buildchain 中的错误?Rust 与 rustup, cargo version 一起安装cargo 1.60.0-nightly (25fcb135d 2022-02-01)