【问题标题】:multiplication in multicycle datapath write from stratch从头开始写入多周期数据路径中的乘法
【发布时间】:2023-10-20 01:43:02
【问题描述】:

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

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

你也能说出除法吗?

【问题讨论】:

  • 嗨 - 我不确定这是否是解决这个问题的最佳地点(尽管你不时会看到类似的问题) - 也许 ServerFault.com 更适合这个问题?跨度>

标签: architecture mips processor multiplication


【解决方案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 数据路径手册,很好地解释了管道stallsbubbles

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

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

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

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

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

【讨论】:

    【解决方案2】:

    对于简单的 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

    【讨论】: