我想知道处理器如何在一个多周期数据路径中从一开始就进行乘法,即从指令读取 - >解码指令 - >阅读注册文件等。
换句话说,我想知道,鉴于展位的乘法算法是单独实现的(给出了一个电路),你将如何扩展多周期数据路径以支持使用最少资源的乘法指令。
你能告诉师吗?
答案 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):
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