Around the beginning of September, I resumed work on my old CPU project that had been collecting dust on github. After about 10 days work, I reached a point where I started implementing the logic for instruction execution.
The more simple instructions were all added and verified quite quickly. Last ones to be implemented were JMP and memory access instructions. JMP instructions actually turned out to be extraordinarily simple logic.
It currently compiles into less than 300 logic elements, so it is a very simple (8-bit data, 16-bit address) CPU design.
Here is what it looks like running in simulation software:
It still hasnt been tested on FPGA hardware, hopefully that day will come before more years pass. I just ordered a Terasic DE10-Nano which has more test hardware built onto it, which should make debugging easier.
I havent spent big cash on my own hobbies for years now, but last year I finally decided that I wanted a proper bench oscilloscope instead of the USB scope I had bought earlier.
After doing research, I settled on a Rigol DS1054Z which would cost me about $450, plus a more proper multimeter than the 30 year old chinesium on I had since my teens.
So I placed the order and waited. The multimeter arrived, but not the Rigol. And waited…. And waited….
About 2 weeks later, I called the company and told them the scope had not arrived. They said they would ask the postoffice to do a search and for me to wait 5 more day. So I did, but still no scope arrived.
I called the company back and they said they didnt have any more in stock, so they would refund me. They refunded the whole order, including the multimeter.
I spent many days designing this PCB, at first several times over in Eagle, but could never get the gerbers to work. So I switched to KiCad, where atleast the gerbers was no problem.
I was very hesitant at first, but eventually sent it off to JLCPCB to have it made.
I know that it is overengineered, but I wanted a flicker-free display where each digit is completely controllable and can be individually addressed. Also wanted the LEDs to shine with the same intensity regardless of how many of them are lit.
It turned out just like I wanted. Nothing at all wrong with the PCB.
Lately I’ve gone ahead and designed and ordered two more. One dual-channel noise source and a rough draft Z80 prototype board. They have not yet arrived but I expect them within a week or two. I’ve already gone ahead and designed yet one more, but I’ll delay ordering it until I have more designs to order along with it.
A couple of weeks back I started designing my own CPU (called Bizzas CPU) in Quartus II with the initial goal of getting it running on an FPGA. Right now im bouncing between many different tasks as well as trying to just chillax from time to time.
Elements of a CPU such as registers, program counters and ALU‘s are pretty easy to design. I have most of that done. My current task is to design a robust and efficient instruction decoder, or instruction executor as I call it. After that, I will make an instruction loader.
Once those are done, the CPU will hopefully be ready to run inside the FPGA without any significant connections to the outside world. Then the next step is to wire it up to some memory and other peripherals, maybe even make a VGA interface.
End goal is ofcourse world domination!
Here is what a 1-bit ALU block looks like inside:
This particular configuration can do add, subtract, XOR, AND and OR. Not bad for only 7 logic gates.