We are currently in the process of converting the website to the new design. Some pages, like this one, are still broken. We appreciate your patience.
Bitwise»Episode Guide
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

a
w
s
d
h j k l


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)
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
🏃
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:28rygorous pervognsen 4:2 compressor if you want the more symmetric (binary tree-like) structure later: "tmp, cout = add3(x,y,z)"; "sum, carry = add3(tmp, w, cin)" where the cout / cin are linked "horizontally"
🗪
36:28rygorous pervognsen 4:2 compressor if you want the more symmetric (binary tree-like) structure later: "tmp, cout = add3(x,y,z)"; "sum, carry = add3(tmp, w, cin)" where the cout / cin are linked "horizontally"
🗪
36:28rygorous pervognsen 4:2 compressor if you want the more symmetric (binary tree-like) structure later: "tmp, cout = add3(x,y,z)"; "sum, carry = add3(tmp, w, cin)" where the cout / cin are linked "horizontally"
🗪
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: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: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:28:43rygorous pervognsen I don't really get why you're wiring this up at the individual-bit level to begin with? As in, why not build it out of full-word CSAs? That seems easier to reason about
🗪
1:28:43rygorous pervognsen I don't really get why you're wiring this up at the individual-bit level to begin with? As in, why not build it out of full-word CSAs? That seems easier to reason about
🗪
1:28:43rygorous pervognsen I don't really get why you're wiring this up at the individual-bit level to begin with? As in, why not build it out of full-word CSAs? That seems easier to reason about
🗪
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: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:44:43miotatsu The graph is a gift that keeps on giving... except when the graph has bugs
🗪
1:44:43miotatsu The graph is a gift that keeps on giving... except when the graph has bugs
🗪
1:44:43miotatsu The graph is a gift that keeps on giving... except when the graph has bugs
🗪
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:51:54rygorous Another piece of Real Good Stuff is booth recoding, which he didn't get to
🗪
1:51:54rygorous Another piece of Real Good Stuff is booth recoding, which he didn't get to
🗪
1:51:54rygorous Another piece of Real Good Stuff is booth recoding, which he didn't get to
🗪
1:55:59That's it for today
🗩
1:55:59That's it for today
🗩
1:55:59That's it for today
🗩