A Vacuum Tube Single Board Computer?!

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[Music] hello and welcome back and this is the ue1 it is a 1bit vacuum tube computer that we're building from the ground up and it's a pretty strange system that became abundantly clear to me when I got it up to an event and let people start seeing it and getting hands on with it and it was very very difficult to explain the architecture and ease people into the concept of one bit Computing so I've been kind of racking my brain about how better to get that core concept across and I came up with a design that got built into this PCB right here and this was very graciously supplied by my good friends over at PCB way who also sponsored this episode now not going to show any b-roll and say oh they're great go check them out I'm going to show you the actual product and I want you guys to look at the close-up shots of it throughout the rest of this video make a decision for yourself whether PCB way is building things to a quality that meets a standard that you think is worth using uh but before we get into this PCB let's talk about why this is so weird and why I think this PCB is going to help the uh ue1 here is based very heavily on the Motorola MC 14500 this is a one bit industrial control unit that Motorola built in the 1970s to replace ladder logic in uh finite State machines like uh stoplight controllers or turn Styles or things like that but the design was robust enough to be considered a full-fledged micro processor and it has a uh accumulating result register a fullon logic unit and uh it's a pretty neat design I think now I took that design and uh essentially translated it to vacuum tubes and built this but I made a a couple of modifications along the way I gave it a proper arithmetic logic unit so it can do addition and subtraction but it still shares that fundamental one bit design which is kind of a strange thing to say because it has 16 instructions so how can you have a one- bit computer in 16 instructions well it's got multiple buses going on there's a 4-bit instruction bus that gives us our 16 instructions but anytime we're moving data it all happens one bit at a time the data bus is just one single bit that's kind of a strange thing to ease people into it's a very weird concept not only that the mc145 and the ue1 are not considered bit slice processors bit slice means that you can take a lower bitwidth Stack Up multiple copies of it and build up larger bit widths this is essentially how the Centurion works it has an AM 2901 which is a four- bit bit slice Alou so you take these four bits and stack them up to get however big of a uh data bus width that you want but that's not how this works it's an actual one bit CPU so I wanted to uh come up with an idea that was simple enough to grasp and then also have that be as similar as possible to this but as small as possible so people could get hands on with it and that is what this is It's essentially a single board 24 vacuum tube version of all of this madness here so how did I take 190 tubes and minimize it down to 24 tubes well we lost a lot of functionality in the process but the Core Concepts are there so let's hop over to the bench take a close look at this PCB take a close look at the design of this PCB then we'll build it out and give it a test and hopefully it makes the uh concepts of the ui1 a little easier to understand all right let's start by taking a look at the block diagram for the ue1 uh and this is actually just the processor portion of it uh our data bus up here that is our onebit datab bus it's gated coming into the ALU through an I register uh then we can do math or logic in the ALU the output is stored in an accumulating result register RR or a carry register both of which feed back into the ALU as inputs uh and then the output of RR can be uh multiplexed whether we have the output or the inverse output of it back onto our onebit data bus and finally we have a right pen all the way over here on the right side of the diagram and we use that right pen to store whatever is in the data bus into memory after that the only thing that we have left is a 4-bit instruction that goes into a register that then gets decoded to control everything then we have a collection of Flags over on the right side that we use for various things now when we take all of this and turn it into individual logic gates to create a logic diagram we end up with this uh it's primarily built out of nor Gates because that was the easiest thing for me to build out of vacuum tubes and at first it looks insane but over here on the left we've got our 4-bit instruction register then the decoder that decodes that out uh right here in the center we've got our ALU then we've got our in register up here our oen register down here and we have a couple of extra things for the different flags that go on all in all pretty simple but this comes out to 190 vacuum tubes there's no way we're going to make that handheld so let's take a look at a simplified block diagram and this is actually a block diagram for the uh 24 tube PCB that we've made and you can see we've eliminated a bunch of it we only have a three- bit instruction now instead of that instruction being stored in instruction register we just immediately decode it and use that to control everything else uh our ALU is actually not an ALU anymore it's just a logic unit and uh that gets stored in an accumulating result register and then for our outputs we have our gated right pin so we can put stuff into or out of memory and we have our uh result register output in case we want to use that for something else and just like before we have our onebit data bus at the top so this takes the core concept of the ue1 and boils it down to the bare minimum and if we break that down into logic gates we get this this is actually the full logic diagram for the PCB that we built and it looks a little complicated at first but we can uh break it down into pretty simple things the uh eight nor Gates over here on the right form our uh accumulating result register this is just a Master Slave or primary secondary D flip-flop this is what we're calling RR and the output out of it and the inverted output out of it uh Circle back around and feed into these four nor Gates over here these four nor Gates form a kind of multiplexer that we're actually using as as the logic unit so a0 A1 and A2 are our three bit address that are selecting different instructions and they feed in as inputs to these four nor gates to create our Multiplex or logic unit the other inputs coming into this are uh RR and inverse RR as well as data and inverse data so for example if our address is 00 0 0 the multiplexor works out in such a way that we create an and operation so RR needs to be one and data needs to be 1 in order for A1 to get stored back into the result register now if we change the instruction to 001 for example that changes how the uh multiplexer is working and we end up with an exclusive nor operation 0 1 0 is a no operation 011 is an or complement data uh so it's essentially an orgate but data is inverse uh 100 is a load operation this just copies whatever's on data directly into the result result register 101 is an or compliment result register 110 is an or and then 111 is a store and that has to do with our right pin down here on the bottom right this is a simple nand gate it's taking an input from the store operation and an input from the clock in order to illuminate our right pin to tell memory that it's time to store whatever is on the data bus now we also need to gate when uh the result register can be put back onto the data bus that's done with this and gate up top here now whenever we're doing a store operation we don't want the result register to change so we have this uh collection of inverters and nandate up top here so when the instruction is 111 we disable the clock going into the result register which prevents it from changing uh so all I did was take this logic diagram build it out into a dual-sided PCB that ended up as this and this is the PCB that we got from PCB way and I'm actually really happy with how it turned out uh I did try to stick to the concept of having traces go horizontally on one side and vertically on the other side and if we take a look at the back side you can see it is mostly U vertical traces and right down the center in between all of the tubes we have pretty much every signal that is traveling through this system uh and if this PCB looks a little funky uh you would be right there's a lot of interesting design choices that I made uh the first is that the trace widths are 1 mm uh the second is that the trace separation is 2.54 mm but the reason that I chose these is that that is the same Trace width and Trace separation that I can actually machine on our Mill so all of the pcbs for the ue1 are built with these same design restraints the only real difference is that this is a dual-sided PCB and all the ones that I machine are single cited but there's also one more glaring change that makes this look a lot different than most other pcbs out there and that is that it is missing a solder mask and a silk screen you just have the bare fiberglass and then the exposed traces covered with hot air solder leveling but I just absolutely love the way that it turned out it's really reminiscent of uh pcbs from the 1950s like you would see on say something like the Bendix g15 but no matter what we do a PCB is going to look a little strange when there's no components on it so let's break out the soldering iron and fully populate this PCB and solder it up there we go all soldered up and man it came out looking real good this looks super cool uh but I did actually have a mistake that I noticed not too long ago actually so I had to make a little bit of a bodge um the and gate that I built for the right pin I had it gated by RR for some reason that was a design fault from early on so all I had to do was uh slice a trace and then uh Hotwire one of the inputs to that and gate uh directly to VCC uh other than that though man I I just love the way that this turned out and uh I love the way that these uh four switches in this push button here have been uh just kind of sitting on top and look really great now all of the tubes you'll notice are in groups of four that means that the filaments are powered off of 24 volts and actually this is very low voltage just like the ue1 I'm using plus 24 volts for my B+ and - 12 volts for uh biasing that's it there is no high voltage anywhere on here uh but it is kind of pointless if it doesn't actually work we're trying to build kinetic art here so let's try to get some power into this all right here we go uh hopefully we see all the tubes start to glow and then we see something come up on the VF D here if I got something wrong the vfd might pop or n none of the tubes May glow so let's hope I didn't get anything wrong uh here we go flipping the switch uh the vfd is Illuminating something that's not terrible um the filament isn't burning bright so that's actually good the tubes are warming up it looks like I can see a couple of them definitely look like uh the filaments are glowing on them all right it seems to kind of have uh stabilized into a position here let's flip a switch and see if something changes uh multiple things have changed that's interesting okay those all three seem to be doing something that's our data that's our clock uh so let's try to load something into uh the result register one 0 0 we'll put a one on the data bus uh and then we'll hit the clock and it didn't load into the result register that's not great my clock doesn't seem to be doing anything that's not right uh so all right I definitely got something wrong wrong here uh it's going to take a little more troubleshooting to figure this out okay I found at least one big glaring problem the clock just didn't seem to be working right so I started tracing it backwards and got all the way up to this uh tube right here this is the nand gate that feeds the uh clock over to the result register and uh right here is supposed to be a little pull-up resistor that uh I forgot to solder in so I'll put that little pull-up resistor in there and hopefully the whole thing Springs back to life all right I think I've got it figured out there were two additional problems uh this vacuum tube was uh no good had terrible emission and if we look at the getter on the top not a surprise so this one's going in the garbage but it has been replaced uh also my clock here was quite bouncy uh and I didn't put any debouncing in here I also didn't put any compensating capacitors on the grids uh and I really should have uh so I did put a compensating capacitor on the grid of this nand gate right here and that seems to have solved the bounciness issue so I think we're actually properly working right now um we can do a load operation which is 1 0 0 and then if we set our data to one uh this should tell it to load a one into the result register now the vfds here the one on the far left is the result register the one right next to it is the output of the logic unit so the logic unit is always doing the math the result register just stores that whenever we hit the clock so you can see that uh the logic unit is telling the result register to load whatever the data bus is because if I turn this switch off the logic unit goes low if turn it on the logic unit goes high and now if I hit the clock the result register has stored our one that's pretty cool now one of my favorite operations is uh 1 01 this is an or with the complement of the result register so the data bus which is currently zero is being ored with the result register's inverse output so right now the result register storing a one the inverse of that output is a zero 0 or with 0 is is zero and if we hit the clock we store a zero but now the result register is storing a zero the inverse of that is one one ored with zero is one so if we hit the clock again we get a one over here we've essentially created a toggle flip-flop through an extremely convoluted manner so we can just toggle back and forth how cool is that that's really neat uh so this actually seems to be working completely perfectly that's awesome however it is a little unwieldy so let's build a quick temporary base for it I'll measure out a chunk of wood and then slice it up with the radial arms saw then I'll punch some holes through it in the corners and thread in some standoffs the wood is soft enough that the standoffs actually cut their own threads and tighten down pretty well uh then we'll screw the PCB down onto the standoff so it's nice and rigid and next I'll slice up a thin piece of hardwood on the table saw I'll punch some holes in it and finally screw it to the top of the base plate we just built then we'll uh punch three more holes into this piece and that is to make way for power terminals ultimately I'm not sure how I want to power this thing whether by battery or by meanwell supplies or something like that but for the short term this at least gives me some nice banana plug Jacks so that I can experiment with it and play around with it a little more uh without having to worry about shorting anything out all right we got a little wooden base made up and it's nothing fancy it doesn't really look all that great but it did give me three Barrel Jacks that I can put Power into which is a little less janky than trying to get it directly onto the pin headers down here uh but I think this thing is fully working so let's actually do some pretty difficult work on it uh we'll do a binary addition so binary addition you can do with just what's called a half adder you have operand a operand b and you get a sum and a carry out so if we do 1 + 1 that equals 2 but in binary that is 1 Z so the sum is going to be zero and the carry is going to be one so we'll start with a one operation this is a load operation we're going to load one into it so we're loading operand a into the result register and we should see that light come on and it did that's excellent news uh and then we're going to do an exor operation so an exclusive nor operation is 001 and we're we're going to uh do an exclusive nor with operand a which is in the result register and operand B which is the data bus so we've got that set to one so we'll go ahead and hit the clock nothing changes that puts a one into the result register and now we need to invert it because uh operand a operand b need to go through an exclusive or but all we have is exclusive nor so in order to invert it I'm going to run an or complement with the result register so a one 1 and I'm going to turn the data off uh and so this will invert whatever is in the result register and store it back in the result register and uh yeah I did that the result register is now storing a zero so we want to uh send that out to memory so we're going to do a uh 111 operation here when I push this button we should see this light come on that is the right light that's telling memory to store whatever is on the data bus and what is on the data bus is a zero so we just stored a zero in memory that is our sum that's what we were expecting so let's now get the carry and so we're going to do a one0 0 and load in a one that should put a one into result register so we just stored operand a back into the result register then we're going to do an and operation that's 0 0 0 and we're going to leave our data at one and so we're going to and one and one the result should be one and our result register is still holding A1 that is correct so we'll go ahead and store that into memory with a 111 operation that light came on interestingly all seven lights of our vfd are on which is good news that just told memory to store our carry into memory somewhere and we just did 1 + 1 equal 2 seems very tedious to do it with uh switches and a push button but if you imagine that happening at say 1 khz or 100 khz or 1 MHz you can actually do something pretty useful with such a simple design well there we have it is it a full-fledged computer no uh but I think it's a pretty excellent trainer on the type of architecture that the ue1 is they're both one bit they both have logic units in them they both have an accumulating result register that does uh operations on the value that's in the result register and the value that's on the data bus so that kind of core concept of how you do Computing on the ue1 is represented here on this little miniature handheld version and I think this is going to be excellent at events people can pick it up get hands on wrap their head around how to do basic operations and then when they see this thing chugging along with the paper tape spitting out stuff they can really kind of start to grasp what exactly is going on with this Beast of vacuum tubes and we did did it all in just 24 tubes so I think this thing turned out awesome now the wooden base is just a temporary thing I slapped together in 30 minutes to make it a little easier to handle and move around but uh ultimately I need to make something a lot prettier and I need to figure out how best to power it I couldn't come to a decision on how to do that in this episode I don't know I'll I'll come up with something that looks pretty will stain the wood make it look real nice and so that way at the next event somebody can pick it up get hands on and wrap their head around exactly what's going on with the ue1 so uh I want to thank PCB way so much for sending me these boards uh hopefully you guys saw enough close-ups of them and saw them in action so you can make an informed decision yourself about the quality that PCB way can produce uh and well most importantly I want to thank you guys so much for watching and I hope to see you in the next episode
Info
Channel: Usagi Electric
Views: 90,136
Rating: undefined out of 5
Keywords:
Id: s7nx-pMQ6tM
Channel Id: undefined
Length: 22min 21sec (1341 seconds)
Published: Sun Dec 03 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.