Logic Design, Part 7

?

?# Keyboard Navigation

## Global Keys

[, < / ], > Jump to previous / next episode

W, K, P / S, J, N Jump to previous / next marker

t / T Toggle theatre / SUPERtheatre mode

V Revert filter to original state Y Select link (requires manual Ctrl-c)## Menu toggling

q Quotes
r References
f Filter
y Link
c Credits
## In-Menu Movement

## Quotes and References Menus

Enter Jump to timecode

## Quotes, References and Credits Menus

o Open URL (in new tab)
## Filter Menu

x, Space Toggle category and focus next

X, ShiftSpace Toggle category and focus previous

v Invert topics / media as per focus## Filter and Link Menus

z Toggle filter / linking mode
## Credits Menu

Enter Open URL (in new tab)

W, K, P / S, J, N Jump to previous / next marker

t / T Toggle theatre / SUPERtheatre mode

V Revert filter to original state Y Select link (requires manual Ctrl-c)

a

w

s

s

d

h
j
k
l

←

↑

↓

↓

→

X, ShiftSpace Toggle category and focus previous

v Invert topics / media as per focus

⏫

Previous: 'Logic Design, Part 6'

⏫

0:07Recap and set the stage for the day

🗩

0:07Recap and set the stage for the day

🗩

0:07Recap and set the stage for the day

🗩

0:20Review the off-stream implementation of the combined funnel shifter

📖

0:20Review the off-stream implementation of the combined funnel shifter

📖

0:20Review the off-stream implementation of the combined funnel shifter

📖

2:09Review the simple_shifter_unit()

📖

2:09Review the simple_shifter_unit()

📖

2:09Review the simple_shifter_unit()

📖

3:02Tweak the initialisation of s in right_shifter_radix2()

3:02Tweak the initialisation of s in right_shifter_radix2()

3:02Tweak the initialisation of s in right_shifter_radix2()

3:10Continue to review simple_shifter_unit()

📖

3:10Continue to review simple_shifter_unit()

📖

3:10Continue to review simple_shifter_unit()

📖

4:28Set up to cover multipliers that may be almost as fast as adders

🗩

4:28Set up to cover multipliers that may be almost as fast as adders

🗩

4:28Set up to cover multipliers that may be almost as fast as adders

🗩

8:24The basic multiplier algorithm

🗩

8:24The basic multiplier algorithm

🗩

8:24The basic multiplier algorithm

🗩

14:17Introduce partial_products()

14:17Introduce partial_products()

14:17Introduce partial_products()

16:18Introduce naive_multiplier() that simply sums partial products

16:18Introduce naive_multiplier() that simply sums partial products

16:18Introduce naive_multiplier() that simply sums partial products

17:44Define Example33 as a multiplier module

17:44Define Example33 as a multiplier module

17:44Define Example33 as a multiplier module

19:30Simulate our multiplier and fail the test

🏃

19:30Simulate our multiplier and fail the test

🏃

19:30Simulate our multiplier and fail the test

🏃

20:26Check out our multiplier graph

🏃

20:26Check out our multiplier graph

🏃

20:26Check out our multiplier graph

🏃

20:52Fix partial_products() to correctly shift the result

20:52Fix partial_products() to correctly shift the result

20:52Fix partial_products() to correctly shift the result

21:04Simulate our multiplier successfully

🏃

21:04Simulate our multiplier successfully

🏃

21:04Simulate our multiplier successfully

🏃

21:08Simulate our multiplier successfully on signed values, noting the absence of "mulu" (for the lower bits) in RISC-V

🏃

21:08Simulate our multiplier successfully on signed values, noting the absence of "mulu" (for the lower bits) in RISC-V

🏃

🏃

22:27Check out the delay of our multiplier

🏃

22:27Check out the delay of our multiplier

🏃

22:27Check out the delay of our multiplier

🏃

23:18Change naive_multiplier() to binary reduce the circuit

23:18Change naive_multiplier() to binary reduce the circuit

23:18Change naive_multiplier() to binary reduce the circuit

23:37Check out the (halved) delay of our binary reduced multiplier

🏃

23:37Check out the (halved) delay of our binary reduced multiplier

🏃

23:37Check out the (halved) delay of our binary reduced multiplier

🏃

23:51Instantiate an 8-bit multiplier and check out its delay

🏃

23:51Instantiate an 8-bit multiplier and check out its delay

🏃

23:51Instantiate an 8-bit multiplier and check out its delay

🏃

24:31Check out the delay of our original (not binary reduced) multiplier

🏃

24:31Check out the delay of our original (not binary reduced) multiplier

🏃

24:31Check out the delay of our original (not binary reduced) multiplier

🏃

26:08Carry-save adder

🗩

26:08Carry-save adder

🗩

26:08Carry-save adder

🗩

30:20Introduce csa() as a carry-save adder

30:20Introduce csa() as a carry-save adder

30:20Introduce csa() as a carry-save adder

32:09Introduce array_multiadder() and array_multiplier()

32:09Introduce array_multiadder() and array_multiplier()

32:09Introduce array_multiadder() and array_multiplier()

35:27Define Example34 as a carry-save adder

35:27Define Example34 as a carry-save adder

35:27Define Example34 as a carry-save adder

36:02Simulate our carry-save adder and fail the test

🏃

36:02Simulate our carry-save adder and fail the test

🏃

36:02Simulate our carry-save adder and fail the test

🏃

36:53Fix sca() to pre-shift the second operand

36:53Fix sca() to pre-shift the second operand

36:53Fix sca() to pre-shift the second operand

37:38Simulate our carry-save adder successfully

🏃

37:38Simulate our carry-save adder successfully

🏃

37:38Simulate our carry-save adder successfully

🏃

38:43Check the delay of our carry-save adder

🏃

38:43Check the delay of our carry-save adder

🏃

38:43Check the delay of our carry-save adder

🏃

41:53Analyse the critical path of our carry-save adder

📖

41:53Analyse the critical path of our carry-save adder

📖

41:53Analyse the critical path of our carry-save adder

📖

44:09Wallace tree multiply adder

🗩

44:09Wallace tree multiply adder

🗩

44:09Wallace tree multiply adder

🗩

46:56Introduce wallace_multiadder() and add2()

46:56Introduce wallace_multiadder() and add2()

46:56Introduce wallace_multiadder() and add2()

1:02:59Define Example35 as a Wallace tree multiply adder, renaming wallace_multiadder() to wallace_tree_multiadder()

1:02:59Define Example35 as a Wallace tree multiply adder, renaming wallace_multiadder() to wallace_tree_multiadder()

1:06:16Simulate our Wallace tree multiply adder and fail the test

🏃

1:06:16Simulate our Wallace tree multiply adder and fail the test

🏃

1:06:16Simulate our Wallace tree multiply adder and fail the test

🏃

1:07:27Check the graph of our Wallace tree multiply adder

🏃

1:07:27Check the graph of our Wallace tree multiply adder

🏃

1:07:27Check the graph of our Wallace tree multiply adder

🏃

1:14:10Introduce weighted_partial_products() to save our Wallace tree multiply adder having to pre-shift anything

1:14:10Introduce weighted_partial_products() to save our Wallace tree multiply adder having to pre-shift anything

1:15:43Check the graph of our Wallace tree multiply adder without pre-shifting

🏃

1:15:43Check the graph of our Wallace tree multiply adder without pre-shifting

🏃

1:15:43Check the graph of our Wallace tree multiply adder without pre-shifting

🏃

1:16:02Encapsulate add2() into a module

1:16:02Encapsulate add2() into a module

1:16:02Encapsulate add2() into a module

1:17:12Check the graph of our Wallace tree multiply adder with the Add2 module

🏃

1:17:12Check the graph of our Wallace tree multiply adder with the Add2 module

🏃

1:17:12Check the graph of our Wallace tree multiply adder with the Add2 module

🏃

1:22:05Trace wallace_tree_multiadder() in an effort to reveal our bug

1:22:05Trace wallace_tree_multiadder() in an effort to reveal our bug

1:22:05Trace wallace_tree_multiadder() in an effort to reveal our bug

1:25:22Simulate our Wallace tree multiply adder, and inspect the trace

🏃

1:25:22Simulate our Wallace tree multiply adder, and inspect the trace

🏃

1:25:22Simulate our Wallace tree multiply adder, and inspect the trace

🏃

1:29:25Work through Wallace tree multiply addition, guided by our traced values

🗩

1:29:25Work through Wallace tree multiply addition, guided by our traced values

🗩

1:29:25Work through Wallace tree multiply addition, guided by our traced values

🗩

1:32:13Print the pending values in wallace_tree_multiadder()

1:32:13Print the pending values in wallace_tree_multiadder()

1:32:13Print the pending values in wallace_tree_multiadder()

1:34:00Check out our pending values in the context of the full trace

🏃

1:34:00Check out our pending values in the context of the full trace

🏃

1:34:00Check out our pending values in the context of the full trace

🏃

1:35:03A few words on rygorous's suggestion to use full-word CSAs

🗩

1:35:03A few words on rygorous's suggestion to use full-word CSAs

🗩

1:35:03A few words on rygorous's suggestion to use full-word CSAs

🗩

1:35:30Continue to scrutinise wallace_tree_multiadder()

📖

1:35:30Continue to scrutinise wallace_tree_multiadder()

📖

1:35:30Continue to scrutinise wallace_tree_multiadder()

📖

1:36:11Prevent wallace_tree_multiadder() from shadowing variables

1:36:11Prevent wallace_tree_multiadder() from shadowing variables

1:36:11Prevent wallace_tree_multiadder() from shadowing variables

1:37:16Simulate our Wallace tree multiply adder, still fail the test, but get to a second round

🏃

1:37:16Simulate our Wallace tree multiply adder, still fail the test, but get to a second round

🏃

1:37:16Simulate our Wallace tree multiply adder, still fail the test, but get to a second round

🏃

1:42:45Check the graph of our Wallace tree multiply adder to see the same output routed to different locations

🏃

1:42:45Check the graph of our Wallace tree multiply adder to see the same output routed to different locations

🏃

🏃

1:44:11Temporarily make trace() do nothing

1:44:11Temporarily make trace() do nothing

1:44:11Temporarily make trace() do nothing

1:45:07Check the graph and still see the same output routed to different locations

🏃

1:45:07Check the graph and still see the same output routed to different locations

🏃

1:45:07Check the graph and still see the same output routed to different locations

🏃

1:45:32Fix typo in the trace() calls in wallace_tree_multiadder()

1:45:32Fix typo in the trace() calls in wallace_tree_multiadder()

1:45:32Fix typo in the trace() calls in wallace_tree_multiadder()

1:45:42Simulate our Wallace tree multiply adder successfully

🏃

1:45:42Simulate our Wallace tree multiply adder successfully

🏃

1:45:42Simulate our Wallace tree multiply adder successfully

🏃

1:46:47Check the graph of our working Wallace tree multiply adder

🏃

1:46:47Check the graph of our working Wallace tree multiply adder

🏃

1:46:47Check the graph of our working Wallace tree multiply adder

🏃

1:47:21Instantiate 16-bit and 64-bit Wallace tree multiply adders and check out their delay

🏃

1:47:21Instantiate 16-bit and 64-bit Wallace tree multiply adders and check out their delay

🏃

1:47:21Instantiate 16-bit and 64-bit Wallace tree multiply adders and check out their delay

🏃

1:49:30A few words on 4:2 compressors

🗩

1:49:30A few words on 4:2 compressors

🗩

1:49:30A few words on 4:2 compressors

🗩

1:55:59That's it for today

🗩

1:55:59That's it for today

🗩

1:55:59That's it for today

🗩

⏬

Next: 'Logic Design, Part 8'

⏬