Building a 1-Bit CPU as a Custom ASIC, Then Overclocking It From 1 Hz to 10 MHz
イチケン / ICHIKENIchiken built a 1-bit CPU from the transistor level up, had it fabricated as a real chip, and then tested how far it could be pushed. The design is deliberately minimal, described by its original creator as among the world's lowest-performance computers. The project had two aims: to show how a digital ASIC is laid out and manufactured, compared with the analog op-amp chip Ichiken built earlier, and to see how fast such a tiny CPU can run once the clock and supply voltage are raised. As before, the work was done with help from ISHI-kai, an open-source semiconductor community.
The Source Design: naoto64's 1-Bit CPU
Ichiken is clear that the 1-bit CPU is not their own invention. The ASIC is based almost entirely on a circuit designed by naoto64, who also sells assembly kits for it. naoto64's sales page describes the CPU as one of the world's lowest-performance computers. In the ASIC version, the clock and display circuits sit outside the chip, but the CPU section follows essentially the same circuit design as the original.
The CPU has four parts: a register, a program counter, a ROM, and a decoder. The register is a D flip-flop. The arithmetic logic is an XOR gate built from four NAND gates, which works as a half-adder with no carry. The decoder is made from AND, OR, and NOT gates. The ROM section contains gates too, but the actual program values come from external DIP switches.
Both the program counter and the register are 1 bit wide. Ichiken suggests this may be about as bare-bones as a CPU can get. As a result there are only two instructions: ADD and JMP.
Layout: Digital Is Much Easier Than Analog
The logic gates were already defined, so the layout job was mostly a matter of arranging them in a row. As with the op-amp project, Ichiken used KLayout, an open-source layout editor.
Ichiken contrasts this with the earlier analog work. For the op-amp, transistor placement needed a lot of care, such as pairing transistors, matching them with common-centroid arrangements, and adding dummy transistors at the edges. A digital circuit does not demand that level of fussiness. The process design kit (PDK) also provides standard cells, which are pre-built transistor combinations optimized for the process. For this chip, Ichiken simply chose the standard cells they needed, placed them, and connected them with a metal layer.
Each standard cell has inputs and outputs that connect to the cells beside it. The cells arrive fully functional, so there is no need to design how the transistors behave. Ichiken found it a relief to focus on wiring instead of transistor layout. They note that the two projects differ in circuit size and transistor count, so the comparison is not direct. Still, the op-amp layout took dozens of hours, while the 1-bit CPU took about two or three hours. In Ichiken's words, it was honestly a lot easier than last time.
Fabrication at Tokai Rika
As before, Ichiken did the design and layout and outsourced manufacturing to an external foundry. The chip was again made through chip pooling: several participants share space on one die, which keeps the cost per person as low as possible. The foundry this time was Tokai Rika.
The foundry sent photos from the manufacturing process, including before-and-after images of the aluminum metal wiring step, with the ICHIKEN logo visible. Ichiken says images like these really bring home that the semiconductors are being manufactured.
The finished chips came in both bare-die and packaged versions. Under a digital microscope, the bare die shows many different circuits, since other people's designs share the chip. Ichiken's 1-bit CPU occupies the upper-right corner, and on closer inspection they judged it to be very well made.
The Test Setup
The chip cannot run on its own, so Ichiken built a board with a chip socket and assembled the peripheral circuitry on a breadboard. The DIP switches act as ROM and hold the instructions and immediate data. The area around the LEDs contains the clock and shows the states of the program counter and the register. The program counter can only be 0 or 1, and there is a single register.
One practical issue: the smallest standard cells used in the CPU cannot supply enough current to drive an LED, so the LEDs are driven through buffer transistors. Ichiken admits they are not sure this is a proper way to build a CPU, but went ahead anyway.
Programming It: JMP Loops
Only four DIP switch bits are used: switches 1 and 2 for address 0, and switches 7 and 8 for address 1. In each pair, the first bit selects the instruction (1 means JMP, 0 means ADD) and the second holds the immediate data. A switch at 0 V reads as 0, and one at 5 V reads as 1.
At the start of the demo, the chip was executing JMP 0. With no additions performed, the register stayed at 0. Ichiken then programmed JMP 1 at address 0 by turning switches 1 and 2 on. At address 1, switch 7 was at 5 V (JMP) and switch 8 at 0 V (immediate 0), giving JMP 0. After a reset, the CPU loads JMP 1 at address 0 and jumps to address 1. There it runs JMP 0 and goes back to address 0, and the cycle repeats. Since no addition occurs, the register LED never lights.
Programming It: Repeated Addition Without Carry
The next program adds 1 to the register over and over. Address 0 holds ADD with an immediate of 1 (the instruction bit at 0, the data bit at 5 V). Address 1 holds JMP 0, so execution loops back.
Ichiken held the reset button, powered up, and released reset. On the first clock pulse, ADD A,1 runs. The register becomes 1, and the program counter moves to 1. On the next clock, JMP 0 runs. The program counter returns to 0, and the register is unchanged. On the clock after that, ADD runs again and adds 1 to a register that already holds 1. The adder has no carry, so 1 + 1 gives 0 and the register clears. The CPU keeps repeating this, and the register LED toggles on and off.
Overclocking at the Standard 5 V
Ichiken notes that whenever a project involves a homemade CPU, overclocking is the obvious next step. The demos ran at 1 Hz, and raising the input clock frequency counts as overclocking. The process's standard operating voltage is 5 V, so the first test was to find the maximum frequency at 5 V.
At 10 Hz the CPU clearly still worked. At 50 Hz it was visibly running but too fast to follow by eye, so Ichiken switched to an oscilloscope showing the clock, program counter, and register from top to bottom. The waveforms at 100 Hz matched the program as expected. Each rising clock edge alternated between ADD A,1 and JMP 0, and the register flipped between 1 and 0 because there is no carry.
The frequency went up to 1 kHz, 10 kHz, and 100 kHz with no trouble. At 1 MHz the CPU still ran, but the waveforms were quite distorted. Ichiken remarks that this is where transistor design really starts to matter. Above that, the edges became increasingly rounded, and in places the voltage no longer fell all the way to 0 V. At 3.0 MHz it was working "by a thread." At 3.1 MHz the register values started misbehaving. At the standard 5 V, then, the limit was reached at roughly 3 MHz.
Raising the Supply Voltage
Ichiken next increased the supply voltage. At 6 V the circuit responded more strongly and ran up to 3.7 MHz. At 7 V it reached 4.3 MHz.
At 8 V, Ichiken stopped probing the program counter and watched only the clock input and the register. They reasoned that dropping one probed waveform barely affects CPU operation but reduces loading on the circuit. With that change, the CPU ran up to 8.4 MHz at 8 V. Ichiken notes that the transistors themselves are guaranteed only up to 8 V. With voltage ripple, surges, and wiring effects included, the chip might already be seeing more than 8 V. Since it was still working, they carried on.
At 10 V, starting from 8.4 MHz and stepping up, the limit was 10.0 MHz. At 10.1 MHz the behavior became odd in places.
Power, Heat, and Where Ichiken Stopped
At 11 V, power consumption jumped. At 10 V the circuit drew roughly 65 mW, and at 11 V it drew about 170 mW (Ichiken also reads it as about 166 mW). The clock could go a little higher, to around 10.4 MHz.
At 12 V, power jumped to about 0.5 W at once, and Ichiken said it looked like the transistors might burn out. A thermal camera showed the chip visibly heating up. Ichiken adds a caveat: because other people's circuits share the same die and were also powered, some of the heat and power may come from those circuits. Judging the situation to be getting risky, they stopped there.
Closing Observations
Ichiken points out that the breadboard wiring to the 1-bit CPU is quite long. They suspect that a dedicated printed circuit board could let the chip run at a somewhat higher frequency, though this was not tested.
As for what the CPU can actually do, Ichiken admits it is essentially limited to blinking an LED. Their conclusion is that the project is still an interesting way to learn about semiconductor design and layout, especially in contrast with the far more labor-intensive analog op-amp chip from the previous project.
This video is brought to you by JLCPCB.
Hello. I built this 1-bit CPU this time. How was it made? And here is the 1-bit CPU I actually built using this circuit. Let's test it out. When I built an op-amp circuit myself a while back, I had help from ISHI-KAI, an open-source semiconductor community. Thanks again for your help this time. I built a 1-bit CPU from scratch, starting at the transistor level.
Before we actually get started, here’s an introduction to today’s sponsor. If you want to make printed circuit boards at a low cost, I highly recommend JLCPCB. When people think of printed circuit boards, they usually imagine a stiff, green board like this, but JLCPCB can also manufacture soft flexible circuit boards. With wearable devices and more flexible component layouts, flexible circuit boards have become virtually indispensable.
Right now, we want as many people as possible to use flexible circuit boards, so we manufacture these products at significantly lower prices. Five 100 × 100 mm sheets starting at $2—that’s pretty cheap. You can choose from a variety of reinforcing materials to reinforce flexible circuit boards: polyimide, FR4, stainless steel, and 3M tape. You can also choose an EMI shielding film. Coupons for flexible circuit boards are also available via the link in the description, so please feel free to try making all sorts of things yourselves.
JLCPCB will also be exhibiting at the JPCA Show from June 10 to 12, 2026. It will be held at Tokyo Big Sight for three days, so if you have the chance, please stop by.
This time we're going to build a 1-bit CPU, but I didn't actually come up with the 1-bit CPU myself. There's a source for this. As mentioned in the description, this ASIC is based almost entirely on the circuit designed by naoto64. The original circuit looked like this. If we implement this as an ASIC, it will look like this. In this case, we are using external circuits for the clock and display circuits, but the CPU section uses virtually the same circuit design. As the author himself states on the sales page, the 1-bit CPU is among the world's lowest-performance computers. This time, we're going to implement it as an ASIC.
In terms of circuit configuration, there are the register unit, program counter, ROM, and decoder. The register uses a D flip-flop. The logic circuit is an XOR gate composed of four NAND gates. There is no carry in the addition stage of the half-adder. The decoder is also constructed using AND, OR, and NOT gates. The ROM has gates too, but what determines the actual value is these DIP switches used externally.
The program counter is only one bit, and the register is also 1 bit. I suppose you could say it’s a very simple setup. I'm thinking this might be the bare-bones CPU configuration. For this reason, there are only two instructions: addition and JMP.
Since we already have the original logic gates, I'll arrange them in a row to create the layout. Just like in the previous op-amp design, I used KLayout, an open-source layout editor. Last time, with the op-amp, it was an analog circuit, so they put a lot of thought into the transistor layout. For example, having two beers, aligning characteristics with a common-centroid layout, or placing dummy transistors at the edges. However, since we're designing a digital circuit this time, you don't have to be so fussy when laying it out.
As for the transistors used, there are pre-configured transistor combinations known as standard cells, optimized for this process and PDK. What we did this time was select the necessary standard cells and arrange them. I just connected them with a metal layer. That's all. This is the standard cell we used this time. There are inputs and outputs, and you connect them to the standard cells on either side. Since a fully functional version is provided from the start, you don't have to worry about designing the transistor's operation. It’s actually quite a relief to be able to focus on the wiring work rather than the layout.
Compared to analog circuits, the layout and wiring work for this digital circuit was pretty easy. Since the circuit size and the number of transistors used differ, it’s not possible to make a simple comparison, but in contrast to the previous op-amp layout, which took dozens of hours, this 1-bit CPU project took about two or three hours to complete. To be honest, it was a lot easier than last time.
Next, we'll move on to production. Just like last time, we designed and laid out the circuit ourselves. We will outsource manufacturing to an external foundry. Of course, we're doing the chip pooling again this time, too. We all share the space on a single chip. Therefore, we are able to keep the cost per person as low as possible. As for the foundry we used, this time we used Tokai Rika. Tokai Rika actually manufactures semiconductors, doesn't it?
They also sent me photos taken during the manufacturing process. We've received photos showing the differences before and after the aluminum metal wiring, including the ICHIKEN logo. When I see something like this, it really brings home the fact that semiconductors are actually being manufactured here, doesn't it?
Here is the finished product. There are both bare-die and packaged versions available. I took a look at the bare chip under a digital microscope. Since I'm sharing the chip with other people like this, you can tell there's all sorts of stuff in there, can't you? The circuit ICHIKEN built this time is this part in the upper right corner. If you take a closer look, you can see that it’s very well made.
From here on, we will examine how the 1-bit CPU operates. This chip alone won't work, so I assembled the board with the chip socket and the peripheral circuitry on a breadboard. This part is a 1-bit CPU. The DIP switch is ROM. I am specifying the instructions and immediate data. The LEDs let me check the clock, program counter, and register states. Since it's a 1-bit CPU, the program counter is either 0 or 1, and there is only one register.
The smallest standard cells used in the 1-bit CPU cannot generate enough current to power the LED. For this reason, the LED is driven by a buffer transistor. I'm not sure if this is suitable as a CPU, but I'll give it a try for now.
Actually, this is already up and running. Using the DIP switch here, I am specifying the instructions and immediate data. I'm only using the four bits corresponding to DIP switches 1, 2, 7, and 8. Since the only instructions are JMP and ADD, right now I'm just focusing on doing that. The instruction currently being executed is JMP 0. Of course, since I haven't executed commands like addition or anything like that, the register also remains at 0.
The next operations we'll try are JMP 1 and JMP 0. Use the DIP switches to change the immediate data. First, to set JMP 1, set these two switches, 1 and 2, to ON. And as for JMP 0, toggle the ON/OFF switches for positions 7 and 8. If the bit is set to 1, it is a JMP instruction. The 0 will appear later; it's an ADD. In the immediate data section, 0 V is 0 and 5 V is 1.
That's why I'm currently executing a JMP instruction. As for where to jump, it jumps to the location where the program counter is set to 1. Next, here, since the voltage at position 7 is 5 V, this is a JMP instruction. And at position 8, since this is at 0 V, this is the JMP 0 instruction.
First, press the reset button. Load JMP 1 at address 0. The program counter jumps to 1. Next, the instruction at program counter 1 is JMP 0. Therefore, the program counter reaches 0 again. It’s all about repeating that over and over again. That is how it works. Of course, this command doesn't perform operations like addition either, so the register does not light up.
Next, we'll keep adding 1 to the register. I'm going to try programming that. The addition command is 0 here. Since we keep adding 1, the immediate data is 1 at 5 V. If the program counter continues, we'll be following this order, but since we keep adding 1, we need to set JMP to 0. Since the immediate data for the JMP instruction is 0, JMP is set to 0. Let's try this out.
Now let's turn it on. First, hold down the reset button and turn on the power. Release the reset button. That looks good. First, let's look at how it works. When the first clock signal is received, the program counter is 1, and the register value also became 1. It looks something like this. I'll go again. When the first clock pulse is applied, the program counter is set to 1, and the register is also 1.
To start with, here’s what happened: we added 1 to the register. Naturally, this will add 1 to the register, so that's where it lights up. When you execute that command, 1 is added to the program counter, so the program counter also lights up on the first clock cycle. Next, execute the JMP 0 instruction. Then, when the next clock signal arrives—do you understand? Like this. Once it turns on and the clock ticks again, the program counter LED goes out, doesn't it?
I'll go again. When the program counter is set and the clock signal is received again, this will cause the program counter LED to go out. Since I haven't performed any specific operations on the register, such as addition, we will keep it as is. Even with a JMP 0, the register remains unchanged.
When the program counter reaches 0, what happens next? You add A and 1, right? In other words, you add 1 to the value of 1 in the register. In this case, the adder only performs addition; it doesn't account for carry. That’s why 1 plus 1 equals 0. Here's how it works. Since 1 was added to 1, the register becomes 0. We will keep repeating this action over and over again. It was good to see how it works.
Whenever words like "DIY" or "CPU" come up, overclocking is something you'll want to try. Of course, the input frequency is currently 1 Hz, but if you increase this input frequency, that would be overclocking. The standard operating voltage for the CPU process we built this time is 5 V. First, let's check the maximum operating frequency at 5 V.
Starting from a clock frequency of 1 Hz, we'll keep increasing the frequency. This is currently 10 Hz. It looks like it's working fine. Keep raising it like this. This is currently 50 Hz. I can tell it looks like it's moving, but since it’s too fast to see with the naked eye, we’ll use an oscilloscope.
Now let's get started. It's currently running at 100 Hz and seems to be working fine. From top to bottom: clock, program counter, and register state. It’s easier to understand when you look at the waveform, isn’t it? When the first clock pulse hits, ADD A,1 is executed, and the register value becomes 1. At the same time, the program counter value becomes 1. What happens at the next clock rise? JMP 0. When that happens, the program counter will become 0. Since the register hasn't been modified in any way, it remains at 1.
When the next clock edge occurs, 1 is added to register A, so register A becomes 0. No carry is provided. The program counter reaches 1. It just keeps doing that over and over.
Set the frequency even higher to 1 kHz. It's currently 1 kHz. That looks good. Next is 10 kHz. This seems to be working fine as well. Increase the frequency further to 100 kHz. That's great. I've increased it further, and it's now at 1 MHz. It's gotten pretty high, hasn't it? Even so, it's still running like this. However, the waveform has become quite distorted. This is where the transistor design really makes a difference. I think that's the key point.
We'll continue to increase the frequency. It's gotten pretty rough, like this. There are some areas where the voltage has not dropped to 0 V. Increase it further to 3.0 MHz. It’s working, but it’s pretty much hanging by a thread. 3.1 MHz doesn't work, does it? At 3.1 MHz, the register value is behaving a little strangely. That means it operates up to 3.1 MHz at a supply voltage of 5 V.
What’s next? We will increase the supply voltage. It's 6 V. Things seem to be getting moving, don't they? Up to how many MHz does the frequency go at this point? That's about it. It goes up to 3.7 MHz. Increase the supply voltage further. Next is 7 V. It works, I guess. Increase the frequency even further. The frequency is 4.3 MHz.
Increase the supply voltage further. Next is 8 V. It's better to reduce the number of waveforms you're looking at, since this will have less impact on CPU performance. From now on, I won't look at the value of the program counter. All you need to look at are the clock inputs and the register states. That way, we can set the frequency quite high. Because the impact has decreased when you stop checking the value of the program counter, at an input voltage of 8 V, the clock frequency now operates up to 8.4 MHz.
To be precise, the operation of the transistor itself is guaranteed up to 8 V this time. Since this includes voltage ripple and surges, when you factor in things like wiring, I kind of get the feeling it might be over 8 V, though. It's working for now, so I guess it's okay.
Next, let's increase the voltage even further to 10 V. Start with a frequency of 8.4 MHz and gradually increase it. 10.0 MHz is the limit, isn't it? When set to 10.1 MHz, it behaves strangely in some places, doesn't it?
Next, increase the input voltage to 11 V. That causes power consumption to spike, doesn't it? At 10 V, power consumption is roughly 65 mW, but if you set the supply voltage to 11 V, it increases to about 170 mW. As for the input frequency, you can overclock it further, to around 10.4 MHz or so.
What happens if you increase the supply voltage further? If you switch to 12 V—oh no. When the supply voltage is 11 V, power consumption is about 166 mW, but if you switch to 12 V, as you can see, it jumps up to about 0.5 W all at once. This looks like it might burn out the transistor. Even when I check the temperature with a thermal imaging camera, you can see that it's heating up. Since other circuits are also sharing the same space this time, those circuits are also powered, so I think this part is starting to have an effect, too. This is starting to get a little dicey, so I'll leave it at that.
By the way, regarding this circuit, as you can see, the wiring length to the 1-bit CPU is quite long. If you design a dedicated circuit on a printed circuit board instead of this kind of breadboard, I have a feeling the operating frequency could be a little higher.
That was the video where I turned a 1-bit CPU into an ASIC. As for what the CPU can do, it's pretty much limited to blinking an LED, but I think this is an interesting topic for learning about semiconductor design and layout. The links I used as references are listed in the description section, so if you're interested, be sure to check it out. If you found this video helpful, please give it a thumbs up. If you have any other questions, please feel free to leave a comment. Thank you for watching until the end.
Article published · Updated
