三步教你用Verilog写一个CPU:第一步

本文是教你用Verilog设计CPU的系列教程第一步,主要介绍CPU的五级流水线设计,包括IF、ID、EX、MEM、WB阶段。通过理解电路图和指令集,学习如何构建一个简单的CPU核心,实现基础的指令执行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

三步教你用Verilog写一个CPU

第一步:小试牛刀

 

    也许在不少人眼里,这个世界有两座难以企及的大山,一座是操作系统,还有一座就是CPU。无可否认,无论开发一个操作系统还是做一个CPU都是一件极其浩大的工程,需要一个优秀的团队前赴后继的努力。我相信有不少想涉足这两方面的人开始的时候都会有种无从下手的感觉,但是,经过我这一系列CPU的教程之后,我有十足把握,你肯定会对做CPU有根本性的改观,忽略太多工业上的要求以及硬件的具体实现,最后你会发现设计一个勉强能用的CPU其实不过是四五百行代码而已。

 

 

杂谈

    眼下,主流的操作系统就只有Windows、Linux、Mac OS,形成三足鼎立的局面,开发操作系统是极其困难的事情,起码我们国家就没有真正意义上自主的国产操作系统,而要形成一个新生操作系统的生态环境更是难上加难。的确,即使是要写一个精简版的mini操作系统,想要看到一点点成果都不是简单的事情。

 

    而另一方面,虽然说做CPU的厂商有不少,但真正要有核心竞争力也实属不易。国产的有“龙芯”,但毕竟不是用在日常使用的电脑、手机上面的,近段时间华为的海思处理器大有动作,但真正能取得什么样的成绩也还难判定。

 

    有时候我们真的应该好好想想,我们是不是应该对祖国有所贡献?比如参与开发国产操作系统,开发国产CPU这些令人骄傲的事情。可能我们不知不觉都习惯于“过日子”了,不是说没有了理想,每个学IT的人毕业了总会打拼一番,比如在微软、在谷歌,步步高升当上了产品经理甚至更高的职位,但除此之外,你有没有一些更加疯狂的想法?你有没有一些更加伟大的人生目标?你有没有热血沸腾的时候想为祖国争光?从小时候的“为中华之崛起而读书”,到现在习以为常地认为毕业了就应该找个大公司发挥自己的才能,干一番大事业,我感觉这里头味道已经变了,迷失了....

 

    上面只是我的一些个人感慨,衷心希望以后在IT行业能看到更多中国品牌的东西以及在核心领域占据领先优势的局面。

 

    废话少说,我必须跟读者申明的一点是,写操作系统的话你很难看得到成果,但是CPU不一样,因为我们并不是CPU生产厂商,所以不需要你去组合硬件,你只需要设计出CPU的电路结构,到时候依据电路图自然就可以组合成实实在在的CPU,而且通过一些仿真软件直接就可以在电脑上面看到你自己设计的电路的运行情况,又或者可以把你设计的电路的程序下载到FPGA开发板,它自动就帮你在硬件上构造了一个具有CPU功能的电路结构。之后你会发现,实现CPU的基本功能并不复杂,所以说,CPU的入门是相对比较简单的,而且不必太费劲就能看到成果,只不过要做得好就不是一天两天、一年两年的事情了。

 

 

基础

课程要求:数字电路、计算机组成原理、程序设计

编程语言:Verilog

开发平台:xilinx ISE

FPGA开发板:Nexys3

 

 

教学大纲

第一步

指令集设计与五级流水线的实现

第二步

内存设计与CPU测试

第三步

指令冲突避免

 

 

实现目标

    本文实现的CPU是一个五级流水线的精简版CPU(也叫PCPU,即pipeline),包括IF(取指令)、ID(解码)、EX(执行)、MEM(内存操作)、WB(回写)。

指令集:RISC

指令集大小:2^5

数据宽度:16bit

数据内存:2^8×16bit

指令内存:2^8×16bit

通用寄存器:8×16bit

标志寄存器:NF(negative flag)、ZF(zero flag)、CF(carry flag)

控制信号:clock、reset、enable、start

 

 

介绍与设计

    CPU顶层视图

    第一步只要求实现简单的五级流水线,不要求实现指令内存、数据内存模块,因此CPU内部与内存有关的信号都简化为输入输出信号了,CPU的顶层视图看起来应该如下图,其中select_y、y信号是跟CPU板级测试有关的,这一步暂且没用到。


图1 CPU top view

 

    指令集

    指令为三地址格式,操作码长度5bit,根据操作数的不同可以把指令分为三种类型,即寄存器类型R type、立即数类型I type、混合类型RI type,不过后面在代码编写的时候,为了方便,会依据其它标准进行划分。


图2 指令格式

 

    规范一下表示方式,r1或者gr[r1]表示访问寄存器r1,m[r2+val3]表示访问r2+val3这个地址,{val2,val3}表示立即数访问,val2为MSB,val3为LSB。


图3 机器代码示例

 

    本文设计一共实现了28条机器指令,剩下未用的4个操作码(10100,10101,10110,10111)可自行补充为其它操作,比如自增INC、自减DEC。这里指令的编码是比较随意的

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值