【组成原理】计算机硬件设计——CPU(2)

接着上篇的内容,继续设计剩余的功能

一、组合

1、通过PC计数器逐条读取内存中的数据进行计算

将前面几步做的所有电路单元进行组合,形成有PC寄存器 和内存单元的 计算单元

以上我们是通过点击的方式模拟时钟信号的,但真正的时钟信号是一个周期性循环的 震荡信号。如果我们将其换成震荡时钟信号后,会发现程序计数器会反复从 0,1,2,3,4,5,6,7 ,0,1,2,3,4,5,6,7….执行。,进而使得内存中的数据被反复的累加。而不是累加一遍就结束。

因此,我们需要对计算的过程,进行一定的控制。

2、添加控制信号、指令

数据RAM的地址和值

数据RAM里的8个数据,进行累加后,和为147,

如果没有halt信号控制,时钟信号上升到来,结果会继续累加地址为0的寄存器中的值 即 147+10 =157。此时,halt信号=0,clock信号 =0,累加中断。

所以我们要设计一个功能:初始计算时,halt =1; 当PC计数器计算到7时,halt =0,中断计算。

加一个比较器即可:

注意:此电路有个bug,无法加到最后一个地址块的数据,后面再修改

我们对时钟周期进行分析:

时钟周期PC输出(数据存储的地址)RAM输出AC寄存器输出ALU-sel 控制信号
0       0       (0x000)10000
11        (0x001)91000
22        (0x010)211900
33        (0x011)174000
44        (0x100)305700
55        (0x101)118700
66        (0x110)89800
77        (0x111)4110600

现在我们考虑,让ALU不仅仅可以做加法,还可以执行如 10+9+21-17 的操作。

因此,我们考虑添加一块指令存储器,用来存储ALU的操作模式。

3、添加一块指令存储器

指令寄存器中,存储着ALU的加减顺序,注意,它实际进行的操作顺序是:

0+10+9+21-17+30+11-8+41 ,一共8个操作符。

此电路中改进了上面提到的少算一位的问题,将输出结果接在了ALU计算单元之后,而不是AC存储的中间结果之后。

接下来,我们要对电路进行改造,把指令整合:

数据RAM 中的内容:

1)在第15位加入halt信号

实现     “10+9+21-17、 停止”

可以看到,结果多加了一次,正常结果应该是23。

出现这种情况的原因,上面也分析过,当En开关打开后,AC寄存器是一直工作的,每一次clock上升沿,都会把数据写入ALU的 输入口,相当于执行了一次 A+B,我们现在需要实现,在一个计算周期内,halt信号到来,寄存器关闭,或者说,寄存器Q给A输入一个 0 值,而不是上一次累加的结果。

2)实现ld

3)实现Str 写入功能

回忆一下,8位16bit寄存器的实现电路:

str是一个允许写入的使能信号,D 是将要被录入的数据,ld是允许从寄存器中读出数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值