Code Monkey home page Code Monkey logo

tiny_rv_core's Introduction

简述

  • 手写处理器内核
    • 架构:risc-v
    • 模块
      • rv32i
      • timer
      • rtc
      • interrupt
      • mmu
      • mpu
      • M mode
      • U mode
      • S mode
    • 目标
      • 能够运行I型基础指令
      • 超标量处理器:2发射结构
      • 实现mmu
      • 实现mpu
      • 能够运行操作系统

Date

12月

11月

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 月末总结

Log

12

1226

完成项目
  • B型指令
  • lui 指令
  • auipc 指令

11

月末总结

 经过一段时间的忙活,一个月的时间已经过去了。在写这份总结也已经过去了好几天。期间也没有了打卡。

 打卡了一段时间后,也就是11月月末。由于学业上的时间安排不当,有些忙碌,开始对打卡进行了敷衍,甚至是为了完成打卡而打卡。当然,也出现了其他问题,比如打卡不及时,时间不对应等等。

 11月过去了,经过一段时间的思考,这个项目已经启动了,那么就得继续进行下去。那么现在又迎来了考试的期末复习阶段。研究仍然需要继续,但是不能向以往那样每天打卡。也是为了为了打卡而打卡这的行为的出现,真正潜心的规划时间,安排好各个事务的顺序,现在有突破/完成一个阶段会更新一次。

 在这个阶段中,我发现需要整理好学习了和已经完成的质料,这个十分的重要。毕竟人是不可能记住怎么多。还有就是能够证明了我学习了这些内容,做过了这些东西。也能够在我以后复习的时候能够看到。

11.30

代码实战
  • 编写测试文件
  • 连接线路(线路好乱,不知道有没有方便的verilog工具)
  • 修改编译错误
  • 连线错误

11.29

代码实战
  • 完成总线的译码数据选择部分,译码器不加在总线部分连接,按需要自定义
其他
  • 处理器内存分布设计

11.28

代码实战
  • 完成主机总线部分
总线相关
  • 带锁定信号的组合逻辑难以设计,暂缓设计,裁剪锁定功能
  • 预备从机的译码部分设计

11.27

  • 设计带锁定信号的仲裁器

11.26

  • 设计带锁定信号的仲裁器

11.25

代码实战
  • 完成通用的数据仲裁器(允许优先级抢断),并完成模拟测试。
  • 完成数据选择器的实现(未验证)

11.24

  • 总线模块设计

学业以及其他原因,花在这里的时间明显减少了

要做调整以及规划

11.23

  • 学习AHB总线协议
  • 总线仲裁设计(未果)

11.22

  • 学习总线(AHB、AXI)最终决定使用AHB总线(多主多从)

11.21

代码实战
  • 添加R型指令的译码部分,依据设计其他模块不需要修改也能工作
  • 添加B型指令的译码部分
  • 通过git管理代码

11.20

代码实战
  • 想修改regfile的结构,不知道为什么vvp仿真一直出不了结果,最终改回了原来的方案。
  • 修改了ALU Adder的位宽,调整了输入加法器的输入信号
  • 调整了slt、sltu操作的检测位

11.19

代码实战
  • 修改Decode模块(RISC-V 指令版本修改前后不一致)
  • Debug ALU模块
工具整合
  • 编译risc-v工具链
  • 编辑链接文件
  • 添加Makefile文件
  • 编写转换测试文件的小工具

11.18

代码实战
  • 编写alu算数模块的功能(slt, sltu, xor, or, and, sll, srl, sra)

11.17

代码实战
  • 完成其他I型指令的译码器
  • 添加了alu的算数解码功能(具体功能未实现)
  • 完成了线路连线

11.16

实践
  • I型指令jalr的结构设计
代码实战
  • jalr指令的实现
  • 预备其他I型指令

11.15

实践
  • 修改ROM的实现方式,可以立即获取ROM的值
  • 编写软核PLL,实现1Hz的时钟(可配置)。减缓时钟,方便查看效果
  • 使其他的复位与核心的复位分离,单独查看核心复位情况
  • 时钟连续/手动可调
方向调整
  • 预备跳转指令的架构设计
  • 研究跳转分支的实践
  • Load-Store延后设计
  • 计划攻下总写接口(这个部分比较重要,处理器内核主要从这部分获取数据)

11.14

代码实战
  • 完成wbu模块
  • 整理修改代码结构以及命名
  • 联合调试,仿真无误
硬件测试
  • 编写测试顶层文件
  • 调和联通各个部分
  • 学会使用IP核
  • 学会调试探针
  • 完成硬件测试,并验证通过

11.13

代码实战

  • 编写ALU加法器部分,没有解决数据相关问题。由于设计的原因,数据相关问题需要慎重考虑。(草率了)

11.12

结构设计
  • 设计ALU加法器的架构

11.11

代码实战
  • 完成整体框架的设计
  • 编写部分代码用于调试
  • 完成寄存器文件的编写
  • 完成能够应用与测试的取址模块
  • 完成用于测试使用的代码rom模块以及相应文件

11.10

解析e203源代码
  • 解析总线的数据通路,试图找到非字节对齐的数据如何处理,但未得到结果。
  • 总线的数据通路较为复杂,涉及到好几个模块的数据通信,解析起来有困难。

11.9

解析e203源代码
  • 通用任意位宽写、读ram的实现。
  • itcm的写端口关闭,不知道为什么,处理器在初始化时数据不知道如何加载到ITCM当中
  • 查看了几个博文,了解了ITCM的本质、FIFO、bypass buffer
  • dtcm的存储数据通路(只是数据4字节对齐的数据),非对齐的字节对齐未研究。

11.8

师弟来访,放假一天。

11.7

解析e203源代码
  • 取指的数据通路(ICB\BIU)
研究实战
  • 实现一个纯逻辑实现的addi译码器。
心得

首次将研究得来的知识付诸实践,期间虽然有一些错误,但还是完成了一个译码器。

11.6

解析e203源代码
  • ifu模块的分析 valid-ready握手信号设计(疑惑)
e203总线
  • 了解icb总线
心得

目前还没有查看verilog代码的方法与技巧,难以掌握各个模块之间的调用、连接、数据通路的情况。基本拿到源代码就无从下手,有些迷茫。这个也是在学习e203的设计结构构成了一定的困难。

11.5

解析e203源代码
  • add指令跟踪数据同路失败(19:53)
  • 找到并且记录add指令的数据通路。(20:35)
  • 解惑(查找了一遍数据同路没发现always块):使用了sirv_gnrl_dff*触发器代替always语句块。有数据存储与防止数据贯通的作用。
电脑状况分析

由于突然更新导致固件与新版本windows不兼容,导致处理器降频。目前刷回旧版固件,能够正常使用。

11.4

突发状况

今天电脑突然降频,未知道什么原因造成,今天把系统恢复一下希望能够解决问题。 如果系统重置了也不行的话,那就刷一个bois试试了。 再不行就只能求助于售后服务了。

想法

今天我反思了一下,制作处理器内核,我最大的问题是期间很多的内容都是空白的,并没有一个直接可用的例子供我使用。 当然,手里还有e203的源代码可以研究,目前主要是研究源代码来先提升一下自己。 不过,在以后要处理内存管理单元的时候,可能难以有资源学习了。可能到时候不一样呢,一切皆有可能,以后会更好。

11.3

完成
  • 确定使用五级流水线
  • 初步规划R型指令的数据通路
  • 初步规划R型指令的模块接口设计
下一步完成内容
  • 模块设计加入数据相关处理

11.2

  • 确定架构,项目启动,收集资料。
  • 下载rv官方规范文档
  • 下载rv官方特权模式规范文档

tiny_rv_core's People

Contributors

weilin-ge avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.