随笔分类 -  Risc-V

E203 itcm
摘要:E203 itcm是64Kb,所以地址总线为16位,2^16=64Kb, 数据线宽度为64 bits(8 bytes),所以address width是16-3=13bit,ram depth 是2^16/8=2^13。 itcm的基地址默认是0x8000_0000。 在目录e200_opensource/riscv-tools/riscv-tests/isa/ge... 阅读全文

posted @ 2019-09-02 14:04 迈克老狼2012 阅读(1470) 评论(1) 推荐(0) 编辑

RV32FDQ/RV64RDQ指令集(2)
摘要:下面我们逐个看下每个指令的细节:fadd.sfadd.s rd, rs1, rs2 //f [rd] = f [rs1] + f [rs2]单精度浮点加(Floating-point Add, Single-Precision). R-type, RV32F and RV64F.把寄存器 f[rs1]和 f[rs2]中的单精度浮点数相加,并将舍入后的和写入 f[rd]。示例:to dofs... 阅读全文

posted @ 2019-08-25 14:25 迈克老狼2012 阅读(2441) 评论(0) 推荐(0) 编辑

RV32FDQ/RV64RDQ指令集(1)
摘要:Risc-V架构定义了可选的单精度浮点指令(F扩展指令集)和双精度浮点指令(D扩展指令集),以及四精度浮点指令集(Q扩展指令集)。Risc-V架构规定:处理器可以选择只实现F扩展指令子集而不支持D扩展指令子集;但是如果支持了D扩展指令子集,则必须支持F扩展指令子集;如果支持了Q扩展指令集,必须支持D扩展指令集。Risc-V架构规定的浮点数符合IEEE754 2008规则,可以从下面的链... 阅读全文

posted @ 2019-08-25 08:41 迈克老狼2012 阅读(2210) 评论(0) 推荐(0) 编辑

E203数据冲突处理OITF
摘要:流水线的数据冲突分为三类:WAR,RAW,WAW https://wenku.baidu.com/view/e066926d48d7c1c708a14508.htmlWAR: write after read 相关性,又称先读后写相关性。比如下面的指令序列,第一条指令会读取x4,第二条指令会写x4。在流水线中,如果第二条指令比第一条指令先写x4,则第一条指令就会读出错误的值... 阅读全文

posted @ 2019-08-14 09:37 迈克老狼2012 阅读(2079) 评论(0) 推荐(0) 编辑

E203 CSR rtl实现分析
摘要:CSR状态控制寄存器,每个hart都有自己的CSR。对于每个hart,可以配置的状态寄存器是4k。CSR寄存器的功能见:https://www.cnblogs.com/mikewolf2002/p/11314583.html CSR实现的rtl代码是e203_exu_csr.v,下面我们分析一下代码实现: 输出输入信号如下:module e203_exu_csr( ... 阅读全文

posted @ 2019-08-13 11:33 迈克老狼2012 阅读(1725) 评论(0) 推荐(0) 编辑

RiscV汇编介绍(1)-编译过程
摘要:从c/c++源文件,到可以执行文件,需要以下几个步骤:预处理/编译汇编链接下面我们以hello world程序为例,展示整个编译链接过程。1. 编写hello.c代码#include int main(void){ printf("Hello World!\n"); return 0;}2.使用gcc –E hello.c –o hello.i, 将源文件hello.c... 阅读全文

posted @ 2019-08-12 20:29 迈克老狼2012 阅读(3010) 评论(0) 推荐(0) 编辑

RiscV汇编介绍(2)-编译过程
摘要:elf文件全称是Executable and Linkable Format,可执行链接格式,elf文件中除了机器码之外,还有段加载地址,运行入口地址,数据段等。 elf文件格式主要有以下三种:可重定向文件:文件保存着代码和适当的数据,用来和其它的目标文件一起来创建一个可执行文件或者共享目标文件。可执行文件:文件保存着一个用来执行的文件。共享目标文件:即共享库。elf文件详解:... 阅读全文

posted @ 2019-08-08 19:51 迈克老狼2012 阅读(5806) 评论(1) 推荐(0) 编辑

E203 CSR寄存器
摘要:RiscV架构则定义了一些控制和状态寄存器(CSR),用于配置或记录一些运行的状态。CSR寄存器是处理器内核内部的寄存器,使用专有的12位地址编码空间,对一个hart,可以配置4k的CSR寄存器。 蜂鸟203支持以下的CSR寄存器: 类型... 阅读全文

posted @ 2019-08-07 12:27 迈克老狼2012 阅读(15237) 评论(1) 推荐(3) 编辑

E203译码模块(3)
摘要:下面的代码译码出指令的立即数,不同的指令有不同的立即数编码形式。//I类型指令的imm,[31:20],符号位扩展成32位。wire [31:0] rv32_i_imm = { {20{rv32_instr[31]}} , rv32_instr[31:20] ... 阅读全文

posted @ 2019-08-06 09:41 迈克老狼2012 阅读(822) 评论(0) 推荐(0) 编辑

RVZicsr指令集
摘要:Riscv中每个硬件线程(hart)有4096个独立地址空间的状态寄存器。我们可以通过Zicsr指令读写csr寄存器。总共有6条csr读写指令,这些指令之前都在RV32I/RV64I基础指令集里面,在最新文档中,被放在了Zicsr扩展指令集中。 6条指令的编码如下,其中[31-20]总共12位表示4096个csr寄存器地址。 csr 11109... 阅读全文

posted @ 2019-08-05 19:23 迈克老狼2012 阅读(4622) 评论(0) 推荐(0) 编辑

E203 译码模块(2)
摘要:常用的alu算术运算指令(包括ecall和 ebreak)在regular alu单元处理。regular alu单元为alu单元的一个子单元。regular单元的信息总线共21位,格式如下图所示,其中grp为000: 下面的代码产生regular alu单元的信息总线。 // ALU Instructions wire rv32_addi =... 阅读全文

posted @ 2019-08-05 14:38 迈克老狼2012 阅读(1117) 评论(0) 推荐(0) 编辑

E203 译码模块(1)
摘要:E203是两级流水线结构,第一级是IFU进行取指操作,第二级包括译码、执行、交付和写回等功能。架构图如下: https://www.cnblogs.com/images/cnblogs_com/mikewolf2002/1519640/o_pipeline.jpg 译码模块就是把机器码翻译成对应的输出功能。E203支持RV32IMAC,它的译码器模块是纯的组合电路实... 阅读全文

posted @ 2019-08-01 09:56 迈克老狼2012 阅读(2690) 评论(0) 推荐(0) 编辑

蜂鸟E203 IFU模块
摘要:E203的IFU(instruction fetch unit)模块主要功能和接口如下:IFU的PC生成单元产生下一条指令的PC。该PC传输到地址判断和ICB生成单元,就是根据PC值产生相应读指请求,可能的指令目的是ITCM或者外部存储,外部存储通过BIU访问。该PC值也会传输到和EXU单元接口的PC寄存器中。取回的指令会放置到和EXU接口的IR(Instruction register)寄存器中... 阅读全文

posted @ 2019-07-29 11:24 迈克老狼2012 阅读(3769) 评论(1) 推荐(2) 编辑

E203 bypass buffer
摘要:如果fifo中没有数据,且有输入,则是bypass fifo,同周期内直接把输入数据转到输出数据。如果fifo中有数据,则读取fifo,成为普通的同步fifo。module sirv_gnrl_bypbuf # ( parameter DP = 8, parameter DW = 32) ( input i_vld, output i_rdy, i... 阅读全文

posted @ 2019-07-26 14:57 迈克老狼2012 阅读(1449) 评论(1) 推荐(1) 编辑

E203 同步fifo
摘要:1. 输入端, 输入信号, i_vld,表示输入请求写同步fifo,如果fifo不满,则fifo发送i_rdy 到输入端,开始写fifo。i_vld和i_rdy是写握手信号。2.输出端 o_rdy表示接受端已经准备好了,可以读取fifo,o_vld表示fifo准备好了,不为空,可以输出到接收端。o_rdy和o_vld是握手信号。3.如果fifo是深度为0,则是bypass模式... 阅读全文

posted @ 2019-07-26 10:47 迈克老狼2012 阅读(1467) 评论(0) 推荐(1) 编辑

memory一致性模型
摘要:https://homes.cs.washington.edu/~bornholt/post/memory-models.htmlhttps://www.cs.cmu.edu/afs/cs/academic/class/15418-s12/www/lectures/14_relaxedReview.pdfhttps://content.riscv.org/wp-content/uploads/20... 阅读全文

posted @ 2019-07-18 09:20 迈克老狼2012 阅读(840) 评论(0) 推荐(0) 编辑

RV64I基础整数指令集
摘要:RV64I是RV32I的超集,RV32I是RV64I的子集。RV64I包括RV32I的所有40条指令,另外增加了12条RV32I中没有的指令,还有三条移位指令(slli, srli,srai)也进行小小的改动。 在RV64I中,整数寄存器是64位的,即xlen=64,所以每条指令中的寄存器都是64位运算,立即数符号位扩展也是到64位。 下面介绍一下RV64I中新增的... 阅读全文

posted @ 2019-07-17 09:46 迈克老狼2012 阅读(7479) 评论(0) 推荐(0) 编辑

RV32I基础整数指令集
摘要:RV32I是32位基础整数指令集,它支持32位寻址空间,支持字节地址访问,仅支持小端格式(little-endian,高地址高位,低地址地位),寄存器也是32位整数寄存器。RV32I指令集的目的是尽量简化硬件的实施设计,所以它只有40条指令(备注,之前是47条指令,在最新的规范中,一些csr指令被放在扩展指令集中)。这40条指令几乎能够模拟其它任何扩展指令(除了A扩展指令,因为原子指令... 阅读全文

posted @ 2019-07-16 18:26 迈克老狼2012 阅读(22838) 评论(0) 推荐(3) 编辑

Zifencei扩展
摘要:fence 指令对外部可见的访存请求,如设备 I / O 访问,内存访问等进行串行化。外部可见是指对处理器的其他核心、线程,外部设备或协处理器可见。 fence.i 指令同步指令和数据流。在执行 fence.i 指令之前,对于同一个硬件线程(hart), RISC-V 不保证用存储指令写到指令存储区的数据可以被取指指令取到。 Zifencei扩展目前仅包括FENCE... 阅读全文

posted @ 2019-07-15 20:22 迈克老狼2012 阅读(3217) 评论(0) 推荐(0) 编辑

Risc-V简要概括
摘要:1.Risc-V硬件平台术语 一个RiscV硬件平台可以包含一个或多个RiscV兼容的核心、其它非RiscV兼容的核心、固定功能的加速器、各种物理存储器结构、I/O设备以及允许这些部件相互连通的互联结构。比如下面的SiFive Freedom U540平台。就包括4个U54 RiscV RV64GC兼容核心,以及一个E51 RV64IMAC核心,DDR3/DDR4内存控制器接口,各种外设... 阅读全文

posted @ 2019-07-12 19:25 迈克老狼2012 阅读(12234) 评论(2) 推荐(3) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示