计算机基础实战课
彭东
网名 LMOS,Intel 傲腾项目关键开发者
19719 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
计算机基础实战课
15
15
1.0x
00:00/00:00
登录|注册

11|手写CPU(六):如何让我们的CPU跑起来?

你好,我是 LMOS。
通过前面几节课的学习,我们已经完成了 MiniCPU 五级流水线的模块设计,现在距离实现一个完整的 MiniCPU 也就一步之遥。
还差哪些工作没完成呢?还记得我们在第六节课设计的 MiniCPU 架构图吗?回想一下,我们已经设计完成的五级流水线,都包含下图的哪些模块?
上图的 CPU 核心模块,也就是 CPU Core 包含的模块的设计,这些我们已经在前面几节课里完成了。除了五级流水线的模块,我们还设计了用于保存操作数和运算结果的通用寄存器组,设计了解决数据冒险问题的 forwarding 模块,以及解决控制冒险问题的 hazard 模块。
接下来,我们还需要搞定一些外围组件,也就是图里虚线框外的系统总线、ROM、RAM、输入输出端口 GPIO(GPIO 比较简单,课程里没专门讲)和 UART 模块。
学完这节课,我们就可以把这个 CPU 运行起来了,最终我还会带你在这个 CPU 上跑一个 RISC-V 版本的 Hello World 程序(课程代码从这里下载),是不是很期待?话不多说,我们这就开始!

系统总线设计

首先,让我们看看 CPU 的系统总线。
总线是连接多个部件的信息传输线,它是各部件共享的传输介质。在某一时刻,只允许有一个部件向总线发送信息,而多个部件可以同时从总线上接收相同的信息。MiniCPU 的系统总线用来连接 CPU 内核与外设,完成信息传输的功能。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了在LMOS上实现MiniCPU的过程,包括系统总线设计、只读存储器ROM的实现以及随机访问存储器RAM的实现。文章以技术性强的Verilog代码为主线,详细介绍了MiniCPU各个模块的设计和实现过程,适合对CPU设计感兴趣的读者阅读学习。此外,文章还介绍了如何设计UART模块以实现MiniCPU与其他电子设备的通信,包括UART的工作原理、数据传输格式以及汇编指令的设计和编译过程。总之,本文内容丰富,涵盖了CPU设计的多个方面,对于对CPU设计感兴趣的读者来说,是一篇值得深入阅读的技术文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《计算机基础实战课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • mantra
    置顶
    询问小编一个小问题:学到此处 mini_cpu 小结了,还有后续的扩展吗?后续 “RISC-V 指令精讲(X)” 系列是在 GCC + QEMU 环境实现吗?会和 min_cpu 有关联吗?谢谢!

    编辑回复: 1.mini CPU的讲解告一段落了,目前专栏里没计划后续扩展,有什么想法建议可以说说,这样LMOS也能看到。 后面可以看看大伙儿实际学习情况,也欢迎自荐和LMOS团队的在开源Cosmos Psi里折腾更多东西。项目链接(初始阶段,未来可期) https://github.com/CosmosPsi/CosmosDocs ,感觉不错记得star支持下! 2.环境搭建下周一、三发布,一共两节课讲解交叉编译环境配置,除了你说GCC,应该还用到了Deepin。 3.课程设计的时候,考虑到同学们水平参差不齐,为了尽量让大家跟上老师步伐,有所收获。后面的课程跟min_cpu 没有直接的“依赖”性。意思就是,前面手写CPU你觉得比较难,暂时还达不到手写出CPU的程度,也并不影响学习后续内容。 题外话:当然啦,你硬件和语言都掌握了,那更好。前期做用户调研的时候,有个同学提到一个思路:如果把执可执行程序反汇编,然后通过CPU方针或其他手段执行者可执行程序,我们看看CPU的指令流是啥样,就能帮你把CPU和汇编串联起来了。

    2022-08-19
    1
  • Liu Zheng
    需要指出一下,如果同学用13讲里的方法安装toolchain的话,需要作以下修改才能跑出hello world来: 1. 在`sim/asm/Makefile`中,需要把所有的`riscv32`都替换成`riscv64`。详情见12讲里面的multilib部分。 2. 如果你和我一样用的是ubuntu 20.04,那么需要`mini_cpu/Makefile`里面,把`python`换成`python3`。因为默认ubuntu20.04开始已经没有`python`了。

    作者回复: 对

    2022-08-24归属地:湖北
    3
  • likejjj
    可以在fpga上面跑这个cpu不?

    作者回复: 不建议

    2022-08-22归属地:湖北
    3
    1
  • 青玉白露
    打算写个汇编搞一下!

    作者回复: 支持

    2022-08-19归属地:湖北
    1
  • 😇
    总线你的cpu-->imem的imem是啥意思啊

    作者回复: 立即数

    2022-09-26归属地:湖北
  • 😇
    老师你好,我的运行make asm后显示 make -C ./sim/asm make[1]: 进入目录“/home/qianq/mini_cpu/sim/asm” + AS src/miniCPU_sim.asm build/miniCPU_sim.o make[1]: riscv32-unknown-elf-as: Command not found Makefile:27: recipe for target 'build/miniCPU_sim.o' failed make[1]: *** [build/miniCPU_sim.o] Error 127 make[1]: 离开目录“/home/qianq/mini_cpu/sim/asm” Makefile:11: recipe for target 'asm' failed make: *** [asm] Error 2 请问这个出错是什么原因呢

    作者回复: 没有 配置好 编译器

    2022-08-28归属地:湖北
    2
  • Liu Zheng
    老师,想问一下,这里汇编代码里面没发送一个字符延时1ms是为了匹配uart的波特率吗?请问这个mini cpu的串口的波特率是在哪里指明的啊?是固定在uart的verilog代码的某个地方了吗?

    作者回复: 要改代码 的

    2022-08-22归属地:湖北
    2
  • 云海
    为什么我运行 make asm 的时候出现这样的error?谢谢 make -C ./sim/asm make[1]: Entering directory '/home/yh/ws/riscv/Geek-time-computer-foundation/lesson06~11/mini_cpu/sim/asm' + AS src/miniCPU_sim.asm build/miniCPU_sim.o make[1]: riscv32-unknown-elf-as: Command not found Makefile:27: recipe for target 'build/miniCPU_sim.o' failed make[1]: *** [build/miniCPU_sim.o] Error 127 make[1]: Leaving directory '/home/yh/ws/riscv/Geek-time-computer-foundation/lesson06~11/mini_cpu/sim/asm' Makefile:11: recipe for target 'asm' failed make: *** [asm] Error 2

    作者回复: 要安装 riscv工具链

    2022-08-20归属地:湖北
  • TableBear
    好难o(╥﹏╥)o

    编辑回复: 慢慢来,不积跬步无以至千里。有啥具体的问题,也可以发出来~

    2022-08-19
  • 苏流郁宓
    哈佛结构?

    作者回复: 嘿嘿

    2022-08-19归属地:湖北
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部