几分钟前我问了另一个问题,但是,我正在完成一个项目。部分好处是流水线化我们的处理器设计。我有一个简单的基于累加器的处理器,带有数据总线和地址总线。它具有三个基本阶段 [获取、解码、执行] 和大多数简单处理器中的基本功能单元。像数据存储器、指令寄存器、ALU、MAR、MDR、控制器(处理状态和控制信号)等。
我知道什么是管道内衬,但还没有弄清楚如何在功能级别上实现它。我已经四处搜索,但没有什么可以简化我需要它做的事情,或者没有找到任何示例。
几分钟前我问了另一个问题,但是,我正在完成一个项目。部分好处是流水线化我们的处理器设计。我有一个简单的基于累加器的处理器,带有数据总线和地址总线。它具有三个基本阶段 [获取、解码、执行] 和大多数简单处理器中的基本功能单元。像数据存储器、指令寄存器、ALU、MAR、MDR、控制器(处理状态和控制信号)等。
我知道什么是管道内衬,但还没有弄清楚如何在功能级别上实现它。我已经四处搜索,但没有什么可以简化我需要它做的事情,或者没有找到任何示例。
在指令流水线中,RISC 处理器的经典 5 个阶段是:
如果一切都在零时间内工作,则不需要流水线阶段,但正如您可能已经看到的组合逻辑,输入的变化需要时间来波及。加上将数据加载和保存到内存的要求,可以看出在 1 个时钟周期内处理所有事情会非常困难。
为了简化它考虑3个阶段从内存加载,执行和存储到内存。
3 指令(添加内存指令)处理器有寄存器 r1,r2,r3
addr3 = addr1 + addr2
addr6 = addr4 + addr5
addr9 = addr7 + addr8
Unit Load Execute Store
Cycle 1 : r1 = addr1 - -
r2 = addr2
Cycle 2 : r1 = addr4 acc = r1 + r2 -
r2 = addr5
Cycle 3 : r1 = addr7 acc = r1 + r2 addr3 = acc
r2 = addr8
Cycle 4 : r1 = 0 acc = r1 + r2 addr6 = acc
r2 = 0
Cycle 5 : r1 = 0 acc = 0 addr9 = acc
r2 = 0
因此,当从程序中读取指令时,我们可以看到它的不同部分在不同的时间被使用,读取内存地址使用周期 1,操作类型加法,减法乘法将在周期 2 中使用,存储内存地址将在循环 3 中使用。
数据路径插入了触发器以将其分解为(流水线)阶段,然后您需要延迟解码指令字的相关部分,以便它们与要操作的数据同时到达功能块。