单周期CPU及流水线CPU设计(1)---logisim部件设计

logisim的设计是设计CPU的基础,在往后的CPU的代码书写的过程中必然时刻伴随着设计图纸的需求。

(如有转载,请注明出处,否则将追究)


(1)基本介绍

Logisim 允许用户使用图形用户接口设计并仿真数字电路,它自身包含一些库,库中已有诸如基础门电路,存储器、多路选择器、译码器等简单器件。在后续的实验中,你将使用这些器件搭建自己的 CPU。在本实验中,我们将在 logisim中完成异或电路以及加法器的构建。通过本实验,达到熟悉 logisim 软件环境的目的,同时完成 CPU 数据通路的若干基础性功能部件的设计。

(2)设计过程




<1>构建 1-bit 全加器 ,如图1所示。






<2>构建 4-bit 全加器
4-bit 全加器是简单的 4 个 1-bit 加法器的级联,将一个全加器的 carry-out 作为另一个全加器的 carry-in,如图2而所示.







<3>构建 8-bit 全加器







<4>使用寄存器及子电路构建电路方法实现循环累加器 .

状态方程和设计图思想如下。

那么logsim的设计实现如下图所示。


循环累加电路
(1)使用 logisim/Arithemetic 中的 Adder,构建自加 1 的无限累加器。

(2)创建新文件,点击 Project-->Add Circuit,并命名。

(3)加载 Arithmetic library, Project-->Load Library-->Built-in Library... and select "Arithmetic",从库中选择 adder 子电路  加载 Memory library,Project-->Load Library-->Built-in Library... and select "Memory",从库中选择 register。

(4)将 clock(位于 Wiring 文件夹)与 register 连接

(5) 依据 section2.2 的设计,将 register、adder 相连,此时会出现"Incompatible widths" error,这意味着连线试图将两个不同位宽的管脚相连,点击 register 将在资源管理器的下方看到 register 的属性列表,其中 "Data Bit Width"域控制 register 相加的位宽属性,将其更改为 8。

(6) 将 8-bit 常量 1(Wiring 库中)连线至 adder 的第二个输入

(7)向电路添加两个输出管脚,方便监控电路。   








<5>电路测试
 双击 circuit 浏览器中 main 子电路,回到 main 子电路

 单击 AddMachine 以选择,并放置至 main 电路中

 可以更改“Facing”属性以调整器件方向

 将输出管脚与 AddMachine 子电路连接,输出管脚自上而下、自左而右 排列,放置鼠标至子电路输出位置可以看到相应的标签值

 如果需要访问 AddMachine 子电路的内在状态,一种方式在子电路上右 键,选择"View AddMachine",另一种方式,使用 poke 工具,再双击子 电路。

 将寄存器的值初始化为 1,通过使用 poke 工具点击 register

 Simulate-->Go Out To State-->main,返回 main 子电路

 Simulate-->Ticks Enabled,开始进行仿真 







<6>设计ALU

1、  ALU模板定义

(1)      基本描述

ALU的主要功能是对输入到ALU的两个数进行加法、减法、按位或等操作。ALU内部包括32位加法器、减法器等部件。ALU除了以上操作外,还需要判断输入的两个值是否相等。

(2)      模板接口

信号名

方向

描述

inputA

I

参与ALU计算第一个值

inputB

I

参与ALU计算第二个值

ALLOp[1:0]

I

ALU功能的选择信号

00:ALU进行加法运算

01:ALU进行减法运算

10:ALU进行或运算

result

O

ALU计算的结果

zero

O

1:result为0

0:result不为0

 

(3)      功能定义

序号

功能名称

功能描述

1

加法运算

将inputA与inputB进行加法运算,result<-inputA+inputB

2

减法运算

将inputA与inputB进行减法运算,result<-inputA+inputB

3

或运算

将inputA与inputB进行按位或运算,result<-inputA|inputB


<7>GPR的设计(GPR就是通常所说的CPU的寄存器堆)

 GPR模板定义

(1)  基本描述

GPR以32个32位具有写使能的寄存器为基础,辅以多路选择器。其主要功能是对寄存器堆进行存值取值操作。GPR除了以上操作,还有清零操作。

(2)      模板接口

信号名

方向

描述

clk

I

时钟信号

reset

I

复位信号

1:复位

0:无效

WE

I

写使能信号

1:可向GPR写入数据

0:只可从GPR

A1

I

5位的地址输入,用于指定32个寄存器中的一个。在单周期CPU中为指令的[21:25]即rs字段

A2

I

5位的地址输入,用于指定32个寄存器中的一个。在单周期CPU中

A3

I

5位的地址输入,用于指定32个寄存器中的一个。在单周期CPU中,为指令[16:20]rt字段或[11:15]字段之一

WD

I

32位的数据输入,当写使能时,想寄存器中写入

RD1

O

输出32位的A1指定的寄存器的数据

RD2

O

输出32位的A2指定的寄存器的数据

(3)      功能定义

 

序号

功能名称

功能描述

1

复位

当复位信号有效时,32个寄存器的值被设置为’h0

2

读数据

根据5位地址输入确定寄存器,并将寄存器中的数据输出

3

写数据

当写使能时,根据5位地址输入确定寄存器,并将数据写入寄存器










附我个人的设计GPR和ALU的设计图纸,如有不足,请相互交流。

<1>ALU(附:以下器件(1)---(7)之间都有联系

(1)一位加法器

(2)四位加法器

(3)八位加法器

(4)三十二位加法器

(5)三十二位减法器

(6)三十二位或运算

(7)最终的ALU











<2>GPR




你可能感兴趣的:(CPU设计)