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
Sequential Logic
?
?

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 moving on to sequential logic
🗩
0:07Recap and set the stage for the day moving on to sequential logic
🗩
0:07Recap and set the stage for the day moving on to sequential logic
🗩
0:30Review the off-stream bug-fix and optimisation to nonrestoring_binary_divider()
📖
0:30Review the off-stream bug-fix and optimisation to nonrestoring_binary_divider()
📖
0:30Review the off-stream bug-fix and optimisation to nonrestoring_binary_divider()
📖
3:59Briefly note real-number approaches to division, including Newton's method,1 Goldschmidt2 and SRT division3
🗩
3:59Briefly note real-number approaches to division, including Newton's method,1 Goldschmidt2 and SRT division3
🗩
3:59Briefly note real-number approaches to division, including Newton's method,1 Goldschmidt2 and SRT division3
🗩
8:15Moving on from deterministic parallel functional programming to sequencing stateful systems
🗩
8:15Moving on from deterministic parallel functional programming to sequencing stateful systems
🗩
8:15Moving on from deterministic parallel functional programming to sequencing stateful systems
🗩
11:15Stateful systems
🗩
11:15Stateful systems
🗩
11:15Stateful systems
🗩
12:57The basic stateful component: register / flip-flop
🗩
12:57The basic stateful component: register / flip-flop
🗩
12:57The basic stateful component: register / flip-flop
🗩
16:31Understanding our existing RegisterNode
📖
16:31Understanding our existing RegisterNode
📖
16:31Understanding our existing RegisterNode
📖
19:02Comment out the SerialMultiplier module and remove "enable" from the RegisterNode
19:02Comment out the SerialMultiplier module and remove "enable" from the RegisterNode
19:02Comment out the SerialMultiplier module and remove "enable" from the RegisterNode
20:02Check out the code for Example37 in the context of our move to a stateful system
📖
20:02Check out the code for Example37 in the context of our move to a stateful system
📖
20:02Check out the code for Example37 in the context of our move to a stateful system
📖
22:08Spec out a Counter class
🗩
22:08Spec out a Counter class
🗩
22:08Spec out a Counter class
🗩
29:31Spec out simulation of the system every time
🗩
29:31Spec out simulation of the system every time
🗩
29:31Spec out simulation of the system every time
🗩
31:23Understanding the necessity of double-buffering
🗩
31:23Understanding the necessity of double-buffering
🗩
31:23Understanding the necessity of double-buffering
🗩
33:32Set up to implement our stateful system
🗩
33:32Set up to implement our stateful system
🗩
33:32Set up to implement our stateful system
🗩
34:50Begin to implement RegisterNode privately setting and type-checking the "next" property
34:50Begin to implement RegisterNode privately setting and type-checking the "next" property
34:50Begin to implement RegisterNode privately setting and type-checking the "next" property
37:11Run it to see that the RegisterNode type-checking works
🏃
37:11Run it to see that the RegisterNode type-checking works
🏃
37:11Run it to see that the RegisterNode type-checking works
🏃
37:20Enable set_next() in RegisterNode to convert literals to their expected type4
37:20Enable set_next() in RegisterNode to convert literals to their expected type4
37:20Enable set_next() in RegisterNode to convert literals to their expected type4
38:20Run it to see that the type-conversion works
🏃
38:20Run it to see that the type-conversion works
🏃
38:20Run it to see that the type-conversion works
🏃
38:56Define Example38 as a counter
38:56Define Example38 as a counter
38:56Define Example38 as a counter
42:02Check out the graph of our counter
🏃
42:02Check out the graph of our counter
🏃
42:02Check out the graph of our counter
🏃
42:39Introduce make_register() in our Linearizer for its RegisterNode() to use
42:39Introduce make_register() in our Linearizer for its RegisterNode() to use
42:39Introduce make_register() in our Linearizer for its RegisterNode() to use
49:09Test linearizing Example38 to see that the inliner doesn't cannot handle our RegisterNode
🏃
49:09Test linearizing Example38 to see that the inliner doesn't cannot handle our RegisterNode
🏃
49:09Test linearizing Example38 to see that the inliner doesn't cannot handle our RegisterNode
🏃
49:35Introduce RegisterNode() in our Transformer
49:35Introduce RegisterNode() in our Transformer
49:35Introduce RegisterNode() in our Transformer
50:51Check out our linearized Example38
🏃
50:51Check out our linearized Example38
🏃
50:51Check out our linearized Example38
🏃
52:12Change RegisterNode() in the Transformer to set the name and increment the counter inline
52:12Change RegisterNode() in the Transformer to set the name and increment the counter inline
52:12Change RegisterNode() in the Transformer to set the name and increment the counter inline
54:20Check out our linearized Example38 to see t2 computed earlier
🏃
54:20Check out our linearized Example38 to see t2 computed earlier
🏃
54:20Check out our linearized Example38 to see t2 computed earlier
🏃
54:52Enable linearizer() to return the registers to set the next state
54:52Enable linearizer() to return the registers to set the next state
54:52Enable linearizer() to return the registers to set the next state
55:48Check out our linearized Example38 to see the next state
🏃
55:48Check out our linearized Example38 to see the next state
🏃
55:48Check out our linearized Example38 to see the next state
🏃
56:14Implement register reading to pull in the next state
56:14Implement register reading to pull in the next state
56:14Implement register reading to pull in the next state
58:41Try to compile Example38
🏃
58:41Try to compile Example38
🏃
58:41Try to compile Example38
🏃
59:48Add tick() and reset() to the compile_template for compile() to emit
59:48Add tick() and reset() to the compile_template for compile() to emit
59:48Add tick() and reset() to the compile_template for compile() to emit
1:03:49Check out the generated code of Example38, to see that it looks reasonable
🏃
1:03:49Check out the generated code of Example38, to see that it looks reasonable
🏃
1:03:49Check out the generated code of Example38, to see that it looks reasonable
🏃
1:04:57Create a simulation test of our stateful Example38
1:04:57Create a simulation test of our stateful Example38
1:04:57Create a simulation test of our stateful Example38
1:07:24Run the Example38 simulation to see the expected results
🏃
1:07:24Run the Example38 simulation to see the expected results
🏃
1:07:24Run the Example38 simulation to see the expected results
🏃
1:08:30Conveniently interacting with stateful circuits
🗩
1:08:30Conveniently interacting with stateful circuits
🗩
1:08:30Conveniently interacting with stateful circuits
🗩
1:09:39Set up to make iterable instances of Example38
1:09:39Set up to make iterable instances of Example38
1:09:39Set up to make iterable instances of Example38
1:11:39Spec out an __iter__() function for Example38
🗩
1:11:39Spec out an __iter__() function for Example38
🗩
1:11:39Spec out an __iter__() function for Example38
🗩
1:13:00Define SimulatorInstance class
🗩
1:13:00Define SimulatorInstance class
🗩
1:13:00Define SimulatorInstance class
🗩
1:18:28Simulate our stateful instances successfully
🏃
1:18:28Simulate our stateful instances successfully
🏃
1:18:28Simulate our stateful instances successfully
🏃
1:20:03A few words on our iterable instances abstraction
🗩
1:20:03A few words on our iterable instances abstraction
🗩
1:20:03A few words on our iterable instances abstraction
🗩
1:21:33Change our SimulatorInstance to reset on creation
1:21:33Change our SimulatorInstance to reset on creation
1:21:33Change our SimulatorInstance to reset on creation
1:22:20Check the code for Example38
🏃
1:22:20Check the code for Example38
🏃
1:22:20Check the code for Example38
🏃
1:23:39Reflect on our newly synchronous system
🗩
1:23:39Reflect on our newly synchronous system
🗩
1:23:39Reflect on our newly synchronous system
🗩
1:24:45Set up to create interesting stateful circuits
🗩
1:24:45Set up to create interesting stateful circuits
🗩
1:24:45Set up to create interesting stateful circuits
🗩
1:25:13Bit-serial multiplier
🗩
1:25:13Bit-serial multiplier
🗩
1:25:13Bit-serial multiplier
🗩
1:26:35Spec out a bit-serial multiplier
🗩
1:26:35Spec out a bit-serial multiplier
🗩
1:26:35Spec out a bit-serial multiplier
🗩
1:28:41Define Example39 as a bit-serial multiplier
1:28:41Define Example39 as a bit-serial multiplier
1:28:41Define Example39 as a bit-serial multiplier
1:31:41Check the graph of Example39
🏃
1:31:41Check the graph of Example39
🏃
1:31:41Check the graph of Example39
🏃
1:32:06Create a simulation test of our bit-serial multiplier
1:32:06Create a simulation test of our bit-serial multiplier
1:32:06Create a simulation test of our bit-serial multiplier
1:35:51Simulate the bit-serial multiplier to see that it actually seems correct
🏃
1:35:51Simulate the bit-serial multiplier to see that it actually seems correct
🏃
1:35:51Simulate the bit-serial multiplier to see that it actually seems correct
🏃
1:37:38Test our bit-serial multiplier
1:37:38Test our bit-serial multiplier
1:37:38Test our bit-serial multiplier
1:38:15Simulate the bit-serial multiplier and fail the test
🏃
1:38:15Simulate the bit-serial multiplier and fail the test
🏃
1:38:15Simulate the bit-serial multiplier and fail the test
🏃
1:38:55Fix our bit-serial multiplier test
1:38:55Fix our bit-serial multiplier test
1:38:55Fix our bit-serial multiplier test
1:39:05Simulate the bit-serial multiplier, fail the test and investigate why
🏃
1:39:05Simulate the bit-serial multiplier, fail the test and investigate why
🏃
1:39:05Simulate the bit-serial multiplier, fail the test and investigate why
🏃
1:44:05Try printing our product beside the result of Python's own multiplication AND'd with the mask
🏃
1:44:05Try printing our product beside the result of Python's own multiplication AND'd with the mask
🏃
1:44:05Try printing our product beside the result of Python's own multiplication AND'd with the mask
🏃
1:45:49Make our bit-serial multiplier simulation perform one more iteration, to pass the test
🏃
1:45:49Make our bit-serial multiplier simulation perform one more iteration, to pass the test
🏃
1:45:49Make our bit-serial multiplier simulation perform one more iteration, to pass the test
🏃
1:46:25Reflect on our bit-serial multipler
🗩
1:46:25Reflect on our bit-serial multipler
🗩
1:46:25Reflect on our bit-serial multipler
🗩
1:46:58Create a faster version of our bit-serial multiplier using a p_valid_reg control signal
1:46:58Create a faster version of our bit-serial multiplier using a p_valid_reg control signal
1:46:58Create a faster version of our bit-serial multiplier using a p_valid_reg control signal
1:50:44Simulate our faster bit-serial multiplier, fail the test and investigate why
🏃
1:50:44Simulate our faster bit-serial multiplier, fail the test and investigate why
🏃
1:50:44Simulate our faster bit-serial multiplier, fail the test and investigate why
🏃
1:51:17Change our bit-serial multiplier simulation not to check p_valid on the first iteration
1:51:17Change our bit-serial multiplier simulation not to check p_valid on the first iteration
1:51:17Change our bit-serial multiplier simulation not to check p_valid on the first iteration
1:52:06Simulate our faster bit-serial multiplier, fail the test again and continue to investigate why
🏃
1:52:06Simulate our faster bit-serial multiplier, fail the test again and continue to investigate why
🏃
1:52:06Simulate our faster bit-serial multiplier, fail the test again and continue to investigate why
🏃
1:54:58Check out the outputs of our bit-serial multiplier instances
🏃
1:54:58Check out the outputs of our bit-serial multiplier instances
🏃
1:54:58Check out the outputs of our bit-serial multiplier instances
🏃
1:55:37Rework our bit-serial multiplier simulation
1:55:37Rework our bit-serial multiplier simulation
1:55:37Rework our bit-serial multiplier simulation
1:57:34Simulate our faster bit-serial multiplier successfully
🏃
1:57:34Simulate our faster bit-serial multiplier successfully
🏃
1:57:34Simulate our faster bit-serial multiplier successfully
🏃
1:58:07Spec out some test code we'd like our co-routine interface to allow
🗩
1:58:07Spec out some test code we'd like our co-routine interface to allow
🗩
1:58:07Spec out some test code we'd like our co-routine interface to allow
🗩
2:00:00Introduce simulate_test()
2:00:00Introduce simulate_test()
2:00:00Introduce simulate_test()
2:03:06Introduce example39_test() to test our simulate_test()
2:03:06Introduce example39_test() to test our simulate_test()
2:03:06Introduce example39_test() to test our simulate_test()
2:05:11Run our simulate_test() successfully on example39_test()
🏃
2:05:11Run our simulate_test() successfully on example39_test()
🏃
2:05:11Run our simulate_test() successfully on example39_test()
🏃
2:05:38Reflect on our co-routine interface
🗩
2:05:38Reflect on our co-routine interface
🗩
2:05:38Reflect on our co-routine interface
🗩
2:07:20We are done for that, with a glimpse into the future of state machine composition
🗩
2:07:20We are done for that, with a glimpse into the future of state machine composition
🗩
2:07:20We are done for that, with a glimpse into the future of state machine composition
🗩