You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/pages/inspiration.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,7 +15,7 @@ Although I now had access to most of the parts, I still didn't know how such an
15
15
- micro-architecture (comparing the single-cycle, multi-cycle and the pipeline processor)
16
16
- microinstructions
17
17
18
-
and so much more, which I don't want to go into detail here as it goes way beyond the scope of this project. Overall, it was an awesome lecture, in which I was able to gain much new knowledge in that area. In the end, I had a good understanding of how these computers operate and what the different micro-steps are to execute a single instruction.
18
+
But were much more topics, which I don't want to go into detail here as it goes way beyond the scope of this project. Overall, it was an awesome lecture, in which I was able to gain much new knowledge in that area. In the end, I had a good understanding of how these computers operate and what the different micro-steps are to execute a single instruction.
19
19
20
20
With the new gained knowledge, I started my research what it takes to build an 8-Bit breadboard computer like the one from Ben Eater. I re-watched some of the old videos, searched the [Ben Eater subreddit](https://www.reddit.com/r/beneater/) for tips and tricks during building and found people improving upon Ben's design. In the end, I settled onto two key points:
Copy file name to clipboardExpand all lines: docs/pages/modules/7-segment-display.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,7 +18,7 @@ According to the CAT28C16API's datasheet (the EEPROM I used), the chip has a tot
18
18
One of these features is the multiplexing of the display's digits: The EEPROM has only eight I/O pins, meaning that no more than one digit can be controlled at once. In order to represent all possible numbers (-128 to 127), we need a minimum number of four digits on the display (one for the negative sign and three for any three-digit number).
19
19
The solution for displaying four digits simultaneously is multiplexing:
20
20
<br>
21
-
Only one of the four digits is active at the same time, but the module cycles through the digits so quickly, that the human eye recognizes it as if all digits were shown at the same time. In order to decode which of the 4 digits is active at the moment, the decoder/EEPROM needs an additional two bits. The last addressbit available is used for switching the lookup-table between the normal decimal representation and a hexadecimal one.
21
+
Only one of the four digits is active at the same time, but the module cycles through the digits so quickly, that the human eye recognizes it as if all digits were shown at the same time. In order to decode which of the 4 digits is active at the moment, the decoder/EEPROM needs an additional two bits. The last address-bit available is used for switching the lookup-table between the normal decimal representation and a hexadecimal one.
22
22
23
23
Three chips of the module's schematic have not been described in the upper section yet.
24
24
The first one is a 555 timer chip, which controls the speed of the multiplexing, meaning how quickly it cycles through the digits.
Copy file name to clipboardExpand all lines: docs/pages/modules/b-c-registers.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,7 +14,7 @@ The B- and the C-Register are two general-purpose 8-bit registers and are built
14
14
They use two 4-bit register chips (SN74LS173AN) and a single 8-bit bus transceiver (SN74LS245N) each, which controls outputting data to the bus. <br>
15
15
Technically, the 4-bit register chips even have a three-state output, so an extra 8-bit bus transceiver wouldn't be necessary. But always enabling the output of the registers and controlling the output to the bus with the bus transceiver allows me to hook up LED's to the registers outputs and thus displaying their contents permanently, not only when outputting to the bus. <br>
16
16
17
-
Asynchronous resets provides the ability to reset the registers to zero, the CLK-input provides a synchronization for loading data from the bus (on the rising CLK edge). On the other hand, outputting data from the register to the bus is asynchronous, as the bus transceiver outputs data immediately after it's Output Enable signal goes low.
17
+
Asynchronous resets provide the ability to reset the registers to zero, the CLK-input provides a synchronization for loading data from the bus (on the rising CLK edge). On the other hand, outputting data from the register to the bus is asynchronous, as the bus transceiver outputs data immediately after it's Output Enable signal goes low.
Copy file name to clipboardExpand all lines: docs/pages/modules/controller.md
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -42,10 +42,10 @@ This means my computer supports a total of 256 different instructions (although
42
42
43
43
The computer supports the four most common flags coming from the ALU: Zero, Negative, Carry and Overflow.
44
44
So the naive approach is to use four of the controller EEPROMs address pins/inputs in order to input all flag (combination) to the controller.
45
-
Unfortunately, there was only one address line left on these EEPROMs (12/13 are already used for the 4-bit step counter and the 8-bit opcode), so i had to came up with a solution to that problem.
45
+
Unfortunately, there was only one address line left on these EEPROMs (12/13 are already used for the 4-bit step counter and the 8-bit opcode), so I had to come up with a solution to that problem.
46
46
<br>
47
47
In fact, every instruction uses at most one (combination) of the flags above, so I'm able to introduce a multiplexer and some combinatorial logic to route always only one flag to the controller.
48
-
The three upper bits of the opcodes are fed into the control lines of that multiplexer, which means that theres a [range of opcodes]({{ site.baseurl }}/instruction-set/opcode-matrix#table2) where a specific flag (combination) is available.
48
+
The three upper bits of the opcodes are fed into the control lines of that multiplexer, which means that there's a [range of opcodes]({{ site.baseurl }}/instruction-set/opcode-matrix#table2) where a specific flag (combination) is available.
49
49
If you define an instruction, you must ensure that, if the instruction needs a specific flag, its opcode lies within the range where that needed flag is available.
50
50
51
51
### Control Line Decoders
@@ -59,12 +59,12 @@ If you think about it, many control lines aren't active at the same time: At mos
59
59
That enables me to introduce two 4-to-16 bit decoders to the circuit, one for most of the input enable (IE) control lines and one for the output enable (OE) control lines.
60
60
The control bits of the decoders are connected to four outputs of the control EEPROMs each, but in return, I get 16 new control lines per EEPROM, resulting in a total of 3\*8+2\*16 = 56 control lines that I have available to control all of my modules.
61
61
62
-
### Annoying behaviour of the 28C64B
62
+
### Annoying behavior of the 28C64B
63
63
64
-
The 28C64B EEPROMs have an annoying behaviour: When their address/input lines change, their outputs are undefined for a short period of time, until the correct value for the next input is loaded and the outputs stabilize again.
64
+
The 28C64B EEPROMs have an annoying behavior: When their address/input lines change, their outputs are undefined for a short period of time, until the correct value for the next input is loaded, and the outputs stabilize again.
65
65
For some control lines, that's not an issue, because they are only read on the rising edge of the clock signal (like most input enable (IE) lines for example).
66
-
But for some others, this results in a misbehaviour of the module and thus the entire computer. The issue is that during this undefined time period, there may be a spike on a control line.
67
-
On the other hand, some modules are very sensitive to such spikes. As an example, have a look at the INC_X control line: As soon as there is a short spike on that line, the register increments. But if that spike occurs unintentionally, the register may increment without you specifying this in your assembly code.
66
+
But for some others, this results in a misbehavior of the module and thus the entire computer. The issue is that during this undefined time period, there may be a spike on a control line.
67
+
On the other hand, some modules are very sensitive to such spikes. As an example, take a look at the INC_X control line: As soon as there is a short spike on that line, the register increments. But if that spike occurs unintentionally, the register may increment without you specifying this in your assembly code.
68
68
That's why you must avoid these spikes on some control lines at all cost.
69
69
<br>
70
70
The solution is a simple circuit called a ["low pass filter"](https://en.wikipedia.org/wiki/Low-pass_filter), consisting of just a single resistor and a capacitor.
Copy file name to clipboardExpand all lines: docs/pages/modules/reset.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@ parent: Modules
10
10
11
11
## Reset
12
12
13
-
The reset module basically consists of a single button and a not gate which allows to send an active low or an active high reset signal to all other modules after the button was pressed (which you should do after every power-up, or when you just want to rerun your program).
13
+
The reset module basically consists of a single button and a not gate which allows sending an active low or an active high reset signal to all other modules after the button was pressed (which you should do after every power-up, or when you just want to rerun your program).
0 commit comments