问题标签 [riscv]

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 投票
2 回答
711 浏览

riscv - 2个关于Risc-V-Privileged-Spec-v1.7的问题

  1. 第 16 页,表 3.1:mcpuid 中的基本字段:RV32I RV32E RV64I RV128I

    • 什么是“RV32E”?
    • 是否有“E”扩展名?
  2. ECALL(第 30 页)没有说明电脑的行为。虽然 mepc(第 28 页)和 mbadaddr(第 29 页)声称“mepc 将指向指令的开头”。我认为 ECALL 应该将 mepc 设置为导致指令的末尾,以便 ERET 转到下一条指令。那正确吗?

0 投票
2 回答
235 浏览

riscv - Rocketchip_wrapper.v 中的系统模块

我指的是 fpga-zynq/common/ 中的 rocketchip_wrapper.v 以对其进行某些修改并为新的 fpga 定制它。在第 136 行,正在连接一个模块系统(系统 system_i (....))。这个系统模块在哪里定义?
此外,AXI 模块是从某个地方(ip 核心)导入的,还是完全在设计本身中定义的?

0 投票
1 回答
3283 浏览

riscv - 如何在 RISC-V 中生成 hex 文件

现在,我实现了一个 ASP(应用程序特定处理器),我想用 RISC 类型的架构来开发它。在网上阅读了一下,我得出结论,最好的选择是使用 RISC-V。

这个想法是在 Verilog 中开发一个设计,以便它可以运行 RISC-V ISA。并且处理器要运行的软件应用程序非常简单,只有几个算术运算。由于这个原因,因为它只是一个应用程序,所以处理器不需要支持操作系统。

我正在考虑从我的 C 应用程序生成一个十六进制文件并将该文件加载到 ROM 内存中。但是我找不到如何从 C 中的代码生成十六进制文件?

我用riscv64-unknown-elf-gcc正确构建了我的程序

$ riscv64-unknown-elf-gcc -o hello hello.c

但我不知道如何生成一个十六进制文件。

有人可以告诉我如何创建这个文件吗?

0 投票
1 回答
1066 浏览

riscv - RISC-V ISA 输入和输出操作

我在 ISA 2.0 中没有看到任何关于 IO 的内容。RISC-V IO 内存是否映射?是否有关于如何完成 IO 的规范?我可以定义自己的方法吗?TIA。

0 投票
3 回答
11701 浏览

riscv - How can I compile C code to get a bare-metal skeleton of a minimal RISC-V assembly program?

I have the following simple C code:

When I compile this with

If I want to see the assembly code I use

But when I explore the assembly code I see that this generates a lot of code which I assume is for Proxy Kernel support (I am a newbie to riscv). However, I do not want that this code has support for Proxy kernel, because the idea is to implement only this simple C code within an FPGA.

I read that riscv provides three types of compilation: Bare-metal mode, newlib proxy kernel and riscv Linux. According to previous research, the kind of compilation that I should do is bare metal mode. This is because I desire a minimum assembly without support for the operating system or kernel proxy. Assembly functions as a system call are not required.

However, I have not yet been able to find as I can compile a C code for get a skeleton of a minimal riscv assembly program. How can I compile the C code above in bare metal mode or for get a skeleton of a minimal riscv assembly code?

0 投票
2 回答
1597 浏览

disassembly - RISCV 反汇编选项数字和无别名

我克隆了 riscv-tools 存储库(master 分支)并遵循了构建过程。一切都很顺利。

然后我尝试为 RV32IM 指令集编译 hello world 程序,这样做:

我使用选项 save-temps 来保留中间文件。(你好.s,你好.i,你好.o)

到目前为止一切正常,我可以运行 hello world 程序:

现在我想看看这个程序的汇编代码。我做了以下事情,我确实将汇编代码放入 hello.dump

现在我有兴趣看到的是没有伪指令和非 ABI 寄存器名称的汇编代码。

当我这样做时,似乎有可能做到这一点:

我明白了:

但是,当我尝试添加这些选项时,它不起作用。

它是命令语法错误还是反汇编程序尚不支持?

0 投票
1 回答
1758 浏览

riscv - How to correctly generate a custom hex file to run on the RISC-V Rocket-chip?

I've been trying to simulate small binary file (translated to hex) using the cycle-accurate RISC-V Rocket-chip C++ emulator. The build process of emulator was successful and make run generates correct test/benchmark results.

However, when I compiled a custom source code and simulated it, it just printed lots of 000000... in log file. Surely, I checked those logs with enough cycle counts and there weren't any changes as it runs. It just kept printing 0000.. in operand number, inst, DASM and so on without stopping simulation. Some of exceptions are the first few lines, see below.

In the middle of simulations, pc eventually increases but it still prints 0000.. over and over again, it didn't stop. Here is the C source code and process I've tried. (Also, I tried many other sources.)

And, command lists.

I think the simulator doesn't correctly recognize the translated hex format. So, it cannot triggers correct instruction streams. Can anyone help?

Thanks,

0 投票
1 回答
361 浏览

riscv - 如何在尖峰上查看浮点寄存器的内容?

我正在使用 riscv 代码,我想使用尖峰工具对其进行模拟。模拟的目的是查看一些浮点寄存器的内容。

所以,如果我想查看整数寄存器的内容,我使用下一个命令:

但是如果我尝试对浮点寄存器使用相同的命令:

它总是向我显示所有设置为零的位............

我附上了一些我正在工作的汇编代码......

在这段代码中,我使用命令 reg 在 fadd.s 指令之后查看浮点寄存器 ft1 和 ft0(reg 0 ft1 或 reg 0 ft0)的内容,结果是:

但是如果我在执行fsw指令后查找内存中保存的内容,结果不为零并且是正确的

如您所见,问题是为什么使用 reg 命令查看浮点寄存器的内容总是给我带来零作为寄存器的内容。reg格式和浮点寄存器有问题吗?

0 投票
2 回答
1243 浏览

riscv - RISCV 工具链是否支持 pthread 库?

我已经在我的 ubuntu 机器上克隆并构建了 riscv-tools 存储库。你好世界程序运行良好。

现在,我正在尝试将应用程序从 X86 目标移植到 riscv (RV32IM) 目标。我的应用程序依赖于数学和 pthread 库。尝试在我的代码中使用 pthread.h 头文件中的声明时遇到问题。

我做了一个非常简单的示例代码来演示我的问题。

这是我的 example.c 文件内容

好的,这是我为 RISCV 目标编译它的命令行

这是编译器输出:

注意数学库没有问题,但是 pthread 库的东西会产生错误。

显然,为 X86 目标编译这个简单的例子就像一个魅力。X86 目标的程序输出是:

这是我们在执行此操作时在 RISCV 目标上编译和运行时最终应该得到的结果:

RISCV 工具链中的 pthread 库有什么问题?RISCV社区的任何人都可以复制它吗?有人遇到同样的问题吗?

任何帮助表示赞赏!

0 投票
2 回答
973 浏览

riscv - Rocket and Chisel - 模拟器中没有发生任何组装测试

我构建了 riscv-tools 和火箭芯片模拟器。当我运行 run-asm-tests 时,输出是一个空文件。似乎什么也没有发生。

如果我手动运行它并减少最大周期,这就是我得到的:

笔记 ::

1) 我在 mm_dramsim2.cc 中取消了宏#ifdef DEBUG_DRAMSIM2 的注释

2) chisel 编译器的模拟器生成流程中有一些警告。转载如下,以防万一。

3)这是我在堆栈溢出中的第一篇文章,此外我对 chisel/riscv 很陌生。请原谅明显的错误,如果有的话!