问题标签 [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.
riscv - 火箭处理器的顶级模块在哪里?
我做了一个make(制作火箭和制作项目),我在制作项目时遇到了错误,因为我还没有目标板。因此,viva do 的项目文件并未完全生成。我需要手动添加文件。
火箭处理器的顶级模块(标准配置)在哪里?
assembly - 如何在 asm 自定义指令中将整数作为输入参数传递?
我正在尝试为我自己的自定义指令运行汇编代码。
代码如下
所以基本上上面显示的 custom0 指令的工作方式如下所示。
该指令独立工作正常,但是当我尝试参数化地址字段并在 for 循环中运行时,数据不会移动到该地址。
上述程序的输出是
如您所见, i 的值是正确的,但 z 的值始终为零。
正在使用的指令集是 RISCV ISA:- http://riscv.org/download.html#tab_spec_user_isa
scala - 堆栈内存实现在火箭芯片凿子中无法正常工作
我一直在尝试修改火箭核心的 rocc 接口,目前我已经修改了 rocc 接口以用作暂存器,我们可以使用 custom0 指令加载和存储数据。当我尝试将数据推送和弹出到我用凿子创建并在我的暂存器中实例化的堆栈内存中时,我遇到了一个问题。我使用具有不同函数字段值的相同 custom0 指令来推送和弹出堆栈。
chisel 中的代码如下所示,用于暂存器和我的堆栈
我在前端服务器中执行的 C 代码如下。
如您所见,我正在尝试从 1-6 推送一系列数字,但是当我在 zed 板上运行此代码时,这就是我得到的输出。
理想情况下它应该弹出 6,5,4,3,2,1
riscv - 性能“memcpy”不正确
我们有一个应用程序使用现有的 memcpy 和未修改的 RISCV 编译器将 80MB 批量数据从一个内存位置复制到另一个内存位置。我们可以看到循环计数约为 900,这似乎是不正确的。如果我改变大小,计数或多或少保持不变。这显然是不正确的。问题是因为使用了 RISCV 编译器吗?我们使用的是 riscv64-unknown-elf。我们需要 riscv64-unknown-linux-gnu 吗?
riscv - RISCV/火箭芯片仿真器输出日志
我正在尝试评估现有基准测试和其他应用程序的火箭核心性能。
在我使用基准代码 MT-MATMUL 运行模拟器并查看 mt-matmul.riscv.out 后,我注意到有很多停顿。有人可以向我解释如何确定失速的原因吗?我认为应该预测这个简单的循环,并且不应该有一些真正减慢处理器的停顿。
见以下日志:
C0: 1956 [1] pc=[0000000628] W[r 0=0000000000001418][0] R[r 5=0000000000001418] R[r 0=0000000000000000] inst=[0002b107] fld ft2, 0(t0)
C0: 1957 [1] pc=[000000062c] W[r 0=0000000000007730][0] R[r16=0000000000007730] R[r 0=0000000000000000] inst=[00083007] fld ft0, 0(a6)
C0: 1958 [1] pc=[0000000630] W[r 0=0000000000003380][0] R[r 6=0000000000003380] R[r 0=0000000000000000] inst=[00033087] fld ft1, 0(t1)
**C0: 1959 [1] pc=[0000000634] W[r16=0000000000007738][1] R[r16=0000000000007730] R[r 8=00000000000000013] inst=[00880813] addi a6, a6, 8
C0: 1960 [0] pc=[0000000634] W[r 0=0000000000007738][0] R[r16=0000000000007730] R[r 8=0000000000000013] inst=[00880813] addi a6, a6, 8
C0: 1961 [0] pc=[0000000634] W[r 0=0000000000007738][0] R[r16=0000000000007730] R[r 8=0000000000000013] inst=[00880813] addi a6, a6, 8**
C0: 1962 [1] pc=[0000000638] W[r17=0000000000000014][1] R[r17=0000000000000013] R[r 1=0000000000000013] inst=[0018889b] addiw a7, a7, 1
C0: 1963 [1] pc=[000000063c] W[r 0=0000000000000001][0] R[r 1=0000000000000013] R[r 2=0000000000000013] inst=[0220f043] fmadd.d ft00, ft1, ft2
C0: 1964 [1] pc=[0000000640] W[r 5=0000000000001420][1] R[r 5=0000000000001418] R[r 8=0000000000000013] inst=[00828293] addi t0, t0, 8
C0: 1965 [0] pc=[0000000640] W[r 0=0000000000001420][0] R[r 5=0000000000001418] R[r 8=0000000000000013] inst=[00828293] addi t0, t0, 8
C0: 1966 [0] pc=[0000000640] W[r 0=00000000000001420][0] R[r 5=0000000000001418] R[r 8=0000000000000013] inst=[00828293] addi t0, t0, 8
C0: 1967 [1] pc=[0000000644] W[r 0=0000000000007730][0] R[r16=0000000000007738] R[r 0=0000000000000000] inst=[fe083c27] fsd ft0, -8(a6)
C0: 1968 [1] pc=[0000000648] W[r 0=0000000000000001][0] R[r12=0000000000000020] R[r17=0000000000000014] inst=[ff1610e3] bne a2, a7, pc - 32
C0: 1969 [1] pc=[0000000628] W[r 0=0000000000001420][0] R[r 5=0000000000001420] R[r 0=0000000000000000] inst=[0002b107] fld ft2, 0(t0)
C0: 1970 [1] pc=[000000062c] W[r 0=0000000000007738][0] R[r16=0000000000007738] R[r 0=0000000000000000] inst=[00083007] fld ft0, 0(a6)
C0: 1971 [1] pc=[0000000630] W[r 0=0000000000003380][0] R[r 6=0000000000003380] R[r 0=0000000000000000] inst=[00033087] fld ft1, 0(t1)
C0: 1972 [1] pc=[0000000634] W[r16=0000000000007740][1] R[r16=0000000000007738] R[r 8=0000000000000017] inst=[00880813] addi a6, a6, 8
C0: 1973 [0] pc=[0000000634] W[r 0=0000000000007740][0] R[r16=0000000000007738] R[r 8=0000000000000017] inst=[00880813] addi a6, a6, 8
C0: 1974 [0] pc=[0000000634] W[r 0=0000000000007740][0] R[r16=0000000000007738] R[r 8=0000000000000017] inst=[00880813] addi a6, a6, 8
C0: 1975 [1] pc=[0000000638] W[r17=0000000000000015][1] R[r17=0000000000000014] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
**C0: 1982 [1] pc=[0000000628] W[r 0=0000000000001428][0] R[r 5=0000000000001428] R[r 0=0000000000000000] inst=[0002b107] fld ft2, 0(t0)
C0: 1983 [1] pc=[000000062c] W[r 0=0000000000007740][0] R[r16=0000000000007740] R[r 0=0000000000000000] inst=[00083007] fld ft0, 0(a6)
C0: 1984 [1] pc=[0000000630] W[r 0=0000000000003380][0] R[r 6=0000000000003380] R[r 0=0000000000000000] inst=[00033087] fld ft1, 0(t1)
C0: 1985 [1] pc=[0000000634] W[r16=0000000000007748][1] R[r16=0000000000007740] R[r 8=0000000000000017] inst=[00880813] addi a6, a6, 8
C0: 1986 [0] pc=[0000000634] W[r 0=0000000000007748][0] R[r16=0000000000007740] R[r 8=0000000000000017] inst=[00880813] addi a6, a6, 8
C0: 1987 [0] pc=[0000000634] W[r 0=0000000000007748][0] R[r16=0000000000007740] R[r 8=0000000000000017] inst=[00880813] addi a6, a6, 8
C0: 1988 [1] pc=[0000000638] W[r17=0000000000000016][1] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 1989 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 1990 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 1991 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 1992 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 1993 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 1994 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 1995 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 1996 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 1997 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 1998 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 1999 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2000 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2001 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2002 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2003 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2004 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2005 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2006 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2007 [0] pc=[0000000638] W[r 0=00000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2008 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2009 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2010 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2011 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2012 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2013 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2014 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2015 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2016 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2017 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2018 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2019 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2020 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1
C0: 2021 [0] pc=[0000000638] W[r 0=0000000000000016][0] R[r17=0000000000000015] R[r 1=0000000000000017] inst=[0018889b] addiw a7, a7, 1**
汇编代码很简单
c - RISC-V 汇编 - 堆栈布局 - 函数调用
目前我正在使用 RISC-V 处理器实现。我需要运行部分手工制作的汇编代码。(最后会有动态代码注入。)为此,我必须了解 RISC-V 程序集中函数调用的基础知识。
我发现这个主题很有帮助:关于函数调用堆栈的混淆
但我仍在为函数调用的堆栈布局而苦苦挣扎。请考虑以下c代码:
该程序通过一系列加法实现基本乘法。派生的汇编代码 ( riscv64-unknown-elf-gcc -nostartfiles mul.c -o mul && riscv64-unknown-elf-objdump -D mul
) 如下所示:
需要澄清的重要步骤是: ( some_func(int,int,int)
)
和: ( main()
)
据我了解:堆栈指针被移动以为返回地址和参数腾出空间。(main
这里可能是一个特殊情况。)传递的参数在堆栈上时如何处理?它们是如何取回的?总的来说,该方法对我来说很清楚,但我将如何手动编码这个部分以便工作。
关于相关主题,堆栈应该看起来有点像
但仅此而已。谁能指出,这是如何安排的,以及这两个列表(函数调用)如何相互关联?
verilog - 模拟 Rics-v verilog
我已经编译了我的基准并生成了 .hex 文件。在 verilog 文件中包含 .hex 文件的位置。
我所有的verilog文件都是火箭芯片文件夹中的Top.DefaultVLSIConfig.v和memdessertMemDessert.DeafultVLSIConfig.v
我的操作系统中没有 vcs 模拟器,我可以获取 verilog 文件和 hex 文件并在另一个平台上进行模拟吗?
海德尔
simulation - 这个 csrrw 的正确行为是什么
我正在使用RISCV 特权 1.7 指令集,第 8 页描述了 csrrw。
当处理器执行时:
- 它是否应该使用 CSR“循环”值更新“a0”寄存器,并在用户模式下写入时引发异常?
或者
- 它是否应该引发异常而不更新 CSR“循环”寄存器?
riscv - 禁用 FPU 时无法在 riscv 火箭芯片上运行代码
我编写了 ac 代码并使用 riscv64-unknown-elf-gcc 编译它,然后在使用代理内核和前端服务器(./fesvr-zynq pk)在 zedboard 上实例化的火箭芯片上运行它。
当从 configs.scala 启用 fpu 时,相同的二进制文件在 zedboard 上工作,但在禁用 fpu 时二进制文件不会执行。
gcc - RISC-V 32b 模拟与 Spike
有人在 32 位模式下使用过峰值/pk 吗?
最初的 build.sh 安装没有提供 32b 版本的 pk,所以我使用了 riscv32-unknown-
elf-gcc 为 32b RISC-V 目标处理器交叉编译 pk 如下:
有什么想法吗?