Luyoung
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
异常响应机制笔记:从 ECALL 到控制流切换

异常响应机制笔记:从 ECALL 到控制流切换

前言在 riscv 中,当发生异常的时候,需要调用 ecall 指令来陷入异常: 12345678910111213#define ECALL(dnpc) \ {
2024-10-18
Computer Architecture
#CPU #ysyx #exception
NPC 设备模型笔记:三种设备接口的差别

NPC 设备模型笔记:三种设备接口的差别

前言在把 PA2.3 做完之后,顺手把 ysyx 的 npc 中的设备模仿 nemu 也实现了一下,分别是串口、时钟、vga,本文讨论一下这三种设备的区别。事实上,这三种设备循序渐进,虽然是三种设备,但其实在 CPU 眼里,它就是同一种东西,都是读写内存。 设备在 nemu 的模型中,程序访问设备的时候,会提供统一的接口,比如 io_read、io_write,比如: 123456789101
2024-10-16
Computer Architecture
#NPC #ysyx #device model
RISC-V 函数调用实验:调用约定与栈帧观察

RISC-V 函数调用实验:调用约定与栈帧观察

前言昨天开组会,助教在会上问了一个问题:A 函数调用 B 函数,s0 的保存是哪一个函数进行的。我觉得这个问题挺熟悉的,因为之前在看 riscv 的 xv6 操作系统时遇到过。 实验main.c: 12345678#include <add.h>#include <stdio.h>int main() { int a = 10, b = 5; in
2024-10-14
Computer Architecture
#assembly #RISC-V #calling convention
五级流水线 CPU 实现:取指、译码、执行、访存与写回

五级流水线 CPU 实现:取指、译码、执行、访存与写回

前言在 PA2 中,要求实现一个单周期的 CPU,也就是 NPC。这个工作做完了之后,我发现了一本好书,名字叫做《CPU 制作入门:基于 RISC-V 和 Chisel》,是一个日本作者写的。内容非常适合入门,我花了一天时间就看到了单周期,被作者的思路完全影响了,第二天就立即开始重构 NPC,重构好了之后,整个项目看起来很清晰,把能在 ID 阶段做的事情都做了,一共分了 5 个阶段:IF、ID
2024-10-10
Computer Architecture
#CPU #pipeline #PA2
NEMU 工作原理解析:编译、运行与仿真框架

NEMU 工作原理解析:编译、运行与仿真框架

前言本人在实现 npc 的仿真环境的基础设施的时候,发现要重新写很多东西,好消息是这些东西已经在 nemu 中实现了。但是把它重新部署到 npc 却不是一件简单的事情,要对文件组织、编译流程有一个深刻的认识。 编译
2024-09-26
Computer Architecture
#PA2 #NEMU #emulator
DPI-C 参数传递问题:SystemVerilog 与 C 的交互细节

DPI-C 参数传递问题:SystemVerilog 与 C 的交互细节

前言DPI-C 是 Verilator 提供的一种机制,可以在 Verilog 代码中调用 C/C++ 中定义的 C 语言函数。这为 Verilog 与仿真环境(C/C++)的交互提供了方便。 DPI-C 的基本使用步骤 在 Verilog 中声明 C 函数 使用 import "DPI-C" 语句在 Verilog 中声明要调用的 C 函数。语法如下
2024-09-25
Digital Design
#C #DPI-C #SystemVerilog
Verilator 实践:编译多个 C++ 文件

Verilator 实践:编译多个 C++ 文件

目录结构12345678910verilator_helpers/│ └── include/│ └── helpers.h│ └── src/│ └── helpers.cpp│verilatorTest/├── Makefile├── top.v└── main.cpp 实验在这个实践中,用 verilator 编译了多个文件:helpers.cp
2024-09-25
Digital Design
#Verilator #simulation #C++
Chisel BlackBox 机制:引入外部 Verilog 模块

Chisel BlackBox 机制:引入外部 Verilog 模块

什么是 Chisel 中的 BlackBox?在硬件设计中,BlackBox 是一种用于集成外部硬件模块的方法。在 Chisel 中,BlackBox 允许设计者将已经存在的硬件描述(如 Verilog 或 SystemVerilog 编写的模块)引入到 Chisel 项目中,而无需用 Chisel 重新实现这些模块。这种方法特别适用于以下情况: 重用现有模块:你可能已经有一些经过验证的 V
2024-09-24
Digital Design
#Chisel #BlackBox #Verilog
YPC 研究笔记:被执行程序、运行环境与接口设计

YPC 研究笔记:被执行程序、运行环境与接口设计

一、前言本文尝试去分析 YSYX 中的一个实例 YPC,YPC 使用 Chisel 来实现基本的指令执行过程:定义指令结构、取指、解码(操作码、操作数)、执行、更新 PC。 二、写被执行的程序这个程序主要使用内嵌汇编的方法来执行一些汇编代码,我们可以确认它仅仅包含这些指令,应为 YPC 被设计为只能执行 I类指令的两种指令,addi 和 ebreak。 1234567891011121314s
2024-09-20
Computer Architecture
#runtime #PA2 #YPC
Chisel 测试模块:测试接口与高阶函数用法

Chisel 测试模块:测试接口与高阶函数用法

一个普通的测试模块12345678910111213141516171819202122232425import chisel3._import chiseltest._import org.scalatest.flatspec.AnyFlatSpecclass FlipFlopTest extends AnyFlatSpec with ChiselScalatestTester {
2024-09-19
Digital Design
#Chisel #testing #Scala
1…1112131415…31

搜索

Hexo Fluid
总访问量 次 总访客数 人