P5 CPU设计文档
设计草稿
流水线架构
数据通路
5 级流水 CPU 分为 5
个阶段:取指阶段(F),译码阶段(D),执行阶段(E),存储阶段(M),写回阶段(W)。通过在两个阶段之间加入寄存器,来保存在前一周期中的上一阶段所传来的数据,同时在后一周期中为下一阶段提供数据。无论是数据还是信号,都需要在寄存器中进行保存,直至不再需要。
下面先从增加流水线寄存器入手,完善数据通路:
相对 P4,需要修改的地方为:
新增流水线寄存器
NPC 模块输出 PC+4 改为输出 PC+8,并区分输入 F_PC 与 D_PC
ALU 不再有 Zero 信号,并且将判断相等提前到对 E_GPR_RD1 与 E_GPR_RD2
新增比较器
译码器
采用集中式译码:在取指令(F
级)时或者读取寄存器阵列信息(D
级)前,将所有的控制信号全部解析出,然后让其随着流水往后逐级传递。
流水线冒险
在流水线系统中,多条指令同时执行,当一条指令依赖于还没有结束的另一条指令的结果时,将发生冒险(hazard),也被称为“冲突”。冒险的类型,主要有结构冒险(
Structural...
P4 CPU设计文档
设计要求
处理器为 32
位单周期处理器,不考虑延迟槽,应支持的指令集为:add, sub, ori, lw, sw, beq, lui, jal, jr, nop,其中:
nop 为空指令,机器码
0x00000000,不进行任何有效行为(修改寄存器等)。
add, sub 按无符号加减法处理(不考虑溢出)。
需要采用模块化和层次化设计。顶层文件为
mips.v,有效的驱动信号要求包括且仅包括同步复位信号
reset 和时钟信号 clk,接口定义如下:
1234module mips( input clk, input reset);
设计草稿
数据通路模块定义
PC
信号名
方向
功能
NPC[31:0]
I
输入下一个 PC 值
clk
I
时钟信号
reset
I
同步复位信号
PC[31:0]
O
输出当前 PC...
P3 CPU设计文档
设计草稿
设计要求
处理器为 32
位单周期处理器,应支持的指令集为:add, sub, ori, lw, sw, beq, lui, nop,其中:
nop 为空指令,机器码
0x00000000,不进行任何有效行为(修改寄存器等)。
add, sub 按无符号加减法处理(不考虑溢出)。
需要采用模块化和层次化设计。顶层有效的驱动信号要求包括且仅包括异步复位信号
reset(clk 请使用内置时钟模块)。
可以将微体系结构分为两个相互作用的部分:数据通路(datapath)和控制(control)。
先根据应实现的指令对功能部件进行设计与搭建,然后再对各个功能部件进行连接,形成完整的数据通路。
数据通路搭建完毕后,再构造控制器,以根据读取的指令产生相应的控制信号。
数据通路
1 数据通路模块定义
先从包含状态元件的硬件开始,然后在这些存储组件之间增加组合逻辑基于当前状态计算新的状态。
1.1 程序计数器(PC)
32 位寄存器。输出 PC...
不同方式查看CUDA版本的含义
最近在给深度学习项目搭建环境时,遇到了不得不使用 CUDA 11.8
的情况,而我在通过不同方式查看自己 CUDA
版本时发现了不同版本号,产生了诸多疑惑(甚至差点卸载了 CUDA
重装)。经过一番探索以及向d老师寻求帮助后,终于理清了他们的关系,遂写下此文以帮助遇到同样问题的追光者们~(部分内容引用自DeepSeek,如有错误之处欢迎指出!)
nvcc -V
该方式显示的是当前环境下 nvcc 对应的
CUDA 工具包(CUDA Toolkit)版本(如下面的
cuda_12.0 表示 CUDA Toolkit 版本为12.0):
12345nvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2023 NVIDIA CorporationBuilt on Fri_Jan__6_16:45:21_PST_2023Cuda compilation tools, release 12.0, V12.0.140Build...