由来

由于去年工作变动,有幸进入了芯片行业,但主要工作内容为基于RISC-V的嵌入式应用软件开发,几乎接触不到芯片设计的相关知识,然而随着工作的深入,越来越想探究一下运行在软件之下的CPU的世界,于是便产生了自己手写一个RISC-V处理器的想法,同时在博客里记录和分享一下自己学习和探索的过程。作为芯片设计领域的小白,深感道阻且长,幸运的是,有无数前辈们留下的足迹作为指引,再者说,事在认为,那就抖胆试一试吧。

思路

在尝试一个新的领域的时候,我会希望先从宏观上理一下思路,分解一下可能需要的做的1234,然后再按照这个思路一步一步向目标靠近。那么手写一个RISC-V处理器,需要哪些基础和步骤呢?

1. 计算机理论基础

这方面最经典的书籍应该是《深入理解计算机系统》,相信从事软件行业的人大部分都读过,在自己实现一个处理器的同时,再回过头来温习一下这本书,一定有不一样的收获。

2. 数字电子技术基础

这个在大学阶段相关专业都学过,我们需要理解和掌握组合逻辑电路和时序逻辑电路的设计,以及一些基本概念。

3. Verilog语言

编程语言最终还是选择了Verilog,是目前比较主流的语言,语法比较容易上手,入门教程有很多,比如这里

4. RISC-V指令集

我们需要非常熟悉RISC-V指令集,它的指令分类,构成、用法等,最直接的就是在处理器的译码执行阶段一定会用到。

5. FPGA开发平台

选择一个FPGA开发平台,目前主流的三大FPGA厂商是Xilinx、Altera、Lattice,可以根据自己的需要,选择购买一款对应的开发板,熟悉和掌握它的开发环境。

6. 芯片的bring up

这里需要熟悉汇编语言,熟悉和理解C运行环境前的准备工作。我们不仅要手写一个处理器,还要通过bring up让它真正运行起来。

小结

以上列举的是一些需要掌握的基础,可以针对性的进行学习和掌握,边做边学,我基本都是在上班通勤的路上学习这些理论基础,这里推荐大家读一下刘未鹏的暗时间,充分利用起暗时间,是我们业余时间学习的关键。

手写RISC-V处理器(1)的更多相关文章

  1. Spring学习之——手写Spring源码V2.0(实现IOC、D、MVC、AOP)

    前言 在上一篇<Spring学习之——手写Spring源码(V1.0)>中,我实现了一个Mini版本的Spring框架,在这几天,博主又看了不少关于Spring源码解析的视频,受益匪浅,也 ...

  2. 手写代码自动实现自动布局,即Auto Layout的使用

    手写代码自动实现自动布局,即Auto Layout的使用,有需要的朋友可以参考下. 这里要注意几点: 对子视图的约束,若是基于父视图,要通过父视图去添加约束. 对子视图进行自动布局调整,首先对UIVi ...

  3. 手把手集成web端手写公式功能

    何为手写公式,很简单,就是在网页上可以写出数学公式,并能够生成Latex格式的字符串.废话不多说,直接走正题. 一.首先大家可以先去官网了解一下myscript这个插件 官方网站:https://de ...

  4. 【OpenCV】opencv3.0中的SVM训练 mnist 手写字体识别

    前言: SVM(支持向量机)一种训练分类器的学习方法 mnist 是一个手写字体图像数据库,训练样本有60000个,测试样本有10000个 LibSVM 一个常用的SVM框架 OpenCV3.0 中的 ...

  5. 【机器学习】BP神经网络实现手写数字识别

    最近用python写了一个实现手写数字识别的BP神经网络,BP的推导到处都是,但是一动手才知道,会理论推导跟实现它是两回事.关于BP神经网络的实现网上有一些代码,可惜或多或少都有各种问题,在下手写了一 ...

  6. java24 手写服务器最终版本

    手写服务器最终版本; <?xml version="1.0" encoding="UTF-8"?> <web-app> <serv ...

  7. 【原】手写一个promise

    上一篇文章中,我们介绍了Promise的基本使用,在这篇文章中,我们试着自己来写一个Promise,主要是学习Promise的内部机制,学习它的编程思想. !!!备注:本文写的不好,仅供自己学习之用, ...

  8. dfs手写栈模板

    在竞赛中如果系统栈很小的话,过深的递归会让栈溢出,这个时候我们就要自己手写栈,将递归转化成手工栈. 方法其实也很简单. 基本思路上,我们就是用栈不断的pop,push.但是何时push,何时pop呢? ...

  9. 学习笔记TF020:序列标注、手写小写字母OCR数据集、双向RNN

    序列标注(sequence labelling),输入序列每一帧预测一个类别.OCR(Optical Character Recognition 光学字符识别). MIT口语系统研究组Rob Kass ...

  10. 利用神经网络算法的C#手写数字识别

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwritten_character_recognition.zip 下载源码 - 70. ...

随机推荐

  1. docker安装go-fastdfs

    1.docker命令安装 docker run -d --name fastdfs -p 8180:8080 sjqzhang/go-fastdfs 2.浏览器访问 http://192.168.20 ...

  2. MultiBoot SPI

    对于7系列FPGA来说,计算器件启动时间按照以下公式: Config time = Bitstream size / (Config clk freq * Config interface width ...

  3. Javascript 常见的循环方式总结

    本文地址: https://www.cnblogs.com/zichliang/p/17412968.html 在Javascript中有很多种循环方式.有多种循环方式可以用来遍历数组.对象.以及执行 ...

  4. Java方法的概念以及方法的四种语法

    一.方法 方法的概念 ​ 将一个功能抽取出来,放在类中的大括号中,形成一个独立的功能,当需要使用该功能时,则调用它,这样可以增强代码的复用性(重复利用),并解决代码的冗余现象. 方法的语法: ​ [访 ...

  5. YOLOV5实时检测屏幕

    YOLOV5实时检测屏幕 目录 YOLOV5实时检测屏幕 思考部分 先把原本的detect.py的代码贴在这里 分析代码并删减不用的部分 把屏幕的截图通过OpenCV进行显示 写一个屏幕截图的文件 用 ...

  6. bugku_MagicImageViewer

    CTF 安卓逆向 MagicImageViewer--png结构+算法 很少做安卓逆向的题目,在此记录一下 先用模拟器看一下 嗯,没啥提示. jeb打开 关键部分 if(s.length() == 1 ...

  7. error: #20: identifier "arm_cfft_instance_f64" is undefined

    在使用Keil5的过程中,偶尔遇到这个问题,以及类似的问题,报错的数量大概200多个. error type>(42): error: #20: identifier "arm_cff ...

  8. Android strings.xml按照key修改

    strings.xml匹配替换 将两个Android项目中的多语言字符串文件(strings.xml)进行比较,如果其中一个项目中包含另一个项目没有的字符,则合并到单一的输出文件,并以 key 在原始 ...

  9. 基于DSP的设备振动信号的采集技术方案综述

    前记  在能源领域,由于很多地方都是无人值守,设备故障检测是一个必须面对的问题.笔者通过几个行业案例了解到,由于很多设备发生故障时候会产生特定频谱的声音,所以该行业对振动监测的需求特别强烈,由于涉及到 ...

  10. PostgreSQL 12 文档: 部分 IV. 客户端接口

    部分 IV. 客户端接口 这一部分描述和PostgreSQL一起发布的客户端编程接口.这些章中的每一个都能被独立阅读.注意,还有很多用于客户端程序的其他编程接口是被独立发布的并且包含它们自己的文档(附 ...