RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1060451
Accepted
eanmos
eanmos
Asked:2020-12-19 02:05:11 +0000 UTC2020-12-19 02:05:11 +0000 UTC 2020-12-19 02:05:11 +0000 UTC

如何在 Verilator 上的 RISC-V 模拟中输出一行文本?

  • 772

我有以下工作:

  1. 根据任务选项更改项目:

    一个。编辑 RISC-V ISA 测试列表 ./sim/tests/riscv-isa/rv32_tests.inc,只留下作业中指定的测试;

    湾。编辑./Makefile以使目标tests仅构建选定的 RISC-V ISA 测试;

    C。修改文件 RVTEST_PASS中的宏。RVTEST_FAIL./sim/tests/common/riscv_macros.h

我的作业选项表的摘录:

+--------+-------------------+--------------+-----+-----------------------------------+
| Вар. 1 |        Тест       | RESET VECTOR | BUS |        Результат теста            |
+--------+-------------------+--------------+-----+-----------------------------------+
|      1 | isa/rv32ui.addi.S |    0x400     | AXI | RVTEST_PASS выводит строку "ok",  |
|        |                   |              |     | RVTEST_FAIL выводит строку "fail" |
+--------+-------------------+--------------+-----+-----------------------------------+

我不知道如何执行点 C,即如何输出一行文本。

我的假设

宏本身RVTEST_PASS看起来RVTEST_FAIL 像这样(链接到riscv_macros.hGitHub 上存储库中的文件行),如下所示:

//-----------------------------------------------------------------------
// Pass/Fail Macro
//-----------------------------------------------------------------------

#define RVTEST_PASS                                                     \
        fence;                                                          \
        mv a1, TESTNUM;                                                 \
        li  a0, 0x0;                                                    \
        ecall

#define TESTNUM x28
#define RVTEST_FAIL                                                     \
        fence;                                                          \
        mv a1, TESTNUM;                                                 \
        li  a0, 0x1;                                                    \
        ecall

该目录sim/tests/common/包含文件sc_print.h,sc_print.c其中包含函数sc_printf。

此函数用于hello仅输出一行文本的测试:

// sim/tests/hello/hello.c

#include "sc_print.h"

int main()
{
    sc_printf("Hello from SCR1!\n");
    return 0;
}

我是否正确理解我需要将函数调用sc_printf插入宏RVTEST_PASS和RVTEST_FAIL?如果是,如何做到这一点?

c
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    eanmos
    2020-12-20T05:54:02Z2020-12-20T05:54:02Z

    感谢@Fat-Zer 的提示:

    static void
    sc_puts(long str, long strlen) {
      volatile char *out_ptr = (volatile char*)SC_SIM_OUTPORT;
      const char *in_ptr = (const char*)str;
      for (long len = strlen; len > 0; --len)
        *out_ptr = *in_ptr++;
    }
    

    如您所见,该函数sc_puts只是在地址处逐字节写入字符串的字符SC_SIM_OUTPORT。只需要在汇编器中编写它:

    /* The constant is from the sc_print.c file. */
    #define SC_SIM_OUTPORT (0xf0000000)
    
    /* Stores a character directly to SC_SIM_OUTPORT, assuming
       that a1 = SC_SIM_OUTPORT. */
    #define RVTEST_PUTCHAR(c)                                               \
            li a0, (c);                                                     \
            sb a0, 0(a1);
    
    #define RVTEST_PASS                                                     \
            li a1, SC_SIM_OUTPORT;                                          \
            RVTEST_PUTCHAR('o')                                             \
            RVTEST_PUTCHAR('k')                                             \
            RVTEST_PUTCHAR('\n')                                            \
            fence;                                                          \
            mv a1, TESTNUM;                                                 \
            li  a0, 0x0;                                                    \
            ecall
    
    #define TESTNUM x28
    #define RVTEST_FAIL                                                     \
            li a1, SC_SIM_OUTPORT;                                          \
            RVTEST_PUTCHAR('f')                                             \
            RVTEST_PUTCHAR('a')                                             \
            RVTEST_PUTCHAR('i')                                             \
            RVTEST_PUTCHAR('l')                                             \
            RVTEST_PUTCHAR('\n')                                            \
            fence;                                                          \
            mv a1, TESTNUM;                                                 \
            li  a0, 0x1;                                                    \
            ecall
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5