Multipliers are typically fully-pipelined and so the only structural hazard they present is that they can only complete one operation per clock cycle. Bit this was goes busy for a variable latency and can be said to create a hazard (to the commencement of fresh multiplies) while it is busy.
Behavioural algorithm:
while (1) { wait (Start); RA=A; RB=B; RC=0; while(RA>0) { if odd(RA) RC=RC+RB; RA = RA >> 1; RB = RB << 1; } Ready = 1; wait(!Start); Ready = 0; } (Either HLS or hand coding can give the illustrated datapath and sequencer structure:) | ![]() |
It is certainly not fully-pipelined, it goes busy for many cycles, depening on the log of the A input. The illustration shows a common design pattern consisting of a datapath and a sequencer. Booth's algorithm (see additional material) is faster, still using one adder but needing half the clock ticks.
40: (C) 2008-18, DJ Greaves, University of Cambridge, Computer Laboratory. | Flash Player Upgrade Needed ![]() ![]() | ![]() |