程序的执行和模拟器 freestanding 运行时环境示例程序: 1234567#include <stdint.h>void _start() { volatile uint8_t* p = (uint8_t*)(uintptr_t)0x10000000; *p = 'A'; while (1) ;} 编译:rv32gcc 2024-08-09 OS > RISCV #模拟器 #二进制程序 #程序
从C语言到二进制程序 预处理123456789101112#include <stdio.h>#define MSG \ "Hello \World!\n"int main() { printf(MSG /* "hi!\n" */);#ifdef __riscv printf("Hello RISC-V!\n");# 2024-08-08 C 语言 > OS > RISCV #C 语言 #二进制程序
Linux101:最好的Linux 入门资料 前言本文是对 Linux101 这本及其优秀的 Linux 入门的一些心得体会,链接:Linux101 软件安装和文件操作apt建议用 apt 安装,apt 作为前端,它会自动处理软件包之间的依赖关系、升级软件包以至升级发行版,自动处理升级发行版所需的依赖关系等等。但是需要明白,真正执行安装软件的是 dpkg。 另外,dpkg -i 也可以安装软件,但是它不会处理依赖,如果安装报错,应该使用 2024-08-07 Linux 基础 #Linux 入门 #Linux
PA1 感悟与过程 一、单步执行单步执行就是传入 1,让它执行一个指令就好。 12345678static int cmd_si(char* args) { if (args == NULL) cpu_exec(1); else cpu_exec((uint64_t)(atoi(args))); return 0;} 其中源码这里接受的是一个 ui 2024-08-05 ysyx > PA1 #ysyx #PA1 #sbd
表达式求值(随心所欲版) 一、构建 tokens所有的代码基本上都在 sdb.c中实现,没有轮子自己造。 构建 tokens 这步,基本上就是实现一个简单的词法分析器,从 args[0]开始,一个一个模式进行识别。比如对于表达式: 0x80100000+ ($a0 +5)*4 - ( $ t1 + 8) + 32 首先就要能识别出 0x开头的 16进制数、$开头的寄存器,识别出来以后,我们首先就是把这些能计算的 2024-07-22 ysyx #ysyx #PA1 #sbd
数字电路实验7 一、状态机 状态名 y3 y2 y1 y0 A 0 0 0 0 B 0 0 0 1 C 0 0 1 0 D 0 0 1 1 E 0 1 0 0 F 0 1 0 1 G 0 1 1 0 H 0 1 1 1 I 1 0 0 0 这是一个状态编码,建立一个Verilog文件,用SW0作为FSM低电平有效同步复位端,用SW1作为输入w,用KEY0作为手动的 2024-07-19 ysyx > 数字电路实验 #ysyx #NVBoard #状态机 #ps/2接口 #键盘
数字电路实验6 一、移位器 控制位 工作方式 000 清零 001 置数 010 逻辑右移 011 逻辑左移 100 算数右移 101 左端串行输入1位值,并行输出8位值 110 循环右移 111 循环左移 以下是一个移位寄存器的实现: 123456789101112131415161718192021222324252627282930module move(ctl 2024-07-18 ysyx > 数字电路实验 #ysyx #NVBoard #寄存器 #移位器
数字电路实验3 设计 ALU在CPU中,ALU的功能除了加减法运算之外,往往还包含逻辑运算、移位、乘除法、比较大小等等。我们这里按照RISC-V中基础指令集RV32I的ALU的设计要求来进行介绍。 RISC-V基础指令集RV32I只支持32位整型数值的操作。操作数可以是带符号补码整数或无符号数。ALU不需要完成乘除法,不需要进行溢出判断,相关操作由软件来完成。RV32I的ALU需要完成以下操作: 加减法操作 2024-07-16 ysyx > 数字电路实验 #ysyx #NVBoard #加法器 #ALU
数字电路实验-带有减法功能的加法器 一、加法器一位加法器就是异或作为结果,与作为进位标志,因此可以很简单的设计出一位加法器: 如果将四个一位加法器连起来,那么就成 4位了串行进位加法器电路: 需要注意的是,上面的加法器是基础构建,它只执行加法功能,其它任何溢出、进位等等都是高层的概念,和加法器没有任何关系。 二、加法器执行加法计算在数据类型一致的情况下,比如,长度统一。这时候就可以由加法器计算它们之间的加法运算,但是数据类型 2024-07-15 ysyx > 数字电路实验 #ysyx #NVBoard #加法器
数字电路实验2 一、译码器译码器带有一个使能输入,以及 n 位输入端,一共能输出 2^n 次方种信号。在二进制码中,最常用的输出编码是位中取1位编码,即任何时刻,m 位输出编码中只能有1位有效,其余各位都为0,这样的二进制编码被称为独热编码(one-hot encoded),意思是那个被置为1的码看起来是“热”的,而二进制译码器输出的信号就是独热编码。也可以理解为,这些信号之间是正交的,某一个信号不能通过其它 2024-07-14 ysyx > 数字电路实验 #ysyx #NVBoard #译码器 #编码器