http://www.righto.com/2023/01/counting-transistors-in-8086-processor.html Ken Shirriff's blog Computer history, restoring vintage computers, IC reverse engineering, and whatever Counting the transistors in the 8086 processor: it's harder than you might think How many transistors are in Intel's 8086 processor? This seems like a straightforward question, but it doesn't have a straightforward answer. Most sources say that this processor has 29,000 transistors.1 However, I have traced out every transistor from die photos and my count is 19,618. What accounts for the 9382 missing transistors? The explanation is that when manufacturers report the transistor count of chips, typically often report "potential" transistors. Chips that include a ROM will have different numbers of transistors depending on the values stored in the ROM. Since marketing doesn't want to publish varying numbers depending on the number of 1 bits and 0 bits, they often count ROM sites: places that could have transistors, but might not. A PLA (Programmable Logic Array) has similar issues; the transistor count depends on the desired logic functions. What are these potential transistor sites? ROMs are typically constructed as a grid of cells, with a transistor at a cell for a 1 bit, and no transistor for a 0 bit.2 In the 8086, transistors are created or not through the pattern of silicon doping. The photo below shows a closeup of the silicon layer for part of the 8086's microcode ROM. The empty regions are undoped silicon, while the other regions are doped silicon. Transistor gates are formed where vertical polysilicon lines (removed for the photo) passed over the doped silicon. Thus, depending on the data encoded into the ROM during manufacturing, the number of transistors varies. A closeup of part of the microcode ROM. The dark circles indicate vias between the silicon and the metal on top. A closeup of part of the microcode ROM. The dark circles indicate vias between the silicon and the metal on top. The diagram below provides more detail, showing the microcode ROM up close. Green T's indicate transistors, while red X's indicate positions with no transistor. As you can see, the potential transistor positions form a grid, but only some of the positions are occupied by transistors. The common method for counting transistors counts all the potential positions (18 below) rather than the actual transistors that are implemented (12 below). An extreme closeup of the microcode ROM. Green T's indicate transistors, while red X's indicate positions with no transistor. An extreme closeup of the microcode ROM. Green T's indicate transistors, while red X's indicate positions with no transistor. I found an Intel history that confirmed that the 8086 transistor count includes potential sites, saying "This is 29,000 transistors if all ROM and PLA available placement sites are counted." That paper gives the approximate number of (physical) transistors in the 8086 as 20,000. This number is close to my count of 19,618. To get a transistor count that includes empty sites, I counted the number of transistor sites in the various ROMs and PLAs in the 8086 chip. This is harder than you might expect because the smaller ROMs, such as the constant ROM, have some layout optimization. The photo below shows a closeup of the constant ROM. It is essentially a grid, but has been "squeezed" slightly to optimize its layout, making it slightly irregular. I'm counting its "potential" transistors, but one could argue that it shouldn't be counted because filling in these transistors might run into problems. Closeup of the constant ROM showing the silicon and polysilicon. Closeup of the constant ROM showing the silicon and polysilicon. The following table breaks down the ROM and PLA counts by subcomponent. I found a total of approximately 9659 unfilled transistor vacancies. If you add those to my transistor count, it works out to 29,277 transistors. Component Transistor sites Transistors Vacancies Microcode 13904 6210 7694 Group Decode ROM 1254 603 651 Translation ROM 1050 431 619 Register PLAs 465 182 283 ALU PLA 354 170 184 Constant ROM 203 109 94 Condition PLA 160 74 86 Segment PLA 90 42 48 The image below shows these ROMs and PLAs on the die and how much the vacancies increase the transistor count. Not surprisingly, the large microcode ROM and its decoding PLA are responsible for most of the vacancies. The 8086 die with transistor vacancy counts and how much they contribute to the final transistor count. (Click this image or any other for a larger version.) The 8086 die with transistor vacancy counts and how much they contribute to the final transistor count. (Click this image or any other for a larger version.) Potential exclusions So are my counts of 19,618 transistors and 29,277 transistor sites correct? There are some subtleties that could lower this count slightly. First, the output pins use large, high-current transistors. Each output transistor is constructed from more than a dozen transistors wired in parallel. Should this be counted as a dozen transistors or a single transistor? I'm counting the component transistors. An output pad with a bond wire attached. Driver transistors next to the pad are constructed from multiple transistors in parallel. An output pad with a bond wire attached. Driver transistors next to the pad are constructed from multiple transistors in parallel. The 8086 has about 43 transistors wired as diodes for various purposes. Some are input protection diodes, while others are used in the charge pump for the substrate bias generator. Should these be excluded from the transistor count? Physically they are transistors but functionally they aren't. The 8086 is built with NMOS logic which builds gates out of active "enhancement" transistors as well as "depletion" transistors which basically act as pull-up resistors. I count 2689 depletion-mode transistors, but you could exclude them from the count as not "real" transistors. Conclusions The number of transistors in a chip is harder to define than you might expect. The 8086 is commonly described as having 29,000 transistors when including empty sites in ROMs and PLAs that potentially could have a transistor. The published number of physical transistors in the 8086 is "approximately 20,000". From my counts, the 8086 has 19,618 physical transistors and 29,277 transistors when including empty sites. Given the potential uncertainties in counting, it's not surprising that Intel rounded the numbers to the nearest thousand. The practice of counting empty transistor sites may seem like an exaggeration of the real transistor count, but there are some good reasons to count this way. Including empty sites gives a better measure of the size and complexity of the chip, since these sites take up area whether or not they are used. This number also lets one count the number of transistors before the microcode is written, and it is also stable as the microcode changes. But when looking at transistor counts, it's good to know exactly what is getting counted. I plan to continue reverse-engineering the 8086 die so follow me on Twitter @kenshirriff or RSS for updates. I've also started experimenting with Mastodon recently as @[email protected]. I discussed the transistor count in the 6502 processor here. Notes and references 1. For example, The 8086 Family Users Manual says on page A-210: "The central processor for the iSBC 86/12 board is Intel's 8086, a powerful 16-bit H-MOS device. The 225 sq. mil chip contains 29,000 transistors and has a clock rate of 5MHz." - 2. ROMs can also be constructed the other way around, with a transistor indicating a 0. It's essentially an arbitrary decision, depending on whether the output buffer inverts the bit or not. Other ROM technologies may have transistors at all the sites but only connect the desired ones. - # # Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest Labels: 8086, electronics 3 comments: [bla] [146] The Editor said... We (Inmos) tool pretty much the same approach when we counted the transistors in the transputers (T414, T800, ...). When I saw the article went through potential v. actual sites, high drive transistors implemented as multiple transistors, logical ROM bits v. actual ROM bits (the microcode ROM used rows split into two. If all the bits in one half of the row were identical then a decider truck allowed the half row to be omitted, saving space. I think this saved about 30% of ROM area. I can't remember what we used when quoting transistor count. January 14, 2023 at 11:59 AM [icon_delet] [blo] Dogzilla said... Did you ever work in Colorado Springs? Randy Lea January 14, 2023 at 1:31 PM [icon_delet] [bla] [146] The Editor said... No. Bristol based. January 14, 2023 at 2:39 PM [icon_delet] Post a Comment Older Post Home Get new posts by email: [ ] Subscribe Contact About Ken Shirriff Mastodon Popular Posts * [ANbyha3qC2] Inside the 8086 processor's instruction prefetch circuitry * [ANbyha3jIq] Apple iPhone charger teardown: quality in a tiny expensive package * [ANbyha0L73] Reverse-engineering an airspeed/Mach indicator from 1977 * [ANbyha2YKJ] The 8086 processor's microcode pipeline from die analysis * [ANbyha3HlF] Counting the transistors in the 8086 processor: it's harder than you might think * [ANbyha3z6F] A dozen USB chargers in the lab: Apple is very good, but not quite the best * [ANbyha11l4] How the 8086 processor's microcode engine works * [ANbyha3UXi] A Multi-Protocol Infrared Remote Library for the Arduino Search This Blog [ ] [Search] [INS::INS] Labels 6502 8008 8085 8086 8087 alto analog Apollo apple arc arduino arm beaglebone bitcoin c# calculator chips css dx7 electronics f# fpga fractals genome haskell html5 ibm ibm1401 intel ipv6 ir java javascript math oscilloscope photo power supply random reverse-engineering sheevaplug snark space spanish synth teardown theory unicode Z-80 Blog Archive * V 2023 (4) + V January (4) o Counting the transistors in the 8086 processor: it... o Reverse-engineering an airspeed/Mach indicator fro... o The 8086 processor's microcode pipeline from die a... o Inside the 8086 processor's instruction prefetch c... * > 2022 (18) + > November (3) + > August (1) + > July (1) + > June (1) + > May (1) + > April (4) + > March (2) + > February (3) + > January (2) * > 2021 (26) + > December (4) + > November (2) + > September (1) + > August (1) + > July (2) + > June (2) + > May (1) + > April (2) + > March (4) + > February (4) + > January (3) * > 2020 (33) + > December (2) + > November (3) + > October (2) + > September (4) + > August (5) + > July (2) + > June (3) + > May (4) + > April (2) + > March (5) + > January (1) * > 2019 (18) + > November (3) + > October (2) + > September (3) + > August (1) + > July (4) + > April (2) + > February (1) + > January (2) * > 2018 (17) + > December (1) + > September (4) + > August (1) + > June (1) + > May (1) + > April (1) + > March (3) + > February (1) + > January (4) * > 2017 (21) + > December (5) + > November (2) + > October (3) + > August (1) + > July (2) + > June (2) + > April (2) + > March (2) + > February (1) + > January (1) * > 2016 (34) + > December (2) + > October (5) + > September (8) + > August (2) + > July (3) + > June (4) + > May (1) + > April (1) + > March (1) + > February (4) + > January (3) * > 2015 (12) + > December (2) + > November (1) + > October (3) + > August (1) + > May (2) + > March (2) + > February (1) * > 2014 (13) + > December (1) + > October (1) + > September (3) + > May (2) + > March (1) + > February (5) * > 2013 (24) + > November (2) + > September (4) + > August (4) + > July (4) + > June (2) + > April (1) + > March (2) + > February (2) + > January (3) * > 2012 (10) + > December (1) + > November (5) + > October (1) + > May (1) + > March (1) + > February (1) * > 2011 (11) + > December (2) + > July (2) + > May (2) + > April (1) + > March (1) + > February (3) * > 2010 (22) + > December (2) + > November (4) + > October (3) + > August (1) + > June (1) + > May (2) + > April (3) + > March (4) + > January (2) * > 2009 (22) + > December (2) + > November (5) + > September (1) + > August (3) + > July (1) + > June (3) + > April (1) + > March (3) + > February (2) + > January (1) * > 2008 (27) + > July (3) + > June (1) + > May (3) + > April (4) + > March (10) + > February (6) Powered by Blogger.