• 优秀的 Verilog/FPGA开源项目介绍(二十七)- 小型CPU



    23f4f39719dd84eaf15a973e3adb9b4e.png

    介绍

    在FPGA上实现一个CPU是一个令人兴奋的事情,但是太复杂的CPU实现起来太难,而且不适合去了解计算机的架构,所以今天介绍一些小型的CPU,比如8051、MIPS、MSP430等~

    关于RISC-V的项目,请查看优秀的 Verilog/FPGA开源项目介绍(二)-RISC-V

    ZipCPU

    http://zipcpu.com/about/zipcpu.html

    43bc4e0f201f97629dba35828c4cc9ab.png

    项目介绍

    ZipCPU是 Gisselquist Technology, LLC为 FPGA 环境构建的开源、功能齐全的 软核 CPU。

    ZipCPU最初设计的唯一目的是在FPGA中创建一个简单的CPU,尤其是一个强大到足以运行 Linux的CPU 。

    在项目中,ZipCPU是:

    • 一个 32 位 CPU。所有寄存器都是 32 位宽,地址是 32 位宽,指令是 32 位宽,等等。

    • 一个RISC CPU。它只实现了最少的指令集,比大多数其他“RISC”CPU 小得多。

    • 加载/存储架构。只有加载和存储指令可以访问内存

    • 符合 Wishbone 标准。所有外围设备都通过通用 Wishbone 总线上的内存映射 I/O进行访问。

    • 冯诺依曼架构。指令和数据共享一个公共总线

    • 流水线架构,具有预取、解码、读取操作数、执行和 回写阶段。执行阶段由以下四个模块之一实现:算术逻辑单元 (ALU)、 内存单元、 除法协处理器和浮点协处理器。

    • 可配置的 CPU :可以选择CPU中的逻辑量 ,因此如果需要,可以用 LUT 换取速度。

    下面是一些板卡实现的结果:

    f1793a4d8accff1090c1fb88e9bd2105.png

    下图是最新实现的模块:

    fa0046f21470c41ac95068e0c7c2f9b6.png

    https://github.com/ZipCPU/openarty

    是在Xilinx ARTY板卡上实现ZipCPU以及所有 Arty 外围设备的开源驱动程序。

    ice-chips-verilog

    https://github.com/TimRudy/ice-chips-verilog

    我们知道CPU的核心就是各种逻辑资源,这个项目是使用Verilog实现74LS、74HC、74HCT 系列芯片(门、多路复用器、计数器、寄存器、加法器、乘法器等等)。

    如果只是实现这些逻辑芯片也没有多大参考意义,这个项目是集成到Icestudio(Icestudio 提供可任意扩展的电路仿真(用于数字电路)),可以实现“虚拟面包板”功能,具体怎么使用项目有详细设计。

    1cbb04b4eba309cba36809fe05307e2d.png

    8051

    https://github.com/risclite/R8051

    e89569ec6eb63cda6be0efa2a5ba5ca9.png

    上面这本书的源码,有中文参考书相信这个项目肯定不难实现。

    书本的PDF:

    链接:https://pan.baidu.com/s/1un2qtgekfKg8-_vLpnGm9g?pwd=open 提取码:open

    https://github.com/freecores/8051

    f230f5fe1a16ce13766e282cfd9150a9.png

    这个项目的详细设计文档:

    https://github.com/freecores/8051/blob/master/doc/pdf/oc8051_spec.pdf

    8051的项目很多很多,这里就不推荐太多了,因为实现的架构都差不多。

    RP2040

    https://github.com/lawrie/fpga_pio

    9fd97fa5be939aa141cb05db9de2c1df.png

    你能想象去年大火的单片机RP2040也能用FPGA实现吗~

    a97a834f6cf385732eaa98e27f464a86.png

    是的,有大神已经实现了它,但是并不是整个SoC,而是RP2040中PIO 接口,PIO 即 Progammaable I/O,它是 RP2040 SoC 的一部分,它比 SPI、I2C、UART 等特定协议的硬件实现灵活得多。它可以实现所有这些协议和任何 GPIO 引脚。

    7d6a9cfa6a3d1ef5e93f44307c2cb7ca.png

    同时,你可以尝试将这个项目集成到RISC-V SoC上,就自己实现了一个新的SoC。

    c966c7135464a8f104938e4b7da8ec69.png

    TV80

    https://github.com/abnoname/iceZ0mb1e

    https://opencores.org/projects/tv80

    用于  FPGA 的 8 位 TV80 SoC,使用 yosys 和 SDCC 的完整开源工具链。

    afdc9ba4debef32c1be967af6e1f9925.png 31801c96031bdc6e8f662ae8efc845e1.png f3e96764ddcfb7ed1de1f28072618958.png

    MIPS

    https://github.com/ljlin/MIPS48PipelineCPU

    冯爱民老师《计算机组成原理A》课程设计

    本实验通过工程化方法,使用 verilog 实现了一个支持 MIPS 指令集中48条指令,通过转发和阻塞支持冒险的 CPU。

    其中48条指令如下:LB、LBU、LH、LHU、LW、SB、SH、SW、ADD、ADDU、 SUB、SUBU、MULT、MULTU、DIV、DIVU、SLL、SRL、SRA、SLLV、 SRLV、SRAV、AND、OR、XOR、NOR、ADDI、ADDIU、ANDI、ORI、 XORI、LUI、SLT、SLTI、SLTIU、SLTU、BEQ、BNE、BLEZ、BGTZ、 BLTZ、BGEZ、J、JAL、JALR、JR、MFHI、MFLO 。

    src 文件夹内是一个 Sublime Text 工程,可以通过配置 iVerilog 编译,src/ljlin_Mips48 是编译好的脚本,可以通过 vvp 执行。testbench.vcd 是仿真生成的波形文件。

    https://github.com/jmahler/mips-cpu

    https://github.com/lvyufeng/step_into_mips

    本仓库包含重庆大学由2017年开始实施的计算机组成原理课程改革实验内容,通过合理的梯度划分,一步一步由单独器件连接构成CPU,最后实现一个简单的MIPS五级流水CPU。

    https://github.com/qing-2/CPU

    5ce808d5de4420be3190d9edf02cf20a.png

    xilinx fpga实现的mips。

    MIPS的项目也多的数不胜数,这里只列出来两个,不是这两个项目做的优秀,而是都有相关的课程介绍,适合学习复现。

    tinycpu

    https://github.com/fallen/tinycpu

    Tiny CPU 是一个小型的 32 位 CPU,主要用于教育目的。

    msp430

    https://github.com/olgirard/openmsp430

    Verilog实现的16位微控制器MSP430的内核。

    d32e45be71f07240e03cec818e6dc339.png

    详细的设计文档:

    https://github.com/olgirard/openmsp430/tree/master/doc

    ARM7

    https://github.com/chsasank/ARM7

    3314fbae5b1acdac73464bcc03689411.png

    六级流水线ARM7TDMI处理器的实现。

    主要模块:

    2dae14bbf07bc5e11c85e504260d07c4.png

    ARM-LEGv8

    https://github.com/nxbyte/ARM-LEGv8

    此项目包含用 Verilog 编写的 ARM LEGv8 CPU 的源代码。

    支持的指令包括:LDUR, STUR, ADD, SUB, ORR, AND, CBZ, B, 和NOP.

    这本书也是一本经典书籍的软件仓库,书名《Computer Organization and Design ARM edition》

    大家可能不熟悉,但是他的中文名大家肯定熟悉《计算机组成与设计:硬件软件接口》:

    786cd6f0d30c39d620422e15a6c5b765.png

    前面几个版本都是MIPS的,第5版是RISC-V版本,之前也分享过:

    图书推荐|计算机组成与设计(原书第5版)  硬件软件接口 RISC-V

    PDF版本:

    链接:https://pan.baidu.com/s/1Pzsepkb5E30z2I8U3uBf5A?pwd=open 提取码:open

    ARM9

    https://github.com/risclite/ARM9-compatible-soft-CPU-core

    Verilog编写的与ARMv4 兼容的 CPU 内核。

    详细的中文设计文档

    https://github.com/risclite/ARM9-compatible-soft-CPU-core/tree/master/TRAINING(CHINESE)

    ARM_Cortex-M3

    https://github.com/Qirun/ARM_Cortex-M3

    https://github.com/WalkerLau/DetectHumanFaces

    424ffb730d42547f279c72109b41d0b6.png

    该项目依据全国大学生集成电路创新创业大赛“ARM杯”赛题要求,在FPGA上搭建Cortex-M3软核、图像协处理器,并通过OV5640摄像头采集车牌图像,实现对车牌的识别与结果显示。项目基于Altera DE1 FPGA搭载Cortex-M3软核,依据AHB-Lite总线协议,将LCD1602、RAM、图像协处理器等外设挂载至Cortex-M3。视频采集端,设计写FiFo模块、SDRAM存储与输出、读FiFo模块、灰度处理模块、二值化、VGA显示等模块。最终将400位宽的结果数据(对应20张车牌)存储在RAM中,输出至AHB总线,由Cortex-M3调用并显示识别结果。

    总结

    今天介绍了几个小型CPU,适合学习计算机架构相关知识,同时今天推荐的项目主要特点都是“易实现”,最明显的基本都是有详细的设计教程,但是代码肯定不是最优的。

    今天的项目都适合复现~

    最后,还是感谢各个大佬开源的项目,让我们受益匪浅。后面有什么感兴趣方面的项目,大家可以在后台留言或者加微信留言,今天就到这,我是爆肝的碎碎思,期待下期文章与你相见。

    bfa8b404bc8fa7942dc31e6e9d2a3976.png

    优秀的 Verilog/FPGA开源项目介绍(二十六)- ISP (图像信号处理)

    79cad8ecbec4b2cdac144740dbfeea1a.png

    优秀的 Verilog/FPGA开源项目介绍(二十五)- FPGA图像处理库

  • 相关阅读:
    把Mybatis Generator生成的代码加上想要的注释
    最受欢迎的 Linux 怎么是它,Ubuntu 排第六
    Gitlab用户角色权限Guest、Reporter、Developer、Master、Owner
    Error response from daemon
    矿山自动驾驶技术点分析
    Vue后台管理系统笔记-01
    kafka:大规模实时数据流的必选
    PDF格式分析(七十八)——文本标记、插入注释(Text Markup、Caret)
    全局参数校验@Valid的使用方法和写法。
    JVM(二)
  • 原文地址:https://blog.csdn.net/Pieces_thinking/article/details/125383558