【同济CS实验指北】硬件篇-从零上手CPU设计

本文旨在为希望亲手设计CPU但面对数据通路感到困惑的同学们提供指导。通过简化CPU结构,从只有PC、寄存器a和内存b的简单CPU开始,解释如何逐步实现MIPS31指令集。通过实例展示了如何设计和控制CPU中的信号,以及如何避免使用过多的三态门。最后,强调了在CPU设计中,数据通路图是根据CPU设计生成的,而不是设计的起点,并推荐了进一步学习的资源。
摘要由CSDN通过智能技术生成

一、前言

        突发奇想打算开贴写一篇导引,或许是因为刚刚写完五级流水线有感而发吧。

        由于某些众所周知的原因,你济的硬件课程设计约等于在DDL前3天从github上down一个不知对错的CPU修改个变量名再卷壹佰页报告交上去,然后用一个打表的下板bit水过验收。我无意讨论这样做正确与否, 在此开贴只是想给那些希望自己亲手去实现一个CPU却面对着数据通路无从下手的同学一些点拨和信心,毕竟用上自己的CPU这很cool不是吗。

二、从代码到数据通路

        初见CPU想必是在MIPS31实验上了,你的老师大概率会扔给你一张这样的图:

         我知道你面对这张图困惑不解,我也对此困惑不解,因为这根本不是用代码实现CPU该参考的东西。从github上查阅往届的代码会发现,大多数的代码都是根据这张图一个模块一个模块的实现过去(e.g. https://github.com/L-I-M-I-T/CO_MIPS31),而这在我看来完全没有必要

        现在忘掉这张图,回顾一下什么是时序逻辑电路 —— 一种次态的输出只与当前输入和当前状态有关的电路。对于我们实现的简单CPU而言,没有外部输入,只有此时刻的状态和下一时刻的状态。具体而言,就是根据当前寄存器和内存的状态决定下一时刻寄存器和内存的状态。

        考虑一个只有PC和寄存器a、内存b的简单CPU,他支持三条指令1 和 2,3,指令1的作用是让寄存器a变为0,指令2的作用是让寄存器a加上1,指令3的作用是让内存b等于内存a,我们可以很轻松的写出其代码:

module cpu(input clk);
    reg [31:0] pc;
    reg [31:0] inst = 取指令(pc);
    reg [31:0] a, b;

    al
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值