多周期数据路径中的乘法从头开始写入

时间:2010-10-31 10:26:58

标签: architecture mips processor multiplying

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

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

你能告诉师吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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和Multiplier单元的部分数据路径位于openfire_primitives.v文件中。

具有管道档位气泡的良好解释的DLX数据路径手册是

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

还有mulitcycle ops(DLX)的信息

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

因此,可以保持在管道中的操作(需要更多刻度)将向管道插入停顿(或泡沫)。您可以将此视为停止除EX之外的所有管道阶段,对多个风险执行Long操作。

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