riscv相关内容
我想编译一个简单的程序“int main(){返回0;}”到RISC-V处理器。 LLVM/Clang版本是9.0,我想用这样的RISC-V模拟器运行编译后的程序https://github.com/riscv/riscv-tools 我的问题是,我无法使用以下命令仅列出clang支持的目标LLC-s: llc --version llc -march=xxARCHTYPExx -ma
..
当我使用riscv64-未知-精灵-GCC时,选项-march=rv64g和-march=rv64gc几乎没有区别。 -march=64g将尽可能在标准库函数中使用RVC代码,例如print,但不会在我自己的函数中使用。在-march=64gc时,请在两种类型的函数中使用RVC代码。 我不知道这是否为违约。但是,如果我想禁止RVC代码,以便即使在没有RVC代码的标准库函数中,我应该做什
..
我正在尝试使用 Clang(版本 12.0.1)为 RISC-V 架构构建一个 hello world 程序.我已经使用 LLVM(版本 12.0.1)安装了它,设置如下: cmake -G "Unix Makefiles";\-DLLVM_ENABLE_PROJECTS=“clang;clang-tools-extra;libcxx;libcxxabi;libunwind;lldb;compi
..
我正在阅读一本书“计算机组织与设计 RISC-V 版",我遇到了 S-B 和 U-J 指令类型的编码. 我上面提到的那些类型有奇怪的编码立即字段. S-B 类型将立即数字段分成 2 部分.这是有道理的,因为所有指令编码都必须相似.但我不明白为什么下面的直接字段以这种方式编码. imm[12, 10:5], imm[4:1, 11] 代替 imm[11:5], imm[4:0]
..
在 Xilinx ISE 上编译 RISCV VERILOG HDL 时出现以下错误: 它说模块 vscale_pipeline 中第 296 行的以下代码中的“不支持的系统函数调用" 295: ifndef 合成296:PC_WB 解决方案 一些综合工具定义了 SYNTHESIS 宏,以便使用 更容易在综合中跳过不可综合的代码 `ifdef 合成...`endif 块,就像在
..
我目前在 ubuntu 上使用 clang11 来编译任何 c/c++ 代码并且它工作正常但是当我尝试编译任何代码时(包括 任何标准库)到任何特定目标的汇编代码,例如 x86_64(即使我有 x86_64)riscv 并给出一个标记 --target=x86_64 或 --target=riscv32 我在代码中包含的任何标准库都出错了.一个简单的例子: //ex.cpp#includeint
..
我是 chisel 的新用户.我试图在我的机器上安装凿子.根据git,首先我克隆了chisel,然后进入hello目录输入制作.但我收到以下错误: set -e -o pipefail;sbt -Dsbt.log.noformat=true -DchiselVersion="latest.release" "运行你好 --genHarness --compile --test --backend
..
在本演示文稿Kruppe和Espasa在 https://github.com/hanna-kruppe/rvv-llvm .但是,该存储库现在已存档,并且README文件指示该存储库已过时,因为现在已在上游开发了对RISC-V V扩展的支持.我认为这意味着这些功能现在可以从 https://github.com/llvm的LLVM主机中获得./llvm-project . 但是,当我拉出当
..
我正在尝试使用目标Architecture RISC-V对用C ++编写的代码进行性能分析.该代码已使用RISC-V GNU工具链交叉编译.我的可执行文件是unit_tests"ELF 64位LSB可执行文件,UCB RISC-V,版本1(GNU/Linux),动态链接,对于GNU/Linux 4.15,是/lib/ld-linux-riscv64-lp64d.so.1..0,带有debug_in
..
我正在寻找RISC-V处理器如何处理中断请求. 我查看了《指令集手册》和互联网上的信息.重点在于准确解释标题设置的内容:指令集.在我看来,如何处理中断是一个问题,即所谓的处理器“程序员模型".由于中断处理的某些部分未在指令中表达,因此它显然不适合有关指令集的文档.显然,进入ISR不是 一条显示在程序代码中任何地方的指令.指令集手册提供了诸如 mret 和 mstatus 的描述,但未能提供整
..
能够运行由GCC生成的机器代码的RV32I的最低CSR要求是什么? 我正在考虑一个基于fpga的简单(嵌入式)实现.不需要虚拟内存或linux支持. 此外,为了防止它使用未执行的CSR相关指令,我应该使用哪些GCC标志? 浏览RISCV特权ISA规范后,我仍然很困惑. 谢谢! 解决方案 看看 RARS 模拟器作为简单RISC V实现的示例.它实现了足够的CSR(例如
..
我正在尝试为我的自定义risc-v SOC构建yocto demo-coreip-cli 映像,该映像仅支持 imafd 指令.对于Bitbake使用的交叉工具链的编译,我尝试通过在开放嵌入核心层中添加" –with-arch = rv64imafd "来更改cross-binutils.inc配方和cross-gcc.inc配方.在" EXTRA_OECONF "中多变的.还有其他我想念或做错的
..
我对RISC-V ABI寄存器名称感到困惑.例如,第85页的"RISC-V指令集手册,第I卷:用户级ISA,版本2.0"中的表18.2指定堆栈指针 sp 是寄存器 x14 .但是,说明 addi sp,zero,0 riscv64-unknown-elf-as将 编译为0x00000113( -m32 没有区别).二进制: 000000000000 00000 000 00010 0
..
如何为Risc-V(汇编语言)编写“非"运算?如果没有NOT指令,您如何实现同一目标? 解决方案 类似于MIPS和其他一些体系结构,RISC V并未针对许多事物提供专用指令,包括二操作数一元操作,因为这些操作可以通过使用它们的操作来实现.三操作数格式,通常将 x0 作为第三个操作数,但有时将常量 1 或 -1 作为第三个操作数. 为方便起见,汇编程序将接受这些一元操作(和其他操作)的
..
我正在尝试为RISC-V程序集创建即时生成器,但是遇到了if语句. 这是我在Verilog中的代码: module signextend(in, out, sel); parameter nin = 32; parameter nout = 32; input [nin-1:nin-25] in; input [2:0] sel; output [no
..
我无法调试使用GDB在QEMU中运行的简单程序. GDB似乎无法找到我在程序中的位置(因为它始终将??显示为我的当前位置),并且它从未达到我设置的任何断点. 在一个终端中,我运行QEMU: $ cat add.c int main() { int x = 9; int v = 1; while (1) { int q = x + v; }
..
我正在阅读 RISC-V Reader:开放式体系结构图集。作者在解释ISA(指令集体系结构)与特定实现(即微体系结构)的隔离时写道: 对于架构师来说,诱惑在于将指令包含在ISA中,以帮助在特定时间实现一种实现的性能或成本,但会负担不同的或将来的实现。 据我了解,它指出,在设计ISA时,ISA应该理想地避免公开实现它的特定微体系结构的细节。 请牢记上面的引号:当涉及程序计数器时,
..
在RISC-V指令集手册(用户级ISA)中,我无法理解第2.3节“立即编码变体”第11页。 有四种类型的指令格式为R,I,S和U,则有S和U类型的一种变体,分别是SB和UJ,我想表示分行和跳转,如图2.3所示。然后就是RISC-V指令产生的即时类型,如图2.4所示。 所以我的问题是,为什么需要SB和UJ?为什么要用这种方式改组立即数?说“由RISC-V指令生成的立即数”是什么意思?
..
当我阅读RISC-V用户级ISA手册时,我注意到它说:“ OpenRISC具有条件代码和分支延迟时隙,这会使更高性能的实现复杂化。”因此RISC-V没有分支延迟槽 RISC-V用户级ISA手册链接。此外,维基百科说,大多数新的RISC设计都省略了分支延迟槽。为什么大多数较新的RISC体系结构会逐渐省略分支延迟槽? Fallacy:您可以设计一个完美的体系结构。 所有体系结构设计都需要在
..
我试图创建一个可以编译一些文件并创建一些输出的Makefile,但首先我希望它仅执行一次配置,下次我键入一次使其不重新执行配置,除非我更改参数,例如前缀。 我尝试使用 touch,FORCE和if ,在其他帖子中搜索了一下之后,但是我在gcc和Makefiles中是新手,所以我无法做到 我的代码现在是(不包括其他规则,因为它们不会影响配置): XLEN:= 32 RISCV
..