How the 8086 processor handles power and clock internally
righto.com
righto.com
The 8086 was the first CPU I did assembly-level coding on as a kid back in 1989. This was a full 11 years after its 1978 introduction, but PCs were really expensive back then. This was the time when 8086, 80286 and 80386 systems were all sold in parallel, at wildly different price points. The 80486 was just being introduced, too.
It's just fascinating to see what I then imagined as an immense, hyper-complex machine being reduced to a grid of transistors that sort of fit, individually visible on my 4k screen.
Now on a chip the traces are so thin that resistance is significant and can not be ignored. The trace can be modeled as a distributed or lumped RC circuit. A consequence is that the delay is a quadratic function of its length (doubling the length of the wire quadruples its delay). It becomes worthwhile to add repeaters. I wonder if these show up in 8086..
On the other hand, "For on-chip wires with a maximum length of 1 cm, one should only worry about transmission line effects when tr < 150 psec"
http://bwrcs.eecs.berkeley.edu/Classes/icdesign/ee141_f01/No...
Essentially as chip features got smaller wire resistance didn't scale the same as gate capacitance (partly it's edge effects) and our tools needed to change as RC delays started to dominate
And the input clock was 4.77 MHz because that is one third of the NTSC clock, 14.318 MHz. The clock is further divided by 4 and that's the input of the 8253 programmable timer.
And a clock frequency related to NTSC was used here, because it allowed the use of the cheapest quartz crystal in mass production, and also allowing systems to use same 14.318 MHz clock to drive a potential video display.
(To be clear, I'm not disagreeing with you that this works.)
[1] page B-18 in http://www.bitsavers.org/components/intel/_dataBooks/1981_iA...
Ah, I see in the older datasheet it says TCLCH = 2/3 * TCLCL - 15. But I'm pretty sure they mean TCLCH = 2/3 * TCLCLmin - 15 which gives the 118 ns it has in the newer datasheet.
Here's a question for anyone who might have an interest to help me understand (at a high summary level) --
Steady DC power is being provided to the chip, and the internal clock is going at 5 Mhz. What are the input and output signals like? Are they on the order of a few kHz and in a long stream of data (in a short burst?) that the CPU then takes and works on until the "delivery" burst? Is this the FSB? How many of the 45 wires coming off the CPU are for the input/output signals, or what are the rest of them for?
Thanks!
The external pins are switching at the 5 MHz clock speed, and there are four clock periods for one memory bus cycle. The address pins send out the address the first cycle, wait a cycle for memory to respond, and read or write the data the third cycle.
The CPU and the memory bus are working at the same clock speed. (Although somewhat decoupled because the 8086 had prefetching.) I think you're going the wrong direction with kHz I/O and delivery bursts.
I've simplified things a bit. The 8086 User's Manual [2] explains all the signals in great detail if you really want to know.
[1] I see that you carefully counted the 45 wires off the die. The power and two grounds each use two bond wires in parallel for more current. There are two wires to bias the substrate. So that's the "extra" 5 wires.
[2] http://www.bitsavers.org/components/intel/_dataBooks/1981_iA...
It is mainly because of lack of power saving and EMC requirements plus no clock skew problems at such low frequencies.
Nowadays you need a team of 50 people just for the clock tree.
https://en.m.wikipedia.org/wiki/Rubylith
Here are some historic photos with master prints of CPU
Circuit boards were also designed in this way.
https://www.eetimes.com/how-it-was-pcb-layout-from-rubylith-...
On the power distribution did you notice any bypassing? There are a number of ways to do it now. I have no idea how they did it, if at all, in the 70s.
Also, did you notice any trim or anything on the clock driver so they could match phase of clock and not clock?
There's no clock trimming either. The clock circuitry ensures that there is a gap between the two phases, but there's no adjustment. But at 10 MHz, the clock is not too sensitive.
I think the book at cmosvlsi.com is pretty good for an introduction to the realities of modern digital IC design.
For more information on the topic of this thread in particular see slides 17-19 in this deck. I was asking if the cap on the far right of slide 17 existed in this design. http://pages.hmc.edu/harris/cmosvlsi/4e/lect/lect21.pdf
On the trim: When I looked at the two phase timing figure provided I noticed if the bottom path through the clock driver was slower than the top path, due to manufacturing tolerance, then that could cause skew (see slide 24 in the deck I pointed to) between the phases which might cause phase 1 and phase 2 to get too close, or even overlap. The clock driver circuit looked pretty regular in the layout so I was guessing they might have redundant parallel drivers that could be enabled or disabled by the ROM bits which could change the relative strengths of the two paths, after manufacture. This would allow them to recover the part and improve yield. But I guess edge rates and periods were slow enough then that this was not a concern and just relative sizing was enough.
And contrary to popular beliefs, it's impossible to remove it, no matter how many bypass capacitors or how much buried capacitance exists on the circuit board. In a complex chip like FPGA, PDN is critical. The author suggested that the best thing the board designer can do is a workaround: using bypass capacitors of multiple values to "tune" the PDN - this was done as a rule-of-thumb in the old days, and today it's often seen as a bad practice as it creates multiple uncontrolled resonate and anti-resonate frequency spikes when capacitors are combined with parasitic inductance (similar to the case of the 100 MHz peak, but at board level), so at some range of frequencies, impedance is actually significantly increased, which is in conflict of the goal of decreasing PDN impedance at all frequencies. But in the case proposed by the authors, it's done in a controlled manner - the PDN impedance is intentionally increased by carefully creating a flat, slightly higher impedance region around 100 MHz to dampen unwanted oscillation (with simulations and measurements) when it's inadvertently excited.
Also, sometimes changing the timings or operating frequencies is required, so the impedance peak of the chip PDN is not excited, even when it means the end-user must redesign firmware, microcode, or HDL code.
The outputs from the microcode go into clocked latches to the left of the array.
The high-level motivation is that you want the microcode ROM to be as dense as possible, so you want to minimize the number of different signals going in there. It is constructed with just the input lines, transistors (or gaps), ground, and the output lines, so it is about as dense as possible. Even so, it takes up a large chunk of the 8086 die.
A typical crystal oscillator has a drive level of less than one miliwatt, 3 orders of magnitude lower.
But in principle, yes, I don't see why it's impossible.
The microcontroller was an Atmel ATmega328P I extracted from an Arduino board, I used the chip as an external debugger and monitor. The first function I implemented was EEPROM reprogramming via a programming socket, the code was working without any sign of issue for two weeks, working as intended. I could burn a program to the ROM, plug the ROM in the 8-bit computer and execute instructions. Later I attempted to plug the microcontroller into the system bus of my 8-bit computer to add in-system reprogramming and memory debugging capabilities, so I don't have to plug and unplug the ROM every time I need to reprogram it. I planned to implemenet it by taking over the system bus of via DMA, so the running CPU would handover its the control to me. However, no matter how I changed the code, there were always some strange bugs. RAM reading and writing never worked reliably, there's random memory corruption, and the CPU was never able to continue executing the program correctly after the DMA had finished. It seems there were always some forms of bus contention bugs in the microcontroller, as if the GPIOs pins were not properly tristated/isolated before the beginning of a DMA cycle. But I was unable to find it at all in the code.
Eventually I realized the pin 7, Vcc, was not connected! I miswired the power to an I/O pin. From the beginning, the ATmega328P was operating without the main digital power supply and was sourcing all the power via the ESD diode on the I/O pin, and/or possibly the analog power supply AVCC. I was surprised that it was able to work for two weeks. On second thought, during EEPROM programming, the connection to the chip was direct, and tristate was mostly not used, the MCU had no problem driving it. But in memory debugging, the bus is long and the entire output was tristating on and off during a DMA cycle, the lack of a proper Vcc supply probably made the I/O driver to malfunction, especially the input/output selection, creating unpredictable output state.
Later on in another unrelated project, I encountered another problem due to an incorrect PCB footprint pinout. The 4-pin SMD crystal was connected to the wrong pins - only one side was connected to the chip. there's basically no system crystal at all. But the parasitic capacitance between the crystal pins was sufficient to start a weak oscillation (on the oscilloscope you can see a clock waveform with a very low amplitude, it's not at the proper logic level, as if it's an analog RF circuit), the chip was even able to start its 125 MHz PLL! But the logic was not fully functional until I dead-bugged soldering the crystal the correct way.
Lesson learned: Always double check. Just because the chip has power, doesn't mean the chip is receiving power correctly. Just because the chip has a clock output, doesn't mean the chip is receiving the clock correctly. And finally, if there's an external power-on reset, just because the chip was initialized after you apply power, doesn't mean the power-on reset circuit is functional.
[1] https://en.wikichip.org/wiki/acorn/microarchitectures/arm1