- Видео 138
- Просмотров 5 659 396
Mike Kohn
Добавлен 5 май 2006
Mostly just posting videos of my nerdy projects. For more information visit: www.mikekohn.net/
Apollo Guidance Computer In An FPGA
More Info: www.mikekohn.net/micro/apollo11_fpga.php
Here's an implementation of the Apollo Guidance Computer done in Verilog in an FPGA. The Apollo Guidance Computer being the computer that was used in the Apollo spacecraft and the moon lander.
Here's an implementation of the Apollo Guidance Computer done in Verilog in an FPGA. The Apollo Guidance Computer being the computer that was used in the Apollo spacecraft and the moon lander.
Просмотров: 1 064
Видео
Mandelbrots w/ ARM64 Vector Instructions
Просмотров 2,2 тыс.7 месяцев назад
Website: www.mikekohn.net/software/mandelbrots_simd.php Here's a video generated on a Raspbery Pi 4 cluster using Kubernetes. The cluster produces 5652 Mandelbrot images that were generated using the ARM64 vector (SIMD) instructions to speed up the processing. The main code was written in C, but the function to generate the Mandelbrot is written in pure assembly language. The music in the video...
x86 and 68000 in an FPGA
Просмотров 1,9 тыс.9 месяцев назад
website: www.mikekohn.net/micro/micro_x86_68000_fpga.php This is an implementation of Intel x86 and Motorola 68000 in FPGA's. Only important instructions were implemented, an example the "not" instruction was left out because xor eax, 0xffffffff achieves the same thing. Each core has 8k of RAM and 4k of "ROM" and peripherals such as SPI and a music generator. More information and all source cod...
RISC-V in an FPGA
Просмотров 2,4 тыс.Год назад
Website: www.mikekohn.net/micro/riscv_fpga.php This is a RISC-V implementation I did in an FPGA. The demo shows a Mandelbrot being generated in software (no hardware multiply) and then demonstrates a custom "mandel" instruction I added to this implementation which computes each pixel in hardware. The last segment shows a program written in Java, compiled with Java Grinder, playing a song. The s...
Ferranti F100-L in an FPGA
Просмотров 1 тыс.Год назад
More Info: www.mikekohn.net/micro/f100_l_fpga.php This is a demonstration of an FPGA coded with Verilog to be a mid-1970's Ferranti F100-L CPU. The demo shows a Mandelbrot being generated in software using software multiplies and such and then a much faster hardware implementation. There's also servo control and the ability to write software for this project in Java using Java Grinder. Visit we...
RC Car Drag Race Circuit Version 4
Просмотров 647Год назад
Webpage: www.mikekohn.net/micro/drag_racing_tree.php This is a newer design of a previous project. This one uses ESP32-C3 modules (RISC-V based microcontrollers). Functionality wise it works the same as the MSP430 version, but this time communication between the circuits is done through WiFi (TCP). The start circuit also acts as a web server so the race can be started with a computer instead of...
Nintendo 64 Java Demo
Просмотров 20 тыс.2 года назад
Website: www.mikekohn.net/micro/nintendo64_java.php This a graphics / sound demo written in Java running on a Nintendo 64. The triangles are drawn using the N64's RSP which does 3D rotations / projections in MIPS/RSP assembly. More information along with a higher quality MP3 of the music is available on the website above.
Intel 8008 in an FPGA
Просмотров 6592 года назад
www.mikekohn.net/micro/intel_8008_fpga.php Here's my first soft CPU core written in Verilog. This is an Intel 8008 CPU running a program that is loaded from an SPI-like EEPROM on start up. The software is written in assembly language. The FPGA here is a Lattice iCE40 HX8K on an iceFUN board.
Water Glass Music
Просмотров 2892 года назад
Website: www.mikekohn.net/micro/solenoid_music.php Here are 8 (only 7 are visible) glass jars, bottles, and cups with an MSP430G2553 based circuit that triggers solenoids to play a song.
LEGO Data Reader
Просмотров 2,9 тыс.2 года назад
Website: www.mikekohn.net/micro/lego_data_reader.php Here is a computer program that blinks an LED on the Western Design Center W65C265SXB board stored as black and white LEGOs. The circuit will read black as a 1 and white as a 0 and transfer the program over a 2wire / SPI-like protocol. #LEGO
Sleepy Bee 8051 Java
Просмотров 1872 года назад
Website: www.mikekohn.net/micro/8051_java.php I recently added 8051 CPU support to Java Grinder and support for this Sleepy Bee development kit. This is a breakout game written in Java and compiled from byte code to 8051 assembly with Java Grinder to work on this board. #8051 #Java
Glow In The Dark Memory
Просмотров 2,4 тыс.2 года назад
Website: www.mikekohn.net/micro/glow_in_the_dark_memory.php This is a demonstration of using 8 glow in the dark stickers to act as 1 byte of computer memory. The memory is accessed using a Western Design Center MENSCH SBC (W65C265 / 16C816 CPU... 16 bit version of a 6502) and is interfaced through an iceFUN FPGA board. #FPGA #6502
Mandelbrot from Raspberry Pi 4 cluster
Просмотров 4,9 тыс.3 года назад
Web: www.mikekohn.net/software/mandelbrots_cluster.php Here's a Mandelbrot animation generated on a cluster of four Raspberry Pi 4 computers running Kubernetes. More information on the webpage posted above. The music is a song I did for an Amiga demo in Java from a couple years ago. #Mandelbrot #Kubernetes #RaspberryPi #Cluster
The Pixel Janitor
Просмотров 5073 года назад
Website: www.mikekohn.net/micro/pixel_janitor.php This is a Pixel 1 phone sending commands over Bluetooth to a motor control circuit connected to a Sticky Buddy roller so it can clean my floor. Click the website above for detailed info.
Cloud Atari 2600 Emulation
Просмотров 8013 года назад
www.mikekohn.net/software/cloudtari.php This is a demonstration of an Atari 2600 emulator that runs on a cluster of Raspberry Pi 4 computers orchestrated using Kubernetes. The screen is showing a desktop PC with 3 web browsers with different IP address (because of the camera / lighting invisible) running 3 different license-free Atari 2600 programs. The Space Revenge and Atari logo are written ...
Intellivision Breakout Written in Java
Просмотров 3563 года назад
Intellivision Breakout Written in Java
Perfektní
Only the Emotion Engine could run this. Great work!
The Emotion Engine was fun to code on :) and thanks!
That’s cool, how did you flash the assembly onto the controller?
It's hardcoded in the FPGA's Verilog: initial begin $readmemh("rom.txt", fixed_memory); end The Makefile has some recipes for building specific test programs and generating the rom.txt from it. I could add a bootloader and read from UART, but meh... :)
wow what an entresting project! I'd like to see it work more in depth, good job!
Thanks!!
i've had this idea for years now, i truly believe Java could breath new life in the Amiga.
@@wirelessdirk i was lucky to even still have that amiga 1000 laying around to do that project.
10/10
bro is this TinyFPGA ? if so where did you find a genuine one plz!
This is an iceFUN board .. in North America you can get it from www.robotshop.com/ .. I have more info on my website.
cool :)
man,your idea is fine
Dobrá práce
nice work
Ah… bimbo ard
Why?
THOUSANDS OF YEARS AGO, before the dawn of man as we knew him, there was Sir Santa of Claus, an ape-like creature making crude and pointless toys out of dinobones and his own waste, hurling them at chimp-like creatures with crinkled hands regardless of how they behaved the previous year. These so-called "toys" were buried as witches, and defecated upon, and hurled at predators when wakened by the searing grunts of children. It wasn't a holly jolly Christmas that year. For many were killed. A war-like race of elves from the Red Planet landed on the ice-encased Earth, and they were immediately enslaved by the unevolved Santa Ape to make his confused toys using galactic elfin technology. Toys were made into recognizable shapes and given names like "train," but these toys were also thrown at predators and defecated upon because they were so stupid. Christmas still sucked, in a big way. THOUSANDS OF YEARS AGO the ice had made the globe invariable. Santa Ape did not know where the North Pole was. How could he? He was born before science existed. So he arbitrarily placed his workshop RIGHT HERE, long before they unionized, and Christmas was celebrated at each full Moon in front of a great red ape
I'm a bit lost,i remember similar performance on xaos on Pentiums in 1998.
xaos is a realtime Mandelbrot generator while this was 5000+ frames generated into .png files and turned into a video with ffmpeg. The reason I did this project is because I have interest in CPU instruction sets and I had been wanting to mess around with ARM64 vector instructions for years and finally found the time to do this. The Kubernetes part (other than clusters are just cool) was an excuse to mess with Kubernetes again incase I need it at my job or want to talk about it in a job interview. All the source code for this project is posted online, if you know of ways to improve the vector code, it would be cool to hear it. Please feel free to shoot me an email to discuss.
what's with the flickering as the video zooms in? looks like some kind of floating point rounding error
Short answer: Yeah, this is 32 bit floats. I kind of wanted to show the limit of the 32 bit, but looking back I probably shouldn't have done it with the flicker. It kind of looked interesting at some point though I think. Long answer: The coordinates for all frames to draw were picked with a Python script. The script starts with a r0, r1, i0, i1 that is known to have a good image. There were functions to zoom and shift (left, right, up, down) that took a delta value to know how much to add to r and i. So I would give it X iterations of a zoom and look at the picture at the point and make it shift up, down, etc for Y iterations to move to an interesting point.. then zoom again, shift again, etc. There's actually a point further in where the image started warping from the zoom but it destroyed the values of r and i so I didn't go in that far.
Good one. Nice coding, right-hand guitar technique, and system admin skills to set up the cluster. :)
Thank you for the positive words :).
"Is [the mandelbrot set] an instrument?”
No, this is Patrick!
Hey, I recognise you...
Cool on a technical level, but I simply can't not leave a dislike after hearing that music. If that is the current limit of you musical skill, then you should focus learning and practice instead of spending money on all those guitars.
I expected massive zooming in. What's in this video doesn't need a cluster to calculate I had no problem with the music. I assume the sound was intentional.
wydm? the music is fire ngl. leaving a like on this vid
this is awesome thank you youtube for recommending this to me i really need to learn assembly
Thanks!!! If you're interested in microcontrollers, MSP430 is one of the easiest assembly language to learn.
Cybernecromancy
Where's the chicken?
No chickens were eaten in the making of this video.
Thanks for the video!
This is so cool! Also you could make it analog like dial-up modems, it'll be faster.
Thanks!! I think the chip used here to detect the tones (LM567) was actually used in very early modems (300 baud?), so something like this really could be done.
@@mikeakohn Maybe I can try it myself with arduinos. I don't have that level electronic knowledge. But i'll try file transferring.
Go for it.. If you need help feel free to ping me. I'll tell you though, I had a really hard time with the receiver side of the circuit... I myself am a software guy... the issue being making the microphone sensitive enough to pick up such a soft sound without adding noise to the input of the LM567. The LM567 also can be tuned for frequency and I believe also how fast it will respond to that frequency...
@@mikeakohn Thank you for your support! I will start a week later, I can't access my tools right now. Maybe I will share it to internet too.
@@mikeakohn And I have a recommendation for your project if you have it now. You can change signal length to frequency so you can make communicaton like 2x faster
Cool
Did you run the frame generation on the GPUs? A Mandelbrot generator should be interactive on a Pi GPU, I'd guess. The overheads of distributing the work and getting results back might overwhelm the parallelism benefits, and the cost of serially encoding a video on a single node might dominate the total run time if the GPUs were generating the frames.
Nah... no GPU. The reason for the project was to learn Kubernetes, so it was more of an exercise in that rather than to try to figure out how to generate the images very fast. Could be interesting though if one processes per Pi did have a GPU based generator.
@@mikeakohn Ah okay, fractal generation is definitely a handy CPU workload for this sort of thing. I've used it myself. Nice benefit that the demo looks pretty too!
Wow!!! I'm far from hardware, could you please make a video how you did it? How did you make that logic in code? You're video make me so curious!
That would be a pretty long video I think :(. I have a somewhat long explanation of the project on my website (there's a link in the description). If you do software and have a basic understanding of logic gates, you'd have no trouble picking up Verilog. In some ways I think it's a little easier than it looks. I can send you a link to a Verilog tutorial of you want?
Send a link, please.
This one was really nice: www.asic-world.com/verilog/veritut.html
@@mikeakohn Thank you very much!
Great project.
Did you write the risc-v core yourself?
Yep! This is my 2nd or 3rd CPU... still learning it.
@@mikeakohn oh very cool. I also was thinking to write a risc-v core myself but you know, we all have not much time. Btw did you write the core by just reading the opcodes?
@@randypeeters3931 Yeah, I wrote an assembler for it a while back. RISC-V was for the most part was pretty easy, the hardest part is some of bits in some of the opcodes are permutated. So not only are the bits broken up in different areas of the 32 bit opcode, they aren't in order.
@@mikeakohn that is so cool! I wonder if you could get Linux running on it
@@whatamievendoing I only implemented the bare minimum instructions (no MMU, no FPU) .. around 87% of the FPGA is full. Also, the FPGA has some built in SRAM.. this design is only using 8k of it for RAM and some for other stuff. The chip only has 16k bytes of RAM I think. Can do other fun stuff with it though :).
what's the fpga board you used in this project?
It's an iceFUN board (sold by Robot Electronics in Europe and The Robot Shop in North America). This is a really great board for projects like this... the grid of 4x8 LEDs really helped with debugging.
That's really cool!
Super cool
While I can't imagine that being practical, it looks like it was a fun little project. 🙂
thats crazy! good work man
Cool! That reminds me of a Williams tube CRT memory.
The movie 9 be like this
This was made for stoners.
this is awesome - well done
love the video i hate that they cant let u choose what time you want, they could have a knob on it and u just turn it to any minute you want, but nooo, we gotta have you use it all up in a certain amount of time
That would actually be super easy to write firmware for. Hardest part is taking out the old circuit board.
Very nice.
Nice how to bypass timer and work by button only
Is this open source?
I put "License: BSD" on the top of the source code. Feel free to grab it from my github repo.
Bring back the w-house!
good work.
why is it needed?
Me installing java on my pc: runs on billions of devices? huh. Mike: me: 🤯
Really cool project. Pointless? Probably. But also shows the technical possibilities of using java bytecode as an intermediary.
I always the java vm would have been perfect on the game consoles.
This is actually not a VM, Java Grinder compiles Java byte code into MIPS assembly language..
This is absolutely amazing... would it be hard to display the time on the start line??
Thanks! Do you mean move the 7 segment displays to the start circuit instead of at the end?
@@mikeakohn yes. Would be easier to see the winners time at the start line. I’m getting old my eyes stink.
With this particular circuit.. it's using an MSP430G2553 microcontroller and every single pin on the microcontroller is being used. It would take 4 extra pins to add a display like that.. and to have 2 displays, they would have be kept in sync. I have a new design in mind with a chip that has more pins, but I have other ideas for that one that might be better than adding a display on the front circuit...
This is really cool