Countdown

I think I am ready to declare readiness for a final countdown. For the last few weeks I have been hunting for bugs in my wiring and running all sorts of unit tests. I have completed the ALU board wiring, and I think the machine is very close to successfully running some kind of useful computation, i.e. it is ready for its first real boot. I will run the attempt this weekend, if time allows. But first, a handful of recent adventures:

I have found and replaced several dozen incorrectly wrapped wires. By this I mean connecting wrong pins, not the quality of my wire wrapping. Some of them were really nasty and could be the reason for some chips appearing (or in fact being) broken. With so many wires wrapped, it just had to happen.

I have fixed several schematic mistakes. I was creating the schematics from my simulator model, and I made a couple of mistakes here and there (mostly swapped signals). This, in consequence, also added to re-wrapping effort.

I have replaced several broken chips. Two LS244s, one LS139, and one LS182. The last one was particularly painful because it is a carry look-ahead chip for my LS181-based ALU, and it is really hard to find these g. days. Fortunately, I have found a supplier and my three (just in case) new LS182 chips are on their way. I think I bought out entire stock of this IC currently available in Poland. For now, my ALU utilizes a workaround with four LS181 chips wired in a “ripple setup”, with carry output of chip N connected to carry input of chip N+1. It’s dreadfully slow (propagation delay is 4 times what it could be) but I have to live with it until my carry look-ahead chips arrive.

I hand crafted a connector to my ALU board and solved a nasty noise issue. This is the part I am particularly unhappy with. The wire-wrap board that I used for core CPU allowed me to solder in a 64-pin male connector, and it had traces to wire wrap posts corresponding to the connector pins. The board I used for ALU does not have such nice feature. It only has holes to solder in a connector, with no corresponding wire wrap posts. So I needed either a 64-pin male connector with wire wrap leads (nowhere to be found) or think of something else. Having no better idea, I used 20-pin (10×2) pin strips/blocks with long pins (in fact, they are even longer than regular wire wrap posts). I had to break one of these to have 64-pins in two rows of 32, then I glued everything to the board and progressed with the wiring. In a hope that it would be enough just to plug the female IDC connector onto the wire wrap pin strip posts, I ran a couple of tests in that setup. Unfortunately, the connection was not reliable and resulted in intermittent noise occurring here and there on my boards. I spent more than two weeks hunting for this bug with a scope before I realized that when I disconnect the ALU board, the problem disappeared. To my misfortune, the same happened when I removed some of the chips. For example, removing SRAM chips seemed to help, too. However, these chips were not the primary source of trouble. They only acted as noise amplifiers. The problem with noise is that when it appears somewhere in the circuit, if affects multiple chips in the entire setup. You remove one chip and the problem seems to be gone, to pop up somewhere else in a while. Having realized that it is the faulty connection that causes noise, I took a regular right-angle 64-pin male connector and I wire-wrapped it to the board. It now hangs off my ALU board on 64 individually wrapped AWG30 kynar wires. Terrible (just look at the photo), but at least it works. Since then I haven’t encountered any noise problems whatsoever and the CPU has been running smoothly.

I added some more capacitors. Primarily, 10uF tantalum caps wherever there is a power line entering any of my boards. This in fact was one of my attempts to resolve the noise issue from bad CPU-ALU connection, before I discovered that it was faulty. I thought there was not enough power to the boards or the power lines were too noisy. Even though it didn’t solve the problem I was trying to solve, it was not a bad thing to do, though and I think it improved my power and ground smoothness.

Apart from the above, I also have some new lessons learned, which I will definitely need to take into account building the production version on PCB:

Watch for fan-out limits. I have been to ignorant when it comes to electricity and signals. I assumed wrongly that things like fan-out, or noise do will never relate to my design. In fact, in several places in my design I am dangerously close to chips’ fan-out limits. This may cause the prototype to be unstable sometimes.

Drive signal lines correctly and terminate critical signals. I haven’t taken enough precautions when it comes to driving long signal lines, especially the entire backplane ribbon cable. Some of the signals are driven by individual ICs or by microcode ROMs directly. They seem to be really degraded when they reach their destinations. I should have driven all such lines using a LS244 (or LS245 whenever there’s bidirectional communication). Moreover, receiver boards should have a Schmitt trigger and termination resistors to cancel reflections (e.g. 180 ohm to VCC, and 390 ohm to GND). This would assure clean, stable and reliable signal levels at both ends.

The prototype in its final setup draws around 1.6 amps at 5 volts (8 watts). I am not sure yet at what maximal clock frequency it may run. I am testing with an 1.8 MHz generator, so the machine is clocked at 1/4 of this, roughly 450kHz. Precise answer will require a detailed timing analysis or trial-and-error determination.

Leave a Reply

  

  

  

Time limit is exhausted. Please reload the CAPTCHA.