博客简介

本篇博客是实验设计:《模型机CPU设计》整套实验报告内容之一,包括构架,分部件和性能分析三个大的模块,每个模块又细分为小的部分,历时1.5周完成。最后实验验收的分为满分。现在将其分享出来,希望能给后续的实验同学一个参考,少走不必要的弯路,设计出性能更优的CPU。

资源下载

设计CPU时,一路做了有三个版本,链接如下:

  • CPU1.0版本是第一代版本,由于刚开始设计,没有做性能的优化,此版本的优点是布局间隙大,线路较为清晰,如果你刚开始设计,那么这个版本可以更好地让你迅速设计出一个CPU CPU1.0版本压缩包下载
  • CPU2.0版本是第二代版本,也是我验收的版本,这个版本对版本一做了布局和时序性能的优化,性能达到了作者当时的巅峰CPU2.0版本压缩包下载
  • CPU3.0版本是第三代版本,对第2代版本做了更深层次的优化,解决了RAM不稳定的问题CPU3.0版本压缩包下载
  • 这篇博客是整个实验的一部分,全套内容请参考:逻辑与计算机设计基础CPU实验

寄存器组:

(1) 部件功能:

寄存器具有快速读写的功能特点,而通用寄存器组则是实现的对三块寄存器的读写操作,根据控制信号对A,B,C寄存器实现读写,并将数据传送给ALU函数发生器

模型分配GPU_下降沿

(2) 接口设计:

输入:

WE使能信号,0有效为写入,1为提供通道
 Clk:时钟信号
 RA[1…0]控制信号,控制数据从A口读出
 WA[1…0]控制信号,控制数据从B口读出
 I[7…0]数据输入

输出:

A0[7…0]从A口的数据输出
 B0[7…0]从B口的数据输出
 aa[7…0],bb[7…0],cc[7…0]向外界展示数据输出

RTL视图

模型分配GPU_数据_02

(3) 功能实现:

无论WE为何值,都由RA,WA来判断输出

如果RA=“00”A=a,如果RA=“01”,A=b,否则A=c

如果WA=“00”B=a,如果WA=“01”,B=b,否则B=c

当WE=0,执行写入

当时钟信号为下降沿:

如果WA=“00”a<=I, 如果WA=“01”,b<=I,否则c<=I

VHDL设计:

模型分配GPU_数据_03


(4)功能仿真验证:

模型分配GPU_模型分配GPU_04

仿真结果:

时钟为18.2ns: 处于时钟下降沿,WE=0,WA=01,对寄存器c进行写入,输出c=00000100,B0=00000100,A0=00000000
时钟为19.2ns: 处于时钟下降沿,WE=0,WA=11,对寄存器c进行写入,输出c=00000110,B0=00000110,A0=00000110
时钟为20.2ns: 处于时钟下降沿,WE=1,WA=00,RA=00,读取a寄存器,A0=00000000,B=00000000
时钟为20.7ns: WE=1,WA=00,RA=01,A读取b寄存器,读取a寄存器A0=00000010,B=00000000

结论:仿真结果符合功能要求,设计成功