0

我想知道处理器如何从一开始就在多周期数据路径中进行乘法运算,即从指令读取->解码指令->读取寄存器文件等。

换句话说,我想知道,考虑到booth的乘法算法是单独实现的(给出了一个电路),你将如何扩展多周期数据路径以支持使用最少资源的乘法指令。

你能告诉除法吗?

4

2 回答 2

1

对于简单的 cpu 乘法将在 CPU 管道的阶段 EX 上。所以获取指令,对其进行解码,向 RegisterFile 询问输入操作数,在 ALU 上执行实际的乘法运算。

取决于 ALU 变体,乘法可能需要 1 个 CPU 周期或更多(在每个 cpu 周期存储部分和,然后它将在 CPU 管道的 EX0、EX1、EX2 等阶段)。慢速 ALU 可以流水线化,所以它会在 N 个滴答中给出第一个操作的结果,并在每个 M 个中启动不同的操作

您可以在 http://www.aoki.ecei.tohoku.ac.jp/arith/mg/algorithm.html页面上获得乘法器的各种硬件变体

于 2010-11-10T03:59:16.777 回答
1

另一个很好的链接是开源 OpenFire 微处理器内核,MicroBlaze 的变体/模拟(基于 DLX):

http://opencores.org/websvn,listing?repname=openfire_core&path=%2Fopenfire_core%2Ftrunk%2Fopenfire_top_syn%2Fhdl%2Fverilog%2F#path_openfire_core_trunk_openfire_top_syn_hdl_verilog_

ALU 和乘法器单元的部分数据路径在openfire_primitives.v文件中。

DLX 数据路径手册对流水线停顿气泡进行了很好的解释

http://www.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/hazards.html

还有关于多循环操作(DLX)的信息

http://www.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/multicycle.html

因此,可以留在管道中的操作(需要更多滴答声)会将停顿(或气泡)插入管道。您可以将其视为停止除 EX 之外的管道的所有阶段,这些阶段对几个 tisks 执行 Long 操作。

开源 Verilog 的另一个 Mul/Div 单元在这里: http ://opencores.org/websvn,filedetails?repname=openrisc&path=%2Fopenrisc%2Ftrunk%2For1200%2Frtl%2Fverilog%2For1200_mult_mac.v

于 2010-11-17T15:32:48.353 回答