从0开始手撸CPU之路
文章平均质量分 73
...小白手撸CPU,记录一路上的各种坑和玄学
迷路的小黑
不要懒了,起来学习!
展开
-
3、一条只有ADD指令的五级流水线数据通路设计(RISCV)
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-08-18 15:42:25 · 2269 阅读 · 0 评论 -
2、chiseltest实验与大坑
目的这次的目的是利用chisel test完成对硬件代码的测试。相当于Verilog写Testbench测试硬件代码的过程。因为chisel-bootcamp和chisel-book用的chisel test都过老,和直接clone下来的chisel-templete的chisel test不符,所以这里在下还是搞了很久…主要参考:https://github.com/ucb-bar/chisel-testers2和chisel-templete中test中的gcd测试流程在之前的MyPacke原创 2021-07-30 22:35:35 · 1208 阅读 · 0 评论 -
1、使用sbt构建第一个chisel项目
我理解的sbt、scala、chisel的关系scala是门语言、可以类比于C语言。sbt是个项目构建工具,类比于VC++。本身.c文件可以用gnu直接编译,为了项目构建方便会用VC++构建相应的项目。chisel相当于一个库函数,比之于C语言中的<stdio.h>。我理解其本质是利用scala面向函数与面向对象的性质将chisel所写代码转换为Verilog代码。当然其本身也具有不转换就仿真硬件描述功能的性质。chisel可以当做Verilog生成器也可以当做一种硬件描述语言。sbt的原创 2021-07-29 22:58:39 · 1367 阅读 · 0 评论 -
手撸MIPS32——6、交叉编译环境的搭建、编程与我踩到的坑
参考博客:https://blog.csdn.net/stdio_h666/article/details/104330395用VM建个虚拟机https://blog.csdn.net/qq_41782425/article/details/85119258建议选择kernel 是下图这几个的…不然就要降级或升级了:同时内存建议3G以上,不然会在配置完buildroot config后make出现什么什么恶_all,[s_auto…]的问题下载安装buildroot构建交叉编译环境用un.原创 2020-05-30 22:54:08 · 1911 阅读 · 1 评论 -
手撸MIPS32——5、利用Vivado IP设计指令存储器和数据存储器
指令存储器我用的是vivado 2019.1其他版本应该差不多1、建立工程名字填你想要的,这里我填inst_rom,板卡目前随便选不影响仿真32位存储,8KB相当于2048个存储单元每个4*2048=8K每个存储单元宽度32位User ENA pin带有使能为ena不勾选Primitives Output Register保证上升沿采集到的访存地址信号,不然多一个时钟周期。Coe文件相当于初始化存储器内容init.coe;Memory Width:16,Memory Dept原创 2020-05-20 23:00:49 · 5312 阅读 · 0 评论 -
手撸MIPS32——4、Verilog实现基本流水线
分为两部分实现,一部分处理器内核,一部分存储器。整体参考这个图:处理器内核参数宏定义先是参数宏定义,包括全局参数、指令字参数和通用寄存器参数:`timescale 1ns / 1ps/*------------------- 全局参数 -------------------*/`define RST_ENABLE 1'b0 // 复位信号有效 RST_ENABLE`define RST_DISABLE 1'b1原创 2020-05-19 22:24:14 · 3534 阅读 · 3 评论 -
手撸MIPS32——3、基本流水线理论总结
根据理论部分,可以得出结构图如下:译码控制单元DCU设计第一级组合逻辑根据指令中的op和func字段进行译码,确定具体执行的是那条指令,如下表:第二级组合逻辑根据第一级的输出,确定控制信号的具体取值。指令与控制信号真值表:两级系统级联图:访存控制单元MCU设计访存控制单元MCU根据内部操作码aluop和daddr生成3个控制信号:MCU产生控制信号真值表:...原创 2020-05-19 09:47:18 · 2047 阅读 · 0 评论 -
手撸MIPS32——2、基本流水线设计与实现(理论部分)
什么是流水线流水线(pipeline)技术是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。流水线是Intel首次在486芯片中开始使用的。在CPU中由5—6个不同功能的电路单元组成一条指令处理流水线,然后将一条指令分成5—6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。——from百度百科示意图我以后会用到的是5级流水线处理器流水线设计将微结构划分为两部分,数据通路和控制单元。数据通路完成对指令中操作数的运算处理,控制单原创 2020-05-19 00:53:20 · 4024 阅读 · 0 评论 -
手撸MIPS32——1、MIPS32指令集
(MIPS32 Release1指令集的子集MiniMIPS32)通用寄存器命名和使用约定运算指令ALU立即数指令在立即数这里,rt相当于目的寄存器,rs相当于源寄存器,imm立即数ADDI 加立即数可触发溢出异常ADDI rt,rs,imm将rs与imm相加,结果存到rtrt<-(rs+imm)(有符号扩展32位)ADDIU 加立即数,不触发溢出异常ADDIU rt,rs,immrt<-(rs+imm)(有符号扩展32位)SLTI 有符号小于立即数置1SLTI rt原创 2020-05-18 12:33:01 · 5499 阅读 · 0 评论