FPGA硅农
数字IC设计,FPGA开发
展开
-
Cache的PLRU替换策略及RTL实现
LRU(Least Recently Used)替换策略是cache的经典替换策略之一,然而,LRU替换策略的硬件开销较大。因此,一些现代处理器,例如Intel 486和PowerPC,它们使用的cache替换策略是PLRU(pseudo-LRU)。PLRU是LRU的一种近似方法,本文介绍PLRU中的tree-PLRU(tree-based pseudo-LRU)。原创 2023-02-01 22:16:42 · 3601 阅读 · 3 评论 -
RISC-V CPU设计(七)---分支预测技术
动态分支预测技术(BHT和BTB介绍)原创 2022-06-02 16:00:20 · 1986 阅读 · 0 评论 -
RISC-V CPU设计(六)---四路组相联Cache的设计
Cache设计基本信息本文讲述四路组相联Cache的RTL设计,其中,cache采用写回法、写分配法,替换策略采用LRU替换,下面是设计的一个基本情况:1.Cache共16个组(set),每组4个cache line,每个cache line包含8个字,一个字的位宽为32bit,即4个字节。每个cache line,还会额外设置一个valid有效位,一个dirty脏位,一个tag标签位以及一个lru计数器(32bit)。只考虑数据部分,则cache的大小为4*8*4*16=2048字节。2.DRA原创 2022-04-17 17:05:39 · 4689 阅读 · 0 评论 -
RISC-V CPU设计(三)---多周期CPU的设计与实现
基本情况本多周期CPU支持RV32I指令集(fence,ecall,ebreak除外),已通过部分指令的测试,如代码有bug,欢迎指出。模块划分代码将CPU划分为以下几个模块:1.控制单元:ControlUnit用于产生控制信号,是CPU的大脑,指挥中枢。2.分支决策单元:BranchUnit用于决定B型指令是否发生跳转3.立即数单元:ImmUnit用于从指令中解析出立即数.4.寄存器堆:RegisterFileRISC-V的32个寄存器,其中x0寄存器恒为0,不可更改。5.指令存储原创 2022-03-18 10:16:12 · 4847 阅读 · 2 评论 -
RISC-V CPU设计(一)---RV32I指令集介绍
RV32I是RISC-V最基本的指令集,包括6种,其中4种为核心的类型(R/I/S/U)。下面给出了这6种指令的格式指令详情如下R型指令包含两个源寄存器和一个目的寄存器编号,都是5位的(32个寄存器),指令的执行过程较为简单:Reg[rd]=Reg[rs1] op Reg[rs2]I型指令I型指令分为三类,分别为寄存器-立即数型、LOAD型和JALR型,下面分别作一介绍寄存器-立即数型比如ADDI指令,执行的操作为Reg[rd]=Reg[rs1] op ImmLOAD型包括LW,L原创 2022-03-11 11:18:58 · 2932 阅读 · 0 评论 -
RISC-V CPU设计(二)---数据通路
本文讲述五级流水线RISC-V CPU数据通路,我们采用的是如下图所示的架构R型指令的数据通路IF阶段根据PCF读取指令,并将PCF和读取到的指令寄存到IF2ID段寄存器:PCD<=PCFInstr<=IM[PCF]ID阶段根据Instr生成控制信号,在R型指令中,用到的有:MemToRegD:(写入寄存器的数是否来自MEM,R型指令该信号为0,即写入寄存器的数据并非来自MEM)。AluControlD[3:0]:用于指示ALU进行何种操作。AluSrc1D:第一个源操作数原创 2022-03-11 14:48:08 · 2327 阅读 · 0 评论 -
RISC-V CPU设计(四)---Cache的基本原理
文章目录Cache的介绍Cache的命中和缺失Cache的组织方式直接相联映射优点缺点全相联映射优点缺点组相联Cache的更新策略写直通(write through)回写(write back)Cache分配策略读分配(read allocation)写分配(write allocation)Cache的替换策略随机替换LRUFIFOLFUCache的介绍在现代计算机中,CPU的计算速度往往要比主存的速度快很多,如果每次CPU都要从主存中读数据,或者每次写回数据都要写回DDR,那么整个计算机工作的速度将原创 2022-04-01 00:36:45 · 2439 阅读 · 0 评论 -
RISC-V CPU设计(五)---流水线中的冒险
流水线中冒险的处理结构冒险数据冒险RAWWARWAW如何解决控制冒险流水线可以极大的提升CPU的吞吐率,但是流水线的流动并不是一帆风顺的,在有些情况下,下一个时钟周期中的下一条指令将会因为某些前期的操作还未完成而无法执行,这种情况被称为流水线的冒险,共分为三种冒险:1.数据冒险 2.结构冒险 3.控制冒险结构冒险定义:当一条指令需要的硬件部件还在为之前的指令工作,而无法为这条指令提供服务,那就导致了结构冒险。(这里结构是指硬件当中的某个部件,因此也称为资源冲突)例如,在经典的五级流水线中,ID阶段的原创 2022-04-02 13:21:35 · 2874 阅读 · 0 评论