Skip to content

Commit

Permalink
add comment for the dlatch test
Browse files Browse the repository at this point in the history
  • Loading branch information
Vandesm14 committed Nov 23, 2023
1 parent 0a1b22b commit 218eec8
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 230 deletions.
263 changes: 33 additions & 230 deletions graph.dot
Original file line number Diff line number Diff line change
@@ -1,234 +1,37 @@
digraph {
0 [ label = "Set(0, false)" ]
1 [ label = "Set(1, false)" ]
2 [ label = "Set(2, false)" ]
3 [ label = "Set(3, false)" ]
4 [ label = "Set(4, false)" ]
5 [ label = "Set(5, false)" ]
6 [ label = "Set(6, false)" ]
7 [ label = "Set(7, false)" ]
8 [ label = "Nand(3, 3, 22)" ]
9 [ label = "Nand(7, 7, 23)" ]
10 [ label = "Nand(22, 23, 20)" ]
11 [ label = "Nand(3, 7, 21)" ]
12 [ label = "Nand(20, 21, 24)" ]
13 [ label = "Nand(24, 24, 17)" ]
14 [ label = "Nand(3, 7, 25)" ]
15 [ label = "Nand(25, 25, 18)" ]
16 [ label = "Nand(17, 17, 28)" ]
17 [ label = "Nand(13, 13, 29)" ]
18 [ label = "Nand(28, 29, 26)" ]
19 [ label = "Nand(17, 13, 27)" ]
20 [ label = "Nand(26, 27, 30)" ]
21 [ label = "Nand(30, 30, 12)" ]
22 [ label = "Nand(17, 13, 31)" ]
23 [ label = "Nand(31, 31, 19)" ]
24 [ label = "Nand(18, 18, 32)" ]
25 [ label = "Nand(19, 19, 33)" ]
26 [ label = "Nand(32, 33, 14)" ]
27 [ label = "Nand(2, 2, 39)" ]
28 [ label = "Nand(6, 6, 40)" ]
29 [ label = "Nand(39, 40, 37)" ]
30 [ label = "Nand(2, 6, 38)" ]
31 [ label = "Nand(37, 38, 41)" ]
32 [ label = "Nand(41, 41, 34)" ]
33 [ label = "Nand(2, 6, 42)" ]
34 [ label = "Nand(42, 42, 35)" ]
35 [ label = "Nand(34, 34, 45)" ]
36 [ label = "Nand(14, 14, 46)" ]
37 [ label = "Nand(45, 46, 43)" ]
38 [ label = "Nand(34, 14, 44)" ]
39 [ label = "Nand(43, 44, 47)" ]
40 [ label = "Nand(47, 47, 11)" ]
41 [ label = "Nand(34, 14, 48)" ]
42 [ label = "Nand(48, 48, 36)" ]
43 [ label = "Nand(35, 35, 49)" ]
44 [ label = "Nand(36, 36, 50)" ]
45 [ label = "Nand(49, 50, 15)" ]
46 [ label = "Nand(1, 1, 56)" ]
47 [ label = "Nand(5, 5, 57)" ]
48 [ label = "Nand(56, 57, 54)" ]
49 [ label = "Nand(1, 5, 55)" ]
50 [ label = "Nand(54, 55, 58)" ]
51 [ label = "Nand(58, 58, 51)" ]
52 [ label = "Nand(1, 5, 59)" ]
53 [ label = "Nand(59, 59, 52)" ]
54 [ label = "Nand(51, 51, 62)" ]
55 [ label = "Nand(15, 15, 63)" ]
56 [ label = "Nand(62, 63, 60)" ]
57 [ label = "Nand(51, 15, 61)" ]
58 [ label = "Nand(60, 61, 64)" ]
59 [ label = "Nand(64, 64, 10)" ]
60 [ label = "Nand(51, 15, 65)" ]
61 [ label = "Nand(65, 65, 53)" ]
62 [ label = "Nand(52, 52, 66)" ]
63 [ label = "Nand(53, 53, 67)" ]
64 [ label = "Nand(66, 67, 16)" ]
65 [ label = "Nand(0, 0, 73)" ]
66 [ label = "Nand(4, 4, 74)" ]
67 [ label = "Nand(73, 74, 71)" ]
68 [ label = "Nand(0, 4, 72)" ]
69 [ label = "Nand(71, 72, 75)" ]
70 [ label = "Nand(75, 75, 68)" ]
71 [ label = "Nand(0, 4, 76)" ]
72 [ label = "Nand(76, 76, 69)" ]
73 [ label = "Nand(68, 68, 79)" ]
74 [ label = "Nand(16, 16, 80)" ]
75 [ label = "Nand(79, 80, 77)" ]
76 [ label = "Nand(68, 16, 78)" ]
77 [ label = "Nand(77, 78, 81)" ]
78 [ label = "Nand(81, 81, 9)" ]
79 [ label = "Nand(68, 16, 82)" ]
80 [ label = "Nand(82, 82, 70)" ]
81 [ label = "Nand(69, 69, 83)" ]
82 [ label = "Nand(70, 70, 84)" ]
83 [ label = "Nand(83, 84, 8)" ]
3 -> 22 [ label = "()" ]
3 -> 22 [ label = "()" ]
7 -> 23 [ label = "()" ]
7 -> 23 [ label = "()" ]
22 -> 20 [ label = "()" ]
23 -> 20 [ label = "()" ]
3 -> 21 [ label = "()" ]
7 -> 21 [ label = "()" ]
20 -> 24 [ label = "()" ]
21 -> 24 [ label = "()" ]
24 -> 17 [ label = "()" ]
24 -> 17 [ label = "()" ]
3 -> 25 [ label = "()" ]
7 -> 25 [ label = "()" ]
25 -> 18 [ label = "()" ]
25 -> 18 [ label = "()" ]
17 -> 28 [ label = "()" ]
17 -> 28 [ label = "()" ]
13 -> 29 [ label = "()" ]
13 -> 29 [ label = "()" ]
28 -> 26 [ label = "()" ]
29 -> 26 [ label = "()" ]
17 -> 27 [ label = "()" ]
13 -> 27 [ label = "()" ]
26 -> 30 [ label = "()" ]
27 -> 30 [ label = "()" ]
30 -> 12 [ label = "()" ]
30 -> 12 [ label = "()" ]
17 -> 31 [ label = "()" ]
13 -> 31 [ label = "()" ]
31 -> 19 [ label = "()" ]
31 -> 19 [ label = "()" ]
18 -> 32 [ label = "()" ]
18 -> 32 [ label = "()" ]
19 -> 33 [ label = "()" ]
19 -> 33 [ label = "()" ]
32 -> 14 [ label = "()" ]
33 -> 14 [ label = "()" ]
2 -> 39 [ label = "()" ]
2 -> 39 [ label = "()" ]
6 -> 40 [ label = "()" ]
6 -> 40 [ label = "()" ]
39 -> 37 [ label = "()" ]
40 -> 37 [ label = "()" ]
2 -> 38 [ label = "()" ]
6 -> 38 [ label = "()" ]
37 -> 41 [ label = "()" ]
38 -> 41 [ label = "()" ]
41 -> 34 [ label = "()" ]
41 -> 34 [ label = "()" ]
2 -> 42 [ label = "()" ]
6 -> 42 [ label = "()" ]
42 -> 35 [ label = "()" ]
42 -> 35 [ label = "()" ]
34 -> 45 [ label = "()" ]
34 -> 45 [ label = "()" ]
14 -> 46 [ label = "()" ]
14 -> 46 [ label = "()" ]
45 -> 43 [ label = "()" ]
46 -> 43 [ label = "()" ]
34 -> 44 [ label = "()" ]
14 -> 44 [ label = "()" ]
43 -> 47 [ label = "()" ]
44 -> 47 [ label = "()" ]
47 -> 11 [ label = "()" ]
47 -> 11 [ label = "()" ]
34 -> 48 [ label = "()" ]
14 -> 48 [ label = "()" ]
48 -> 36 [ label = "()" ]
48 -> 36 [ label = "()" ]
35 -> 49 [ label = "()" ]
35 -> 49 [ label = "()" ]
36 -> 50 [ label = "()" ]
36 -> 50 [ label = "()" ]
49 -> 15 [ label = "()" ]
50 -> 15 [ label = "()" ]
1 -> 56 [ label = "()" ]
1 -> 56 [ label = "()" ]
5 -> 57 [ label = "()" ]
5 -> 57 [ label = "()" ]
56 -> 54 [ label = "()" ]
57 -> 54 [ label = "()" ]
1 -> 55 [ label = "()" ]
5 -> 55 [ label = "()" ]
54 -> 58 [ label = "()" ]
55 -> 58 [ label = "()" ]
58 -> 51 [ label = "()" ]
58 -> 51 [ label = "()" ]
1 -> 59 [ label = "()" ]
5 -> 59 [ label = "()" ]
59 -> 52 [ label = "()" ]
59 -> 52 [ label = "()" ]
51 -> 62 [ label = "()" ]
51 -> 62 [ label = "()" ]
15 -> 63 [ label = "()" ]
15 -> 63 [ label = "()" ]
62 -> 60 [ label = "()" ]
63 -> 60 [ label = "()" ]
51 -> 61 [ label = "()" ]
15 -> 61 [ label = "()" ]
60 -> 64 [ label = "()" ]
61 -> 64 [ label = "()" ]
64 -> 10 [ label = "()" ]
64 -> 10 [ label = "()" ]
51 -> 65 [ label = "()" ]
15 -> 65 [ label = "()" ]
65 -> 53 [ label = "()" ]
65 -> 53 [ label = "()" ]
52 -> 66 [ label = "()" ]
52 -> 66 [ label = "()" ]
53 -> 67 [ label = "()" ]
53 -> 67 [ label = "()" ]
66 -> 16 [ label = "()" ]
67 -> 16 [ label = "()" ]
0 -> 73 [ label = "()" ]
0 -> 73 [ label = "()" ]
4 -> 74 [ label = "()" ]
4 -> 74 [ label = "()" ]
73 -> 71 [ label = "()" ]
74 -> 71 [ label = "()" ]
0 -> 72 [ label = "()" ]
4 -> 72 [ label = "()" ]
71 -> 75 [ label = "()" ]
72 -> 75 [ label = "()" ]
75 -> 68 [ label = "()" ]
75 -> 68 [ label = "()" ]
0 -> 76 [ label = "()" ]
4 -> 76 [ label = "()" ]
76 -> 69 [ label = "()" ]
76 -> 69 [ label = "()" ]
68 -> 79 [ label = "()" ]
68 -> 79 [ label = "()" ]
16 -> 80 [ label = "()" ]
16 -> 80 [ label = "()" ]
79 -> 77 [ label = "()" ]
80 -> 77 [ label = "()" ]
68 -> 78 [ label = "()" ]
16 -> 78 [ label = "()" ]
77 -> 81 [ label = "()" ]
78 -> 81 [ label = "()" ]
81 -> 9 [ label = "()" ]
81 -> 9 [ label = "()" ]
68 -> 82 [ label = "()" ]
16 -> 82 [ label = "()" ]
82 -> 70 [ label = "()" ]
82 -> 70 [ label = "()" ]
69 -> 83 [ label = "()" ]
69 -> 83 [ label = "()" ]
2 [ label = "Nand(11, 12, 2)" ]
3 [ label = "Nand(5, 5, 3)" ]
4 [ label = "Nand(8, 8, 4)" ]
5 [ label = "Nand(6, 7, 5)" ]
6 [ label = "Nand(0, 0, 6)" ]
7 [ label = "Nand(4, 4, 7)" ]
8 [ label = "Nand(9, 10, 8)" ]
9 [ label = "Nand(1, 1, 9)" ]
10 [ label = "Nand(3, 3, 10)" ]
11 [ label = "Nand(4, 4, 11)" ]
12 [ label = "Nand(4, 4, 12)" ]
0 -> 6 [ label = "()" ]
0 -> 6 [ label = "()" ]
4 -> 7 [ label = "()" ]
4 -> 7 [ label = "()" ]
6 -> 5 [ label = "()" ]
7 -> 5 [ label = "()" ]
5 -> 3 [ label = "()" ]
5 -> 3 [ label = "()" ]
1 -> 9 [ label = "()" ]
1 -> 9 [ label = "()" ]
3 -> 10 [ label = "()" ]
3 -> 10 [ label = "()" ]
9 -> 8 [ label = "()" ]
10 -> 8 [ label = "()" ]
8 -> 4 [ label = "()" ]
8 -> 4 [ label = "()" ]
4 -> 11 [ label = "()" ]
4 -> 11 [ label = "()" ]
4 -> 12 [ label = "()" ]
4 -> 12 [ label = "()" ]
11 -> 2 [ label = "()" ]
12 -> 2 [ label = "()" ]
}
10 changes: 10 additions & 0 deletions src/gates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,16 @@ mod tests {
simulation.run(&[true, false]);
assert!(!simulation.registers[dlatch.q]);

// FIXME: We shouldn't need to run the DLatch twice to get the correct result
//
// This is due to us compiling things and running them once.
// The core of a DLatch is an RS-NOR latch, which is a loop
// and technically needs to run twice to get the correct result.
//
// A few ideas:
// 1. Detect recursion in the simulation and run the cyclic ops twice
// 2. Similar to #1, except manually add double ops for the RS-NOR latch
simulation.run(&[true, true]);
simulation.run(&[true, true]);
assert!(simulation.registers[dlatch.q]);
}
Expand Down

0 comments on commit 218eec8

Please sign in to comment.