问题标签 [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.
qemu - QEMU riscv32-softmmu,softmmu是什么意思?
“softmmu”是否意味着虚拟机具有可用于机器和用户模式的单个线性地址空间?或者它是否具有一些通过软件而不是底层处理器实现的虚拟内存功能?或者也许它意味着完全不同的东西?
qemu - QEMU riscv32 virt machine,如何访问屏幕?
我想使用 QEMU 来设置裸机 riscv32 机器,因此假设我需要使用“-machine virt”选项。如何设置以便可以输出到屏幕?是我提供要输出的字符串的控制台样式输出,还是我设置内存地址以导致定义输出的 VGA 设备?
cpu - RISCV:如何计算分支指令?
我试图了解现代 CPU 的工作原理。我专注于 RISC-V。有几种分支:
BEQ
BNE
BLT
BGE
BLTU
BGEU
我使用金星模拟器来测试这个,我也在尝试模拟它,到目前为止它工作得很好,但我不明白,分支是如何计算的。根据我的阅读,ALU 单元只有一个信号输出—— ZERO
(除了它的数学输出),只要输出为零,它就会激活。但是我如何仅根据输出来确定是否应该采用分支ZERO
?它们是如何计算的?
示例代码:
分支示例:
BEQ
- 减去 2 个数字,如果ZERO
是活动的,则分支
BNE
- 减去 2 个数字,如果ZERO
未激活,则分支
BLT
- 在这里我有点困惑;我应该减去然后看看符号位,还是什么?
BGE
/ BGEU
- 以及如何区分这些?我应该使用什么数学指令?
谢谢
assembly - 压缩的 C.LW 和 C.SW 指令不能使用标签吗?
我正在编写一个 RISCV 规范子集的模拟器,打算使用压缩的 ISA 作为我定制的 16 位指令集的基线。但是,riscv32-unknown-elf-as
拒绝将 C.SW 和 C.LW 指令与充当立即值的标签组合起来。
我知道 RV-C 只是基本 ISA 的扩展,不适合独立执行,但我想使用riscv32-unknown-elf-as
assembler 实用程序作为为我的模拟器/模拟器组装小程序的简单方法。
根据 RISC-V ISA 规范(截至撰写本文时),C.SW 指令采用 7 位立即数,并且该值左移两次(乘以 4),因为假设加载/存储为无论如何都要4字节对齐。
因此,以下组装被视为合法riscv32-unknown-elf-as
并成功组装:
C.SW x12, 64(x13)
有人会认为,如果标签正确地 4 字节对齐,代表地址 0x64,您将能够编写等效的程序集:
C.SW x12, my_label(x13)
然而,riscv32-unknown-elf-as
拒绝组装这条线,并指出:
我已经尝试了这种语法的许多组合,以及标签上的各种对齐指令。作为参考,这是程序集文件本身:
我需要添加额外的编译器指令吗?根据 ISA 规范,我希望这是有效的程序集。
assembly - RISC-V:使用 a0 操作更改其他寄存器值
我目前正在做一个关于 risc-v 的小项目。问题是,在一个函数中,当我做这样的事情时,
执行 add a0, a2, a4 后,a2 和 a4 的值也会发生变化。例如,如果我注释掉 add a0, a2, a4 并执行它,结果:a0 = 0x33333333, a2 = a4 = 0x00000000。如果我添加“add”行,结果变为:a0 = ax000063e3, a3=0x123392c8, a4=0x00000d6e, a2 = 0x00005675。
即使它是函数的最后一条语句,它也会改变它上面的寄存器的值。(如a3)
我是否错过了有关 risc-v 的内容?它不是按顺序执行的吗?
同样在使结果变为0的函数中,
但这会返回 0x00000001。如果我了解 risc-v 的基本部分,请告诉我。谢谢。
gcc - riscv-gcc 无法构建 [GCC_NO_EXECUTABLES]
我想使用 riscv-gcc 在 Arty-A7 上实现 Ibex(RISCV 核心)示例,但我无法正确构建它。在“制作”阶段之后它一直在失败。它似乎与 zlib 有关,但我不太确定,因为这是我第一次从源代码构建任何东西。我从https://github.com/riscv/riscv-gcc获得了源代码
我已经配置它执行 make as
然后它退出并出现以下错误
我也尝试过运行 make (相同的配置)
但它会产生此错误
除了按照https://gcc.gnu.org/install/prerequisites.html的建议检查必备库之外,我不确定到目前为止该做什么。谁能帮我吗?
[更新 27/11/19]
我尝试从 < https://github.com/riscv/riscv-gnu-toolchain > 安装完整的 riscv-gnu-toolchain 以避免丢失依赖项,但是我仍然遇到错误。我确实运行了建议的 apt-get 命令来安装先决条件。
我运行了建议以 riscv32 为目标的配置,并按如下方式进行 make
然后我得到了这个错误
我注意到 m4 无法识别某个参数
我应该关心这个吗?
[2019 年 16 月 12 日更新]
按照建议,我尝试在 Ubuntu 18.04.03(最初我在 14.04)中构建工具链,它似乎已经很好地解决了这个问题!事实证明,当涉及到操作系统依赖项时,工具链确实是“脆弱的”。非常感谢你的帮忙!
assembly - 在 RISC 架构上运行的程序中,平均有多少百分比的指令是存储?
我的目标是为 RISC V 内核构建缓存。在决定要使用的特定设计时,我想知道平均有多少百分比的指令是存储指令。知道这一点,或者甚至有一个非常粗略的估计,我可以帮助我在使用直写时确定写缓冲区的大小。
我只需要一个粗略的估计。我认为,对其他 RISC 架构(如 MIPS)的估计也可能有用。
riscv - 如何将 M 文件转换为 RISC-V 汇编代码?
我是 RISC-V 的新手。我想将该 MATLAB 代码(M 文件)转换为 RISC-V 汇编代码,任何人都可以就如何做到这一点提供一些建议或输入。
问候,尤利亚
assembly - 如何在 riscV(32 位)中反转 32 位寄存器,是否有命令?
我正在使用 venus 模拟器来编写代码。我找不到用于旋转或反转寄存器的特定指令。