Sequential Multiplier Integration

0.0(0)
Studied by 0 people
call kaiCall Kai
Locked
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
GameKnowt Play
Card Sorting

1/72

encourage image

There's no tags or description

Looks like no tags are added yet.

Last updated 9:46 PM on 9/5/26
Name
Mastery
Learn
Test
Matching
Spaced
Call with Kai
Chat

No analytics yet

Send a link to your students to track their progress

73 Terms

1
New cards

SequentialMultiplier

The top-level sequential multiplication module that integrates signed-magnitude preparation, the ShiftAddMultiplier datapath, MultiplierLatencyCounter, MultiplierController, and final sign correction.

2
New cards

Sequential Multiplier Integration

The architectural composition of datapath, progress tracking, and control into one coordinated multi-cycle multiplication unit.

3
New cards

MagnitudeA

The WIDTH-bit magnitude representation of operand A supplied to the shift-and-add datapath.

4
New cards

MagnitudeB

The WIDTH-bit magnitude representation of operand B supplied to the shift-and-add datapath.

5
New cards

assign MagnitudeA = (SignedMode && A[WIDTH - 1]) ? (~A + 1'b1) : A;

Converts a negative signed A to its positive magnitude when SignedMode is active; otherwise passes A unchanged.

6
New cards

assign MagnitudeB = (SignedMode && B[WIDTH - 1]) ? (~B + 1'b1) : B;

Converts a negative signed B to its positive magnitude when SignedMode is active; otherwise passes B unchanged.

7
New cards

Because ShiftAddMultiplier performs the iterative multiplication on unsigned magnitudes, while sign handling is performed around the datapath.

Why are A and B converted to MagnitudeA and MagnitudeB before entering ShiftAddMultiplier?

8
New cards

MagnitudeProduct

The unsigned 2×WIDTH-bit magnitude result produced by ShiftAddMultiplier before final sign correction.

9
New cards

reg NegativeProduct;

Stores whether the completed magnitude product must ultimately be converted into a negative two's-complement Product.

10
New cards

NegativeProduct <= SignedMode && (A[WIDTH - 1] ^ B[WIDTH - 1]);

Captures whether exactly one signed operand is negative when a new multiplication operation is loaded.

11
New cards

Because a signed multiplication result is negative exactly when one operand is negative and the other is positive.

Why does NegativeProduct use XOR between the sign bits?

12
New cards

Because the sequential multiplication lasts multiple clock cycles, so the required result sign must remain associated with the operands that were accepted when the operation began.

Why is NegativeProduct stored in a register in SequentialMultiplier instead of being calculated continuously from the current A and B inputs?

13
New cards

load

The controller signal that simultaneously initializes the multiplier datapath, clears the latency counter, and captures NegativeProduct for the new operation.

14
New cards

Because load identifies the moment when the sequential multiplier accepts and initializes the information belonging to the new multiplication operation.

Why is NegativeProduct captured when load is asserted?

15
New cards

if (reset) NegativeProduct <= 1'b0;

Clears the stored result-sign information when the sequential multiplier is reset.

16
New cards

if (load) NegativeProduct <= SignedMode && (A[WIDTH - 1] ^ B[WIDTH - 1]);

Stores the sign relationship of the newly loaded operands.

17
New cards

Because A, B, or SignedMode could change while the multi-cycle multiplication is still running, but the final result must retain the sign belonging to the originally loaded operation.

Why must the sequential multiplier preserve sign information across the operation?

18
New cards

MultiplierController

The control module that converts START and CountDone into load, step, BUSY, and DONE behavior.

19
New cards

ShiftAddMultiplier

The datapath module that performs the actual iterative shift-and-add arithmetic.

20
New cards

MultiplierLatencyCounter

The progress-tracking module that determines when the required number of useful multiplication steps has been processed.

21
New cards

START

External request input consumed by MultiplierController to begin a new multiplication operation.

22
New cards

BUSY

External status output generated by MultiplierController indicating that the sequential multiplier is occupied.

23
New cards

DONE

External status output generated by MultiplierController indicating that the multiplication operation has completed.

24
New cards

CountDone

Internal status signal through which MultiplierLatencyCounter tells MultiplierController that the required iterations have been completed.

25
New cards

step

The controller's request that another multiplication iteration be performed.

26
New cards

EffectiveStep

The internally qualified step signal actually delivered to ShiftAddMultiplier and MultiplierLatencyCounter.

27
New cards

assign EffectiveStep = step & ~CountDone;

Allows an iteration only when the controller requests a step and the latency counter has not already declared completion.

28
New cards

Because the controller may still be in RUN during the cycle in which CountDone becomes asserted, so the raw step signal must be prevented from causing an additional arithmetic iteration.

Why is EffectiveStep used instead of connecting controller step directly to the datapath?

29
New cards

~CountDone

Prevents additional useful steps after the latency counter has declared the multiplication complete.

30
New cards

step & ~CountDone

The condition under which both the multiplier datapath and latency counter are allowed to advance.

31
New cards

Because the datapath and counter must advance on exactly the same useful iterations so their views of algorithmic progress remain synchronized.

Why is the same EffectiveStep signal connected to both ShiftAddMultiplier and MultiplierLatencyCounter?

32
New cards

If the datapath stepped without the counter

The arithmetic could advance without the progress tracker recording the iteration, causing their states to disagree.

33
New cards

If the counter stepped without the datapath

The progress tracker could report iterations that the arithmetic datapath never actually performed.

34
New cards

ShiftAddMultiplier #(.WIDTH(WIDTH)) MultiplierDatapath

Instantiates the parameterized iterative arithmetic datapath inside SequentialMultiplier.

35
New cards

.A(MagnitudeA), .B(MagnitudeB)

Connects the sign-normalized operand magnitudes to the ShiftAddMultiplier datapath.

36
New cards

.step(EffectiveStep)

Ensures the ShiftAddMultiplier performs an iteration only on an allowed useful step.

37
New cards

.Product(MagnitudeProduct)

Connects the unsigned accumulated multiplication result from the datapath to the SequentialMultiplier wrapper.

38
New cards

.MultiplierBit(MultiplierBit)

Exposes the current multiplier LSB from ShiftAddMultiplier to the SequentialMultiplier wrapper.

39
New cards

MultiplierBit

The internal signal carrying the current least significant bit of the working multiplier from ShiftAddMultiplier.

40
New cards

MultiplierLatencyCounter #(.WIDTH(WIDTH)) LatencyCounter

Instantiates the parameterized algorithmic-progress counter inside SequentialMultiplier.

41
New cards

.clear(load)

Uses the controller's load pulse to reset multiplication progress at the beginning of every new operation.

42
New cards

.step(EffectiveStep)

Makes the latency counter advance on the same useful iterations as the shift-and-add datapath.

43
New cards

.CountDone(CountDone)

Returns the multiplication-completion condition from the latency counter to the surrounding integration logic and controller.

44
New cards

Because loading new operands begins a new multiplication and therefore requires the previous operation's iteration count and completion state to be discarded.

Why is load connected to the latency counter's clear input?

45
New cards

MultiplierController MuliplierControl

Instantiates the FSM responsible for sequencing the sequential multiplication operation.

46
New cards

.START(START)

Passes the external multiplication request into MultiplierController.

47
New cards

.CountDone(CountDone)

Provides the controller with the completion feedback required to leave RUN.

48
New cards

.load(load)

Provides the initialization command used by the datapath, latency counter, and NegativeProduct register.

49
New cards

.step(step)

Provides the controller's raw request for repeated multiplication iterations.

50
New cards

.BUSY(BUSY)

Connects the controller's occupied-status indication directly to the SequentialMultiplier output.

51
New cards

.DONE(DONE)

Connects the controller's completion indication directly to the SequentialMultiplier output.

52
New cards

Controller → load → Datapath

Initializes the working multiplicand, multiplier, accumulator, and product for the new operation.

53
New cards

Controller → load → Latency Counter

Clears the previous multiplication's progress information.

54
New cards

Controller → load → NegativeProduct register

Captures the sign information belonging to the new operands.

55
New cards

Controller → step → EffectiveStep → Datapath

Commands useful shift-and-add iterations while multiplication remains incomplete.

56
New cards

Controller → step → EffectiveStep → Latency Counter

Advances algorithmic-progress tracking alongside the datapath.

57
New cards

Latency Counter → CountDone → Controller

Closes the control feedback loop by telling the controller when the required iterations are complete.

58
New cards

START → Controller → load

The beginning of the internal initialization sequence for a requested multiplication.

59
New cards

load → initialize datapath + clear counter + capture sign

The coordinated actions performed when a new multiplication operation is accepted.

60
New cards

RUN → step → EffectiveStep

The path by which the controller repeatedly requests useful multiplication iterations.

61
New cards

EffectiveStep → Datapath + Counter

The synchronization mechanism ensuring arithmetic progress and recorded progress occur together.

62
New cards

CountDone → Controller → DONE_STATE

The completion-feedback path that causes the controller to terminate RUN and announce completion.

63
New cards

assign Product = (NegativeProduct) ? (~MagnitudeProduct + 1'b1) : MagnitudeProduct;

Produces the final externally visible Product by applying the stored sign to the completed magnitude result.

64
New cards

~MagnitudeProduct + 1'b1

Converts the positive magnitude result into its negative two's-complement representation when NegativeProduct is asserted.

65
New cards

Because the iterative datapath is kept focused on magnitude multiplication while signed interpretation is handled by the SequentialMultiplier wrapper.

Why is final sign correction performed outside ShiftAddMultiplier?

66
New cards

Operand interpretation → magnitude preparation → load → repeated shift-and-add steps → completion detection → final sign correction

The complete data/control flow of SequentialMultiplier.

67
New cards

Datapath–Controller Cooperation

The architectural organization in which ShiftAddMultiplier knows how to perform an iteration while MultiplierController determines when iterations occur.

68
New cards

Counter–Controller Cooperation

The feedback organization in which MultiplierController requests progress and MultiplierLatencyCounter reports when enough progress has occurred.

69
New cards

Datapath–Counter Synchronization

The requirement that ShiftAddMultiplier and MultiplierLatencyCounter advance from the same EffectiveStep so arithmetic state and progress state remain aligned.

70
New cards

Wrapper Module

The role of SequentialMultiplier because it connects specialized submodules and handles operand/result interpretation around them.

71
New cards

The SequentialMultiplier is more than a ShiftAddMultiplier.

Is it true that ShiftAddMultiplier alone implements the complete sequential multiplication protocol?

72
New cards

Because ShiftAddMultiplier performs the arithmetic iterations but does not independently handle START/BUSY/DONE sequencing, iteration completion, or persistent signed-result information.

Why is ShiftAddMultiplier insufficient by itself to implement the complete SequentialMultiplier?

73
New cards

State Is the Price of Reuse

The sequential architecture must preserve working arithmetic state, iteration progress, controller state, and result-sign information because multiplication is distributed across time.