摘要:
简单地介绍一下游戏的背景设定。游戏一开始,你会从虚无中慢慢恢复意识。当你醒来时,仍然昏沉疼痛的脑袋回想不起多少现实的事,你只隐约记得自己是个警探,还有案件需要侦破。作为一个失忆警探,你需要做的是在苏醒以后,和前来接应你的金 ·曷(he)城 警官合作,侦破位于旅社后面的吊尸案。在破获案件的过程中有大量 阅读全文
摘要:
1. unique_ptr:这种智能指针是用于独占一份内存资源,一个资源也就只允许被一个unique_ptr占用。离开作用域后自动删除,无需显式调用delete。并且不能复制,只能转移。 原理实现: template <typename T> class unique_ptr{ private: T 阅读全文
摘要:
在总线章节,我们需要将单周期处理器慢慢转变为多周期处理器。讲义提供了异步总线的思路:master发送valid信号,表示自己当前信号合法,slave发送ready信号,表示当前信号已经收到。达成握手的效果。 讲义里首先要求增加一个只读取的sram给IFU使用,用于读取指令。这个很好实现,sram元件 阅读全文
摘要:
在进行pa4:多道程序的处理时,其中一道题目除了要完成kcontext,还需要对应修改trap.s的__asm_trap函数。使得中断响应机制能正确切换不同进程的上下文,在kocontext已经修改好以后,要修改这里其实也很容易。 __am_asm_trap: addi sp, sp, -CONTE 阅读全文
摘要:
有关时间的内容应该被拆分为两部分:硬件和库环境 在使用nemu时,硬件部分由nemu充当,在nemu里对时间的处理如下:首先查看/nemu/src/device/timer.c, static void rtc_io_handler(uint32_t offset, int len, bool is 阅读全文
摘要:
在RTL里,由于我将指令的分析与处理拆成了两个单元,所以指令的拆解也被分到了两个元件。由于指令的opcode部分没有重叠,所以我直接在组合逻辑里用case来区分指令opcode,在内部再根据funct3 funct7等值进行区分。nemu里的指令分析用到了正则匹配,但在这里我们不需要考虑。 alwa 阅读全文
摘要:
difftest在测试集中可以起到十分重要的作用,可以快速找到发生问题的指令和pc寄存器地址。在nemu作为dut,参考其他模拟器(比如spike)的功能中,大部分代码已经完成,我们只需要完成寄存器的比对即可。但在RTL中重新实现这一功能或者类似功能时,我们需要完成更多函数,但大体的框架已经完成,我 阅读全文
摘要:
nemu本身自带了将自己编译为动态库的功能,在menuconfig->build target里选择shared object即可。 在编译完成后,build文件夹里就会出现riscv32-nemu-interpreter-so这个库。首先可以用file命令检查文件,只要返回信息是lsb,share 阅读全文
摘要:
首先看一下讲义里提到的yield os,这个os里面只有两道程序切换的模拟内容,只要做过pa3就很容易理解: #define STACK_SIZE (4096 * 8) typedef union { uint8_t stack[STACK_SIZE]; struct { Context *cp; 阅读全文
摘要:
用户程序从main开始,而调用用户程序的就是navyapps里crt0的start.S,这个汇编代码会调用crt0.c里面的call_main()函数,然后调用用户程序的main(),用户程序执行完了以后,返回crt0.c,继续执行exit()。然后结束。 如何解决“不知道程序要被放到哪里”这个问题 阅读全文
摘要:
一般情况下,我们在vscode里编辑C/C++代码时用的都是微软的c++ package,但是这个插件包很多时候无法正确分析出语法,导致大量虚假错误报告,为了解决这个问题,我们首先禁用掉C++插件包,然后准备更换clangd。 clangd是一个基于Clangd的分析服务器,方便我们分析代码语法。为 阅读全文