Bus (computing): Difference between revisions

From Wikipedia
Jump to navigation Jump to search
imported>Langusto
m Reverted edits by 2601:CD:CD80:B00:3024:A24D:5321:C775 (talk) to last version by Kvng: nonconstructive edits
 
imported>Guy Harris
Implementation details: Get rid of stray newline.
 
Line 3: Line 3:
{{Use American English|date=March 2016}}
{{Use American English|date=March 2016}}
{{Use dmy dates|date=May 2020|cs1-dates=y}}
{{Use dmy dates|date=May 2020|cs1-dates=y}}
[[File:PCIExpress.jpg|250px|thumb|Four [[PCI Express]] bus card slots (from top to second from bottom: ×4, ×16, ×1 and ×16), compared to a 32-bit [[conventional PCI]] bus card slot (very bottom)]]
[[File:PCIExpress.jpg|250px|thumb|Four [[PCI Express]] bus card slots (from top to second from bottom: ×4, ×16, ×1 and ×16), compared to a 32-bit [[conventional PCI]] bus card slot (very bottom)]]


In [[computer architecture]], a '''bus''' (historically also called a '''data highway'''<ref name="Hollingdale_1958">{{cite conference |conference=Applications of Computers, University of Nottingham 15–19 September 1958 |title=Session 14. Data Processing |author-first=Stuart H. |author-last=Hollingdale |date=1958-09-19 |url=https://www.chilton-computing.org.uk/acl/literature/othermanuals/nottingham/p014.htm}}</ref> or '''databus''') is a communication system that transfers [[Data (computing)|data]] between components inside a [[computer]] or between computers.<ref>{{cite book |url=https://books.google.com/books?id=YVi8HVN-APwC&q=computer+buss+-sam&pg=PA27 |title=What Every Engineer Should Know about Data Communications |first=Carl |last=Clifton |publisher=CRC Press |date=September 19, 1986 |page=27 |isbn=9780824775667 |quote=The internal computer bus is a parallel transmission scheme; within the computer.... |url-status=live |archive-url=https://web.archive.org/web/20180117151300/https://books.google.com/books?id=YVi8HVN-APwC&lpg=PA27&dq=computer%20buss%20-sam&pg=PA27#v=onepage&q=computer%20buss%20-sam&f=false |archive-date=January 17, 2018}}</ref> It encompasses both [[Computer hardware|hardware]] (e.g., wires, [[optical fiber]]) and [[software]], including [[communication protocol]]s.<ref>{{cite web |url=https://www.pcmag.com/encyclopedia/term/39054/bus |title=bus Definition from PC Magazine Encyclopedia |publisher=pcmag.com |date=2014-05-29 |access-date=2014-06-21 |url-status=live |archive-url=https://web.archive.org/web/20150207204630/http://www.pcmag.com/encyclopedia/term/39054/bus |archive-date=2015-02-07}}</ref> At its core, a bus is a shared physical pathway, typically composed of wires, traces on a circuit board, or [[busbar]]s, that allows multiple devices to communicate. To prevent conflicts and ensure orderly data exchange, buses rely on a [[communication protocol]] to manage which device can transmit data at a given time.
In [[computer architecture]], a '''bus''' (historically also called a '''data highway'''<ref name="Hollingdale_1958">{{cite conference |conference=Applications of Computers, University of Nottingham 15–19 September 1958 |title=Session 14. Data Processing |author-first=Stuart H. |author-last=Hollingdale |date=1958-09-19 |url=https://www.chilton-computing.org.uk/acl/literature/othermanuals/nottingham/p014.htm}}</ref> or '''databus''') is a communication system that transfers [[Data (computing)|data]] between components inside a [[computer]] or between computers.<ref>{{cite book |url=https://books.google.com/books?id=YVi8HVN-APwC&q=computer+buss+-sam&pg=PA27 |title=What Every Engineer Should Know about Data Communications |first=Carl |last=Clifton |publisher=CRC Press |date=September 19, 1986 |page=27 |isbn=9780824775667 |quote=The internal computer bus is a parallel transmission scheme; within the computer.... |url-status=live |archive-url=https://web.archive.org/web/20180117151300/https://books.google.com/books?id=YVi8HVN-APwC&lpg=PA27&dq=computer%20buss%20-sam&pg=PA27#v=onepage&q=computer%20buss%20-sam&f=false |archive-date=January 17, 2018}}</ref> It encompasses both [[Computer hardware|hardware]] (e.g., wires, [[optical fiber]]) and [[software]], including [[communication protocol]]s.<ref>{{cite web |url=https://www.pcmag.com/encyclopedia/term/39054/bus |title=bus Definition from PC Magazine Encyclopedia |publisher=pcmag.com |date=2014-05-29 |access-date=2014-06-21 |url-status=live |archive-url=https://web.archive.org/web/20150207204630/http://www.pcmag.com/encyclopedia/term/39054/bus |archive-date=2015-02-07}}</ref> At its core, a bus is a shared physical pathway, typically composed of wires or traces on a circuit board, that allows multiple devices to communicate. To prevent conflicts and ensure orderly data exchange, buses rely on a communication protocol to manage which device can transmit data at a given time.


Buses are categorized based on their role, such as [[system bus]]es (also known as internal buses, internal data buses, or memory buses) connecting the [[Central processing unit|CPU]] and [[Computer memory|memory]]. [[Expansion bus]]es, also called [[peripheral bus]]es, extend the system to connect additional devices, including [[peripheral]]s. Examples of widely used buses include [[PCI Express]] (PCIe) for high-speed internal connections and [[Universal Serial Bus]] (USB) for connecting external devices.
Buses are categorized based on their role, such as [[system bus]]es (also known as internal buses, internal data buses, or memory buses) connecting the [[CPU]] and [[Computer memory|memory]]. [[Expansion bus]]es, also called [[peripheral bus]]es, extend the system to connect additional devices, including [[peripheral]]s. Examples of widely used buses include [[PCI Express]] (PCIe) for high-speed internal connections and [[Universal Serial Bus]] (USB) for connecting external devices.


Modern buses utilize both [[parallel communication|parallel]] and [[serial communication]], employing advanced encoding methods to maximize speed and efficiency. Features such as [[direct memory access]] (DMA) further enhance performance by allowing data transfers directly between devices and memory without requiring CPU intervention.
Modern buses utilize both [[parallel communication|parallel]] and [[serial communication]], employing advanced encoding methods to maximize speed and efficiency. Features such as [[direct memory access]] (DMA) further enhance performance by allowing data transfers directly between devices and memory without requiring CPU intervention.
Line 14: Line 13:
==Address bus==
==Address bus==
{{Unreferenced section|date=June 2023}}
{{Unreferenced section|date=June 2023}}
An ''address bus'' is a bus that is used to specify a [[physical address]]. When a [[central processing unit|processor]] or [[direct memory access|DMA]]-enabled device needs to read or write to a memory location, it specifies that memory location on the address bus (the value to be read or written is sent on the data bus). The width of the address bus determines the amount of memory a system can address. For example, a system with a ''32-bit'' address bus can address ''2<sup>32</sup>'' (4,294,967,296) memory locations. If each memory location holds one byte, the addressable memory space is about {{val|4|ul=GB}}.
An ''address bus'' is a bus that is used to specify a [[physical address]]. When a [[central processing unit|processor]] or [[direct memory access|DMA]]-enabled device needs to read or write to a memory location, it specifies that memory location on the address bus (the value to be read or written is sent on the data bus).<ref>{{Cite book |last=Gustavson |first=David |url=https://www.slac.stanford.edu/pubs/slacpubs/3250/slac-pub-3326.pdf |title=Computer Buses: A Tutorial |date=April 1984}}</ref> The width of the address bus determines the amount of memory a system can transfer simultaneously.<ref>{{Cite web |date=23 July 2025 |title=Difference Between System Bus and Address Bus |url=https://www.geeksforgeeks.org/computer-organization-architecture/difference-between-system-bus-and-address-bus/ |website=GeeksForGeeks}}</ref> For example, a system with a ''32-bit'' address bus can address ''2<sup>32</sup>'' (4,294,967,296) memory locations.<ref>{{Cite journal |date=2003-01-01 |title=Operating Systems |url=https://www.sciencedirect.com/science/chapter/referencework/abs/pii/B0122274105008516 |language=en-US |pages=169–191 |doi=10.1016/B0-12-227410-5/00851-6|url-access=subscription }}</ref> If each memory location holds one byte, the addressable memory space is about {{val|4|ul=GB}}.


=== Address multiplexing ===
=== Address multiplexing ===
Early processors used a wire for each bit of the address width. For example, a 16-bit address bus had 16 physical wires making up the bus. As the buses became wider and lengthier, this approach became expensive in terms of the number of chip pins and board traces. Beginning with the [[Mostek]] 4096 [[DRAM]], address multiplexing implemented with [[multiplexer]]s became common. In a multiplexed address scheme, the address is sent in two equal parts on alternate bus cycles. This halves the number of address bus signals required to connect to the memory. For example, a 32-bit address bus can be implemented by using 16 lines and sending the first half of the memory address, immediately followed by the second half memory address.
Early processors used a wire for each bit of the address width. For example, a 16-bit address bus had 16 physical wires making up the bus. As the buses became wider and longer, this approach became expensive in terms of the number of chip pins and board traces. Beginning with the [[Mostek]] 4096 [[DRAM]], address multiplexing implemented with [[multiplexer]]s became common.<ref>{{Cite web |title=Chip Hall of Fame: Mostek MK4096 4-Kilobit DRAM - IEEE Spectrum |url=https://spectrum.ieee.org/chip-hall-of-fame-mostek-mk4096-4kilobit-dram |access-date=2025-11-13 |website=spectrum.ieee.org |language=en}}</ref> In a multiplexed address scheme, the address is sent in two equal parts on alternate bus cycles. This halves the number of address bus signals required to connect to the memory. For example, a 32-bit address bus can be implemented by using 16 lines and sending the first half of the memory address, immediately followed by the second half of the memory address.


Typically two additional pins in the control bus{{snd}}row-address strobe (RAS) and column-address strobe (CAS){{snd}}are used to tell the DRAM whether the address bus is currently sending the first half of the memory address or the second half.
Typically, two additional pins in the control bus{{snd}}row-address strobe (RAS) and column-address strobe (CAS){{snd}}are used to tell the DRAM whether the address bus is currently sending the first half of the memory address or the second half.


===Implementation===
===Implementation===
Accessing an individual byte frequently requires reading or writing the full bus width (a [[Word (data type)|word]]) at once. In these instances the least significant bits of the address bus may not even be implemented - it is instead the responsibility of the controlling device to isolate the individual byte required from the complete word transmitted. This is the case, for instance, with the [[VESA Local Bus]] which lacks the two least significant bits, limiting this bus to [[Data structure alignment|aligned]] 32-bit transfers.
Accessing an individual byte frequently requires reading or writing the full bus width (a [[Word (data type)|word]]) at once. In these instances, the least significant bits of the address bus may not even be implemented - it is instead the responsibility of the controlling device to isolate the individual byte required from the complete word transmitted. This is the case, for instance, with the [[VESA Local Bus]], which lacks the two least significant bits, limiting this bus to [[Data structure alignment|aligned]] 32-bit transfers.


Historically, there were also some examples of computers that were only able to address words{{snd}}[[word machine]]s.
Historically, there were also some examples of computers that were only able to address words{{snd}}[[word machine]]s.
Line 35: Line 34:
The transition from parallel to serial buses was allowed by [[Moore's law]] which allowed for the incorporation of [[SerDes|serializer/deserializers]] in integrated circuits which are used in computers.<ref>{{cite book | url=https://books.google.com/books?id=aUCgNOpyUbgC&dq=parallel++serial++serdes+moore%27s+law&pg=PA275 | isbn=978-1-4020-7496-7 | title=The Boundary — Scan Handbook | date=30 June 2003 | publisher=Springer }}</ref>
The transition from parallel to serial buses was allowed by [[Moore's law]] which allowed for the incorporation of [[SerDes|serializer/deserializers]] in integrated circuits which are used in computers.<ref>{{cite book | url=https://books.google.com/books?id=aUCgNOpyUbgC&dq=parallel++serial++serdes+moore%27s+law&pg=PA275 | isbn=978-1-4020-7496-7 | title=The Boundary — Scan Handbook | date=30 June 2003 | publisher=Springer }}</ref>


[[computer network|Network]] connections such as [[Ethernet]] are not generally regarded as buses, although the difference is largely conceptual rather than practical. An attribute generally used to characterize a bus is that power is provided by the bus for the connected hardware. This emphasizes the [[busbar]] origins of bus architecture as supplying switched or distributed power. This excludes, as buses, schemes such as serial [[RS-232]], parallel [[Centronics]], [[IEEE 1284]] interfaces and Ethernet, since these devices also needed separate power supplies. [[Universal Serial Bus]] devices may use the bus supplied power, but often use a separate power source. This distinction is exemplified by a [[Plain old telephone service|telephone]] system with a connected [[modem]], where the [[RJ11]] connection and associated modulated signalling scheme is not considered a bus, and is analogous to an [[Ethernet]] connection. A phone line connection scheme is not considered to be a bus with respect to signals, but the [[telephone exchange|Central Office]] uses buses with [[cross-bar switch]]es for connections between phones.
[[computer network|Network]] connections such as [[Ethernet]] are not generally regarded as buses, although the difference is largely conceptual rather than practical. An attribute generally used to characterize a bus is that power is provided by the bus for the connected hardware. This emphasizes the [[busbar]] origins of bus architecture as supplying switched or distributed power. This excludes, as buses, schemes such as serial [[RS-232]], parallel [[Centronics]], [[IEEE 1284]] interfaces and Ethernet, since these devices also needed separate power supplies. [[Universal Serial Bus]] devices may use the bus-supplied power, but often use a separate power source. This distinction is exemplified by a [[Plain old telephone service|telephone]] system with a connected [[modem]], where the [[RJ11]] connection and associated modulated signalling scheme is not considered a bus, and is analogous to an [[Ethernet]] connection. A phone line connection scheme is not considered to be a bus with respect to signals, but the [[telephone exchange|Central Office]] uses buses with [[cross-bar switch]]es for connections between phones.


However, this distinction{{mdashb}}that power is provided by the bus{{mdashb}}is not the case in many [[avionics|avionic systems]], where data connections such as [[ARINC 429]], [[ARINC 629]], [[MIL-STD-1553B]] (STANAG 3838), and EFABus ([[STANAG 3910]]) are commonly referred to as ''data buses'' or, sometimes, ''databuses''. Such [[avionics#Aircraft networks|avionic data buses]] are usually characterized by having several [[Line-replaceable unit|Line Replaceable Items/Units]] (LRI/LRUs) connected to a common, shared [[Media (communication)|media]]. They may, as with ARINC 429, be [[Simplex communication|simplex]], i.e. have a single source LRI/LRU or, as with ARINC 629, MIL-STD-1553B, and STANAG 3910, be [[Duplex (telecommunications)|duplex]], allow all the connected LRI/LRUs to act, at different times ([[half duplex]]), as transmitters and receivers of data.<ref name="ASSC 2003">Avionic Systems Standardisation Committee, ''Guide to Digital Interface Standards For Military Avionic Applications'', ASSC/110/6/2, Issue 2, September 2003</ref>
However, this distinction{{mdashb}}that power is provided by the bus{{mdashb}}is not the case in many [[avionics|avionic systems]], where data connections such as [[ARINC 429]], [[ARINC 629]], [[MIL-STD-1553B]] (STANAG 3838), and EFABus ([[STANAG 3910]]) are commonly referred to as ''data buses'' or, sometimes, ''databuses''. Such [[avionics#Aircraft networks|avionic data buses]] are usually characterized by having several [[Line-replaceable unit|Line Replaceable Items/Units]] (LRI/LRUs) connected to a common, shared [[Media (communication)|media]]. They may, as with ARINC 429, be [[Simplex communication|simplex]], i.e., have a single source LRI/LRU or, as with ARINC 629, MIL-STD-1553B, and STANAG 3910, be [[Duplex (telecommunications)|duplex]], allowing all the connected LRI/LRUs to act, at different times ([[half duplex]]), as transmitters and receivers of data.<ref name="ASSC 2003">Avionic Systems Standardisation Committee, ''Guide to Digital Interface Standards For Military Avionic Applications'', ASSC/110/6/2, Issue 2, September 2003</ref>


The frequency or the speed of a bus is measured in Hz such as MHz and determines how many clock cycles there are per second; there can be one or more data transfers per clock cycle. If there is a single transfer per clock cycle it is known as [[Single Data Rate]] (SDR), and if there are two transfers per clock cycle it is known as [[Double Data Rate]] (DDR) although the use of signalling other than SDR is uncommon outside of RAM. An example of this is PCIe which uses SDR.<ref>{{cite book | url=https://books.google.com/books?id=M_TKDwAAQBAJ&dq=pcie+rate&pg=PA155 | isbn=978-0-7384-5812-0 | title=IBM z15 (8561) Technical Guide | date=13 July 2022 | publisher=IBM Redbooks }}</ref> Within each data transfer there can be multiple bits of data. This is described as the width of a bus which is the number of bits the bus can transfer per clock cycle and can be synonymous with the number of physical electrical conductors the bus has if each conductor transfers one bit at a time.<ref>{{cite book | url=https://books.google.com/books?id=hDwDEAAAQBAJ&dq=bus+width&pg=PA54 | isbn=978-1-000-11716-5 | title=Foundations of Computer Technology | date=25 October 2020 | publisher=CRC Press }}</ref><ref>{{cite book | url=https://books.google.com/books?id=j0wsBgAAQBAJ&dq=computer+bus+frequency&pg=PA39 | title=PC Systems, Installation and Maintenance | isbn=978-1-136-37442-5 | last1=Beales | first1=R. P. | date=11 August 2006 | publisher=Routledge }}</ref><ref>{{cite web | url=https://computer.howstuffworks.com/motherboard4.htm#:~:text=Bus%20speed%20usually%20refers%20to,dramatically%20affect%20a%20computer%27s%20performance | title=How Motherboards Work | date=20 July 2005 }}</ref> The data rate in bits per second can be obtained by multiplying the number of bits per clock cycle times the frequency times the number of transfers per clock cycle.<ref>{{cite book | url=https://books.google.com/books?id=6FnMBQAAQBAJ&q=Data+rate&pg=PA92 | title=Computer Busses | isbn=978-1-4200-4168-2 | last1=Buchanan | first1=Bill | date=25 April 2000 | publisher=CRC Press }}</ref><ref>{{cite book | url=https://books.google.com/books?id=vpnJDwAAQBAJ&q=Width | title=The Computer Engineering Handbook | isbn=978-1-4398-3316-2 | last1=Oklobdzija | first1=Vojin G. | date=5 July 2019 | publisher=CRC Press }}</ref> Alternatively a bus such as [[PCIe]] can use modulation or encoding such as [[PAM4]]<ref>{{Cite web |last=Robinson |first=Dan |date=2022-01-12 |title=Final PCIe 6.0 specs unleashed: 64 GTps link speed incoming... with products to follow in 2023 |url=https://www.theregister.com/2022/01/12/final_pcie_60_specs_released/ |website=www.theregister.com}}</ref><ref>{{cite web | url=https://www.anandtech.com/show/21335/full-draft-of-pcie-70-spec-available-512-gbs-over-pcie-x16-incoming | title=PCIe 7.0 Draft 0.5 Spec Available: 512 GB/S over PCIe x16 on Track for 2025 }}</ref><ref>{{cite web | url=https://arstechnica.com/gadgets/2022/01/pci-express-6-0-spec-is-finalized-doubling-bandwidth-for-ssds-gpus-and-more/ | title=PCIe 5.0 is just beginning to come to new PCS, but version 6.0 is already here | date=12 January 2022 }}</ref> which groups 2 bits into symbols which are then transferred instead of the bits themselves, and allows for an increase in data transfer speed without increasing the frequency of the bus. The effective or real data transfer speed/rate may be lower due to the use of encoding that also allows for error correction such as 128/130b (b for bit) encoding.<ref>{{cite web | url=https://www.xda-developers.com/pcie-6/ | title=PCIe 6.0: Everything you need to know about the upcoming standard | date=30 June 2024 }}</ref><ref>{{cite web | url=https://semiengineering.com/knowledge_centers/communications-io/off-chip-communications/pam-4-signaling/ | title=PAM-4 Signaling }}</ref><ref>{{cite book | url=https://books.google.com/books?id=M_TKDwAAQBAJ&dq=pcie+rate&pg=PA155 | isbn=978-0-7384-5812-0 | title=IBM z15 (8561) Technical Guide | date=13 July 2022 | publisher=IBM Redbooks }}</ref> The data transfer speed is also known as the bandwidth.<ref>{{cite book | url=https://books.google.com/books?id=eV1_LjW3pTkC&dq=agp+2133&pg=PA304 | isbn=978-0-7897-2745-9 | title=Upgrading and Repairing PCS | date=2003 | publisher=Que }}</ref><ref>{{cite web | url=https://www.anandtech.com/show/21335/full-draft-of-pcie-70-spec-available-512-gbs-over-pcie-x16-incoming | title=PCIe 7.0 Draft 0.5 Spec Available: 512 GB/S over PCIe x16 on Track for 2025 }}</ref>
The frequency or the speed of a bus is measured in Hz, such as MHz, and determines how many clock cycles there are per second; there can be one or more data transfers per clock cycle. If there is a single transfer per clock cycle, it is known as [[Single Data Rate]] (SDR), and if there are two transfers per clock cycle, it is known as [[Double Data Rate]] (DDR), although the use of signaling other than SDR is uncommon outside of RAM. An example of this is PCIe, which uses SDR.<ref name="IBM z15 8561 Technical Guide">{{cite book | url=https://books.google.com/books?id=M_TKDwAAQBAJ&dq=pcie+rate&pg=PA155 | isbn=978-0-7384-5812-0 | title=IBM z15 (8561) Technical Guide | date=13 July 2022 | publisher=IBM Redbooks }}</ref> Within each data transfer, there can be multiple bits of data. This is described as the width of a bus, which is the number of bits the bus can transfer per clock cycle and can be synonymous with the number of physical electrical conductors the bus has if each conductor transfers one bit at a time.<ref>{{cite book | url=https://books.google.com/books?id=hDwDEAAAQBAJ&dq=bus+width&pg=PA54 | isbn=978-1-000-11716-5 | title=Foundations of Computer Technology | date=25 October 2020 | publisher=CRC Press }}</ref><ref>{{cite book | url=https://books.google.com/books?id=j0wsBgAAQBAJ&dq=computer+bus+frequency&pg=PA39 | title=PC Systems, Installation and Maintenance | isbn=978-1-136-37442-5 | last1=Beales | first1=R. P. | date=11 August 2006 | publisher=Routledge }}</ref><ref>{{cite web | url=https://computer.howstuffworks.com/motherboard4.htm#:~:text=Bus%20speed%20usually%20refers%20to,dramatically%20affect%20a%20computer%27s%20performance | title=How Motherboards Work | date=20 July 2005 }}</ref> The data rate in bits per second can be obtained by multiplying the number of bits per clock cycle times the frequency times the number of transfers per clock cycle.<ref>{{cite book | url=https://books.google.com/books?id=6FnMBQAAQBAJ&q=Data+rate&pg=PA92 | title=Computer Busses | isbn=978-1-4200-4168-2 | last1=Buchanan | first1=Bill | date=25 April 2000 | publisher=CRC Press }}</ref><ref>{{cite book | url=https://books.google.com/books?id=vpnJDwAAQBAJ&q=Width | title=The Computer Engineering Handbook | isbn=978-1-4398-3316-2 | last1=Oklobdzija | first1=Vojin G. | date=5 July 2019 | publisher=CRC Press }}</ref> Alternatively a bus such as [[PCIe]] can use modulation or encoding such as [[PAM4]]<ref>{{Cite web |last=Robinson |first=Dan |date=2022-01-12 |title=Final PCIe 6.0 specs unleashed: 64 GTps link speed incoming... with products to follow in 2023 |url=https://www.theregister.com/2022/01/12/final_pcie_60_specs_released/ |website=www.theregister.com}}</ref><ref>{{cite web | url=https://www.anandtech.com/show/21335/full-draft-of-pcie-70-spec-available-512-gbs-over-pcie-x16-incoming | archive-url=https://web.archive.org/web/20240404125350/https://www.anandtech.com/show/21335/full-draft-of-pcie-70-spec-available-512-gbs-over-pcie-x16-incoming | url-status=dead | archive-date=4 April 2024 | title=PCIe 7.0 Draft 0.5 Spec Available: 512 GB/S over PCIe x16 on Track for 2025 }}</ref><ref>{{cite web | url=https://arstechnica.com/gadgets/2022/01/pci-express-6-0-spec-is-finalized-doubling-bandwidth-for-ssds-gpus-and-more/ | title=PCIe 5.0 is just beginning to come to new PCS, but version 6.0 is already here | date=12 January 2022 }}</ref> which groups 2 bits into symbols which are then transferred instead of the bits themselves, and allows for an increase in data transfer speed without increasing the frequency of the bus. The effective or real data transfer speed/rate may be lower due to the use of encoding that also allows for error correction, such as 128/130b (b for bit) encoding.<ref>{{cite web | url=https://www.xda-developers.com/pcie-6/ | title=PCIe 6.0: Everything you need to know about the upcoming standard | date=30 June 2024 }}</ref><ref>{{cite web | url=https://semiengineering.com/knowledge_centers/communications-io/off-chip-communications/pam-4-signaling/ | title=PAM-4 Signaling }}</ref><ref name="IBM z15 8561 Technical Guide"/> The data transfer speed is also known as the bandwidth.<ref>{{cite book | url=https://books.google.com/books?id=eV1_LjW3pTkC&dq=agp+2133&pg=PA304 | isbn=978-0-7897-2745-9 | title=Upgrading and Repairing PCS | date=2003 | publisher=Que }}</ref><ref>{{cite web | url=https://www.anandtech.com/show/21335/full-draft-of-pcie-70-spec-available-512-gbs-over-pcie-x16-incoming | archive-url=https://web.archive.org/web/20240404125350/https://www.anandtech.com/show/21335/full-draft-of-pcie-70-spec-available-512-gbs-over-pcie-x16-incoming | url-status=dead | archive-date=4 April 2024 | title=PCIe 7.0 Draft 0.5 Spec Available: 512 GB/S over PCIe x16 on Track for 2025 }}</ref>


=== Bus multiplexing ===
=== Bus multiplexing ===
Line 45: Line 44:


The simplest [[system bus]] has completely separate input data lines, output data lines, and address lines.
The simplest [[system bus]] has completely separate input data lines, output data lines, and address lines.
To reduce cost, most microcomputers have a bidirectional data bus, re-using the same wires for input and output at different times.<ref name="typewriter" >
To reduce cost, most microcomputers have a bidirectional data bus, reusing the same wires for input and output at different times.<ref name="typewriter" >
Don Lancaster.
Don Lancaster.
[https://www.tinaja.com/ebooks/tvtcb.pdf "TV Typewriter Cookbook"]. ([[TV Typewriter]]).
[https://www.tinaja.com/ebooks/tvtcb.pdf "TV Typewriter Cookbook"]. ([[TV Typewriter]]).
Line 52: Line 51:
</ref>
</ref>


Some processors use a dedicated wire for each bit of the address bus, data bus, and the control bus.
Some processors use a dedicated wire for each bit of the address bus, data bus, and control bus.
For example, the 64-pin [[STEbus]] is composed of 8 physical wires dedicated to the 8-bit data bus, 20 physical wires dedicated to the 20-bit address bus, 21 physical wires dedicated to the control bus, and 15 physical wires dedicated to various power buses.
For example, the 64-pin [[STEbus]] is composed of 8 physical wires dedicated to the 8-bit data bus, 20 physical wires dedicated to the 20-bit address bus, 21 physical wires dedicated to the control bus, and 15 physical wires dedicated to various power buses.


Line 61: Line 60:


==History==
==History==
Over time, several groups of people worked on various computer bus standards, including the IEEE Bus Architecture Standards Committee (BASC), the IEEE Superbus study group, the open microprocessor initiative (OMI), the open microsystems initiative (OMI), the Gang of Nine that developed [[Extended Industry Standard Architecture|EISA]], etc.{{Citation needed|date=January 2015}}
Over time, several groups of people worked on various computer bus standards, including the IEEE Bus Architecture Standards Committee (BASC), the IEEE Superbus study group, the open microprocessor initiative (OMI), the open microsystems initiative (OMI), the ''[[Gang of Nine]]'' that developed [[Extended Industry Standard Architecture|EISA]], etc.{{Citation needed|date=January 2015}}


===First generation===
===First generation===
Early [[computer]] buses were bundles of wire that attached [[computer memory]] and peripherals. Anecdotally termed the ''digit trunk'' in the early Australian [[CSIRAC]] computer,<ref>{{cite book|last1=McCann|first1=Doug|last2=Thorne|first2=Peter|title=The Last of The First, CSIRAC: Australias First Computer|pages=8–11, 13, 91|publisher=University of Melbourne Computing Science|year=2000|url=https://cis.unimelb.edu.au/about/csirac/last-of-the-first|isbn=0-7340-2024-4}}</ref> they were named after electrical power buses, or [[busbar]]s. Almost always, there was one bus for memory, and one or more separate buses for peripherals. These were accessed by separate instructions, with completely different timings and protocols.
Early [[computer]] buses were bundles of wire that attached [[computer memory]] and peripherals. Anecdotally termed the ''digit trunk'' in the early Australian [[CSIRAC]] computer,<ref>{{cite book|last1=McCann|first1=Doug|last2=Thorne|first2=Peter|title=The Last of The First, CSIRAC: Australias First Computer|pages=8–11, 13, 91|publisher=University of Melbourne Computing Science|year=2000|url=https://cis.unimelb.edu.au/about/csirac/last-of-the-first|isbn=0-7340-2024-4}}</ref> they were named after electrical power buses, or [[busbar]]s. Almost always, there was one bus for memory, and one or more separate buses for peripherals. These were accessed by separate instructions, with completely different timings and protocols.


One of the first complications was the use of [[interrupt]]s. Early computer programs performed [[I/O]] by [[Busy waiting|waiting in a loop]] for the peripheral to become ready. This was a waste of time for programs that had other tasks to do. Also, if the program attempted to perform those other tasks, it might take too long for the program to check again, resulting in loss of data. Engineers thus arranged for the peripherals to interrupt the CPU. The interrupts had to be prioritized, because the CPU can only execute code for one peripheral at a time, and some devices are more time-critical than others.
One of the first complications was the use of [[interrupt]]s. Early computer programs performed [[I/O]] by [[Busy waiting|waiting in a loop]] for the peripheral to become ready. This was a waste of time for programs that had other tasks to do. Also, if the program attempted to perform those other tasks, it might take too long for the program to check again, resulting in loss of data. Engineers thus arranged for the peripherals to interrupt the [[CPU]]. The interrupts had to be prioritized because the CPU can only execute code for one peripheral at a time, and some devices are more time-critical than others.


High-end systems introduced the idea of [[channel controller]]s, which were essentially small computers dedicated to handling the input and output of a given bus. [[IBM]] introduced these on the [[IBM 709]] in 1958, and they became a common feature of their platforms. Other high-performance vendors like [[Control Data Corporation]] implemented similar designs. Generally, the channel controllers would do their best to run all of the bus operations internally, moving data when the CPU was known to be busy elsewhere if possible, and only using interrupts when necessary. This greatly reduced CPU load, and provided better overall system performance.
High-end systems introduced the idea of [[channel controller]]s, which were essentially small computers dedicated to handling the input and output of a given bus. [[IBM]] introduced these on the [[IBM 709]] in 1958, and they became a common feature of their platforms. Other high-performance vendors like [[Control Data Corporation]] implemented similar designs. Generally, the channel controllers would do their best to run all of the bus operations internally, moving data when the CPU was known to be busy elsewhere if possible, and only using interrupts when necessary. This greatly reduced CPU load and provided better overall system performance.


[[Image:Computer system bus.svg|thumb|right|400px |Single [[system bus]] ]]
[[Image:Computer system bus.svg|thumb|right|400px |Single [[system bus]] ]]
To provide modularity, memory and I/O buses can be combined into a unified [[system bus]].<ref>{{cite book |title=The essentials of computer organization and architecture |author1=Linda Null |author2=Julia Lobur |publisher=Jones & Bartlett Learning |year=2006 |isbn=978-0-7637-3769-6 |edition=2nd |pages=33,179–181 |url=https://books.google.com/books?id=QGPHAl9GE-IC&pg=PA33 |url-status=live |archive-url=https://web.archive.org/web/20180117151308/https://books.google.com/books?id=QGPHAl9GE-IC&pg=PA33 |archive-date=2018-01-17 }}</ref> In this case, a single mechanical and electrical system can be used to connect together many of the system components, or in some cases, all of them.
To provide modularity, memory and I/O buses can be combined into a unified [[system bus]].<ref>{{cite book |title=The essentials of computer organization and architecture |author1=Linda Null |author2=Julia Lobur |publisher=Jones & Bartlett Learning |year=2006 |isbn=978-0-7637-3769-6 |edition=2nd |pages=33,179–181 |url=https://books.google.com/books?id=QGPHAl9GE-IC&pg=PA33 |url-status=live |archive-url=https://web.archive.org/web/20180117151308/https://books.google.com/books?id=QGPHAl9GE-IC&pg=PA33 |archive-date=2018-01-17 }}</ref> In this case, a single mechanical and electrical system can be used to connect together many of the system components, or in some cases, all of them.


Later computer programs began to share memory common to several CPUs. Access to this memory bus had to be prioritized, as well. The simple way to prioritize interrupts or bus access was with a [[Daisy chain (electrical engineering)|daisy chain]]. In this case signals will naturally flow through the bus in physical or logical order, eliminating the need for complex scheduling.
Later computer programs began to share memory common to several CPUs. Access to this memory bus had to be prioritized, as well. The simple way to prioritize interrupts or bus access was with a [[Daisy chain (electrical engineering)|daisy chain]]. In this case, signals will naturally flow through the bus in physical or logical order, eliminating the need for complex scheduling.


===Minis and micros===
===Minis and micros===
[[Digital Equipment Corporation]] (DEC) further reduced cost for mass-produced [[minicomputer]]s, and [[Memory-mapped I/O|mapped peripherals]] into the memory bus, so that the input and output devices appeared to be memory locations.  This was implemented in the [[Unibus]] of the [[PDP-11]] around 1969.<ref>{{cite conference |title= A New Architecture for Mini-Computers—The DEC PDP-11 |author1= C. Gordon Bell |author2= R. Cady |author3= H. McFarland |author4= B. Delagi |author5= J. O'Laughlin |author6= R. Noonan |author7= W. Wulf |conference= Spring Joint Computer Conference |pages= 657–675 |year= 1970 |url= http://research.microsoft.com/en-us/um/people/gbell/CGB%20Files/New%20Architecture%20PDP11%20SJCC%201970%20c.pdf |url-status= live |archive-url= https://web.archive.org/web/20111127001221/http://research.microsoft.com/en-us/um/people/gbell/CGB%20Files/New%20Architecture%20PDP11%20SJCC%201970%20c.pdf |archive-date= 2011-11-27 }}</ref>
[[Digital Equipment Corporation]] (DEC) further reduced cost for mass-produced [[minicomputer]]s, and [[Memory-mapped I/O|mapped peripherals]] into the memory bus, so that the input and output devices appeared to be memory locations.  This was implemented in the [[Unibus]] of the [[PDP-11]] around 1969.<ref>{{cite conference |title= A New Architecture for Mini-Computers—The DEC PDP-11 |author1= C. Gordon Bell |author2= R. Cady |author3= H. McFarland |author4= B. Delagi |author5= J. O'Laughlin |author6= R. Noonan |author7= W. Wulf |conference= Spring Joint Computer Conference |pages= 657–675 |year= 1970 |url= http://research.microsoft.com/en-us/um/people/gbell/CGB%20Files/New%20Architecture%20PDP11%20SJCC%201970%20c.pdf |url-status= live |archive-url= https://web.archive.org/web/20111127001221/http://research.microsoft.com/en-us/um/people/gbell/CGB%20Files/New%20Architecture%20PDP11%20SJCC%201970%20c.pdf |archive-date= 2011-11-27 }}</ref>


Early [[microcomputer]] bus systems were essentially a passive [[backplane]] connected directly or through buffer amplifiers to the pins of the [[CPU]]. Memory and other devices would be added to the bus using the same address and data pins as the CPU itself used, connected in parallel.  Communication was controlled by the CPU, which read and wrote data from the devices as if they are blocks of memory, using the same instructions, all timed by a central clock controlling the speed of the CPU. Still, devices [[interrupt]]ed the CPU by signaling on separate CPU pins.
Early [[microcomputer]] bus systems were essentially a passive [[backplane]] connected directly or through buffer amplifiers to the pins of the CPU. Memory and other devices would be added to the bus using the same address and data pins as the CPU itself used, connected in parallel.  Communication was controlled by the CPU, which read and wrote data from the devices as if they were blocks of memory, using the same instructions, all timed by a central clock controlling the speed of the CPU. Still, devices [[interrupt]]ed the CPU by signaling on separate CPU pins.


For instance, a [[disk drive]] controller would signal the CPU that new data was ready to be read, at which point the CPU would move the data by reading the memory location that corresponded to the disk drive. Almost all early microcomputers were built in this fashion, starting with the [[S-100 bus]] in the [[Altair 8800]] computer system.
For instance, a [[disk drive]] controller would signal the CPU that new data was ready to be read, at which point the CPU would move the data by reading the memory location that corresponded to the disk drive. Almost all early microcomputers were built in this fashion, starting with the [[S-100 bus]] in the [[Altair 8800]] computer system.
Line 86: Line 85:
These simple bus systems had a serious drawback when used for general-purpose computers.  All the equipment on the bus had to talk at the same speed, as it shared a single clock.
These simple bus systems had a serious drawback when used for general-purpose computers.  All the equipment on the bus had to talk at the same speed, as it shared a single clock.


Increasing the speed of the CPU becomes harder, because the speed of all the devices must increase as well. When it is not practical or economical to have all devices as fast as the CPU, the CPU must either enter a [[wait state]], or work at a slower clock frequency temporarily,<ref name="bray-aug">{{cite book|last= Bray|first= Andrew C.|author2= Dickens, Adrian C.|author3= Holmes, Mark A.|title= The Advanced User Guide for the BBC Microcomputer|url= http://www.nvg.org/bbc/doc/BBCAdvancedUserGuide-PDF.zip|format= zipped PDF|access-date= 2008-03-28|year= 1983|publisher= Cambridge Microcomputer Centre|location= Cambridge, UK|isbn= 0-946827-00-1|pages= 442–443|chapter= 28. The One Megahertz bus|url-status= dead|archive-url= https://web.archive.org/web/20060114042612/http://www.nvg.org/bbc/doc/BBCAdvancedUserGuide-PDF.zip|archive-date= 2006-01-14}}</ref> to talk to other devices in the computer. While acceptable in [[embedded systems]], this problem was not tolerated for long in general-purpose, user-expandable computers.
Increasing the speed of the CPU becomes harder because the speed of all the devices must increase as well. When it is not practical or economical to have all devices as fast as the CPU, the CPU must either enter a [[wait state]], or work at a slower clock frequency temporarily,<ref name="bray-aug">{{cite book|last= Bray|first= Andrew C.|author2= Dickens, Adrian C.|author3= Holmes, Mark A.|title= The Advanced User Guide for the BBC Microcomputer|url= http://www.nvg.org/bbc/doc/BBCAdvancedUserGuide-PDF.zip|format= zipped PDF|access-date= 2008-03-28|year= 1983|publisher= Cambridge Microcomputer Centre|location= Cambridge, UK|isbn= 0-946827-00-1|pages= 442–443|chapter= 28. The One Megahertz bus|url-status= dead|archive-url= https://web.archive.org/web/20060114042612/http://www.nvg.org/bbc/doc/BBCAdvancedUserGuide-PDF.zip|archive-date= 2006-01-14}}</ref> to talk to other devices in the computer. While acceptable in [[embedded systems]], this problem was not tolerated for long in general-purpose, user-expandable computers.


Such bus systems are also difficult to configure when constructed from common off-the-shelf equipment.  Typically each added [[expansion card]] requires many [[Jumper (computing)|jumpers]] in order to set memory addresses, I/O addresses, interrupt priorities, and interrupt numbers.
Such bus systems are also difficult to configure when constructed from common off-the-shelf equipment.  Typically, each added [[expansion card]] requires many [[Jumper (computing)|jumpers]] in order to set memory addresses, I/O addresses, interrupt priorities, and interrupt numbers.


===Second generation===
===Second generation===
Line 94: Line 93:
Second-generation bus systems like [[NuBus]] addressed some of these problems. They typically separated the computer into two [[address space]]s, the CPU and memory on one side, and the various peripheral devices on the other. A ''bus controller'' accepted data from the CPU side to be moved to the peripherals side, thus shifting the communications protocol burden from the CPU itself. This allowed the CPU and memory side to evolve separately from the peripheral bus. Devices on the bus could talk to each other with no CPU intervention. This led to much better performance but also required the cards to be much more complex. These buses also often addressed speed issues by being bigger in terms of the size of the data path, moving from 8-bit [[parallel bus]]es in the first generation, to 16 or 32-bit in the second, as well as adding software setup (later standardized as [[Plug-n-play]]) to supplant or replace the jumpers.
Second-generation bus systems like [[NuBus]] addressed some of these problems. They typically separated the computer into two [[address space]]s, the CPU and memory on one side, and the various peripheral devices on the other. A ''bus controller'' accepted data from the CPU side to be moved to the peripherals side, thus shifting the communications protocol burden from the CPU itself. This allowed the CPU and memory side to evolve separately from the peripheral bus. Devices on the bus could talk to each other with no CPU intervention. This led to much better performance but also required the cards to be much more complex. These buses also often addressed speed issues by being bigger in terms of the size of the data path, moving from 8-bit [[parallel bus]]es in the first generation, to 16 or 32-bit in the second, as well as adding software setup (later standardized as [[Plug-n-play]]) to supplant or replace the jumpers.


However, these newer systems shared one quality with their earlier cousins, in that everyone on the bus had to talk at the same speed. While the CPU was now isolated and could increase speed, CPUs and memory continued to increase in speed much faster than the buses they talked to. The result was that the bus speeds were now much slower than what a modern system needed, and the machines were left starved for data. A particularly common example of this problem was that [[video card]]s quickly outran even the newer bus systems like [[PCI Local Bus|PCI]], and computers began to include [[Accelerated Graphics Port|AGP]] just to drive the video card. By 2004 AGP was outgrown again by high-end video cards and other peripherals and has been replaced by the new [[PCI Express]] bus.
However, these newer systems shared one quality with their earlier cousins, in that everyone on the bus had to talk at the same speed. While the CPU was now isolated and could increase speed, CPUs and memory continued to increase in speed much faster than the buses they talked to. The result was that the bus speeds were now much slower than what a modern system needed, and the machines were left starved for data. A particularly common example of this problem was that [[video card]]s quickly outran even the newer bus systems like [[PCI Local Bus|PCI]], and computers began to include [[Accelerated Graphics Port|AGP]] just to drive the video card. By 2004, AGP was outgrown again by high-end video cards and other peripherals and had been replaced by the new [[PCI Express]] bus.


An increasing number of external devices started employing their own bus systems as well. When disk drives were first introduced, they would be added to the machine with a card plugged into the bus, which is why computers have so many slots on the bus. But through the 1980s and 1990s, new systems like [[SCSI]] and [[Integrated Drive Electronics|IDE]] were introduced to serve this need, leaving most slots in modern systems empty. Today there are likely to be about five different buses in the typical machine, supporting various devices.{{Citation needed|date=October 2020|reason=Experience with contemporary PC architectures seems to focus on unification of different interconnect technologies (ex.: USB-3, DisplayPort, and Thunderbolt ports all carry (or can negotiate to carry) PCIe packets.}}
An increasing number of external devices started employing their own bus systems as well. When disk drives were first introduced, they would be added to the machine with a card plugged into the bus, which is why computers have so many slots on the bus. But through the 1980s and 1990s, new systems like [[SCSI]] and [[Integrated Drive Electronics|IDE]] were introduced to serve this need, leaving most slots in modern systems empty. Today, there are likely to be about five different buses in the typical machine, supporting various devices.{{Citation needed|date=October 2020|reason=Experience with contemporary PC architectures seems to focus on unification of different interconnect technologies (ex.: USB-3, DisplayPort, and Thunderbolt ports all carry (or can negotiate to carry) PCIe packets.}}


===Third generation===
===Third generation===
{{See also|Bus network}}
{{See also|Bus network}}


Third-generation buses have been emerging into the market since about 2001, including [[HyperTransport]] and [[InfiniBand]]. They also tend to be very flexible in terms of their physical connections, allowing them to be used both as internal buses, as well as connecting different machines together. This can lead to complex problems when trying to service different requests, so much of the work on these systems concerns software design, as opposed to the hardware itself. In general, these third-generation buses tend to look more like a [[Computer network|network]] than the original concept of a bus, with a higher protocol overhead needed than early systems, while also allowing multiple devices to use the bus at once.
Third-generation buses have been emerging into the market since about 2001, including [[HyperTransport]] and [[InfiniBand]]. They also tend to be very flexible in terms of their physical connections, allowing them to be used both as internal buses as well as connecting different machines together. This can lead to complex problems when trying to service different requests, so much of the work on these systems concerns software design, as opposed to the hardware itself. In general, these third-generation buses tend to look more like a [[Computer network|network]] than the original concept of a bus, with a higher protocol overhead needed than early systems, while also allowing multiple devices to use the bus at once.


Buses such as [[Wishbone (computer bus)|Wishbone]] have been developed by the [[open source hardware]] movement in an attempt to further remove legal and patent constraints from computer design.
Buses such as [[Wishbone (computer bus)|Wishbone]] have been developed by the [[open source hardware]] movement in an attempt to further remove legal and patent constraints from computer design.


The [[Compute Express Link]] (CXL) is an [[open standard]] [[interconnect]] for high-speed [[CPU]]-to-device and CPU-to-memory, designed to accelerate next-generation [[data center]] performance.<ref>{{Cite web|url=https://www.computeexpresslink.org/about-cxl|title=ABOUT CXL|website=Compute Express Link|language=en|access-date=2019-08-09}}</ref>
The [[Compute Express Link]] (CXL) is an [[open standard]] [[interconnect]] for high-speed CPU-to-device and CPU-to-memory, designed to accelerate next-generation [[data center]] performance.<ref>{{Cite web|url=https://www.computeexpresslink.org/about-cxl|title=ABOUT CXL|website=Compute Express Link|language=en|access-date=2019-08-09}}</ref>


==Examples of internal computer buses==
==Examples of internal computer buses==
Line 114: Line 113:
* [[Computer Automated Measurement and Control]] (CAMAC) for instrumentation systems
* [[Computer Automated Measurement and Control]] (CAMAC) for instrumentation systems
* [[Extended ISA]] or EISA
* [[Extended ISA]] or EISA
* [[GSC bus|GSC/HSC]], a proprietary peripheral bus developed by Hewlett-Packard for use by its PA-RISC microprocessor family
* [[Industry Standard Architecture]] or ISA
* [[Industry Standard Architecture]] or ISA
* [[Low Pin Count]] or LPC
* [[Low Pin Count]] or LPC
Line 121: Line 121:
* [[NuBus]] or IEEE 1196
* [[NuBus]] or IEEE 1196
* [[OPTi local bus]] used on early [[Intel 80486]] motherboards.<ref>{{cite web |url=https://ancientelectronics.wordpress.com/tag/opti-local-bus/ |title=Odds & Ends: Opti Local Bus, Aria sound cards |date=July 21, 2015 |access-date=2021-02-19}}</ref>
* [[OPTi local bus]] used on early [[Intel 80486]] motherboards.<ref>{{cite web |url=https://ancientelectronics.wordpress.com/tag/opti-local-bus/ |title=Odds & Ends: Opti Local Bus, Aria sound cards |date=July 21, 2015 |access-date=2021-02-19}}</ref>
* [[Parallel ATA]] (also known as Advanced Technology Attachment, ATA, PATA, IDE, EIDE, ATAPI, etc.), [[Hard disk drive]], [[optical disk drive]], [[tape drive]] peripheral attachment bus
* [[Peripheral Component Interconnect]] or Conventional PCI
* [[Peripheral Component Interconnect]] or Conventional PCI
* [[Parallel ATA]] (also known as Advanced Technology Attachment, ATA, PATA, IDE, EIDE, ATAPI, etc.), [[Hard disk drive]], [[optical disk drive]], [[tape drive]] peripheral attachment bus
* [[PC/104]]
* [[PC/104#PC/104-Plus|PC/104-Plus]]
* [[PCI-104]]
* [[PCI/104-Express]]
* [[PC/104#PCI/104|PCI/104]]
* [[HP Precision Bus|Precision Bus]], a proprietary bus developed by Hewlett-Packard for use by its HP3000 computer family
* [[Q-Bus]], a proprietary bus developed by [[Digital Equipment Corporation]] for their [[Programmed Data Processor|PDP]] and later [[VAX]] computers.
* [[Runway bus]], a proprietary front-side CPU bus developed by Hewlett-Packard for use by its PA-RISC microprocessor family
* [[S-100 bus]] or IEEE 696, used in the [[Altair 8800]] and similar [[microcomputer]]s
* [[S-100 bus]] or IEEE 696, used in the [[Altair 8800]] and similar [[microcomputer]]s
* [[SBus]] or IEEE 1496
* [[SBus]] or IEEE 1496
* [[SS-50 Bus]]
* [[SS-50 Bus]]
* [[Runway bus]], a proprietary front side CPU bus developed by Hewlett-Packard for use by its PA-RISC microprocessor family
* [[GSC bus|GSC/HSC]], a proprietary peripheral bus developed by Hewlett-Packard for use by its PA-RISC microprocessor family
* [[HP Precision Bus|Precision Bus]], a proprietary bus developed by Hewlett-Packard for use by its HP3000 computer family
* [[STEbus]]
* [[STEbus]]
* [[STD Bus]] (for STD-80 [8-bit] and STD32 [16-/32-bit]), [http://www.controlled.com/std/faq.html FAQ] {{Webarchive|url=https://web.archive.org/web/20120227030406/http://www.controlled.com/std/faq.html |date=2012-02-27  }}
* [[STD Bus]] (for STD-80 [8-bit] and STD32 [16-/32-bit]), [http://www.controlled.com/std/faq.html FAQ] {{Webarchive|url=https://web.archive.org/web/20120227030406/http://www.controlled.com/std/faq.html |date=2012-02-27  }}
* [[Unibus]], a proprietary bus developed by [[Digital Equipment Corporation]] for their [[PDP-11]] and early [[VAX]] computers.
* [[Unibus]], a proprietary bus developed by [[Digital Equipment Corporation]] for their [[PDP-11]] and early [[VAX]] computers.
* [[Q-Bus]], a proprietary bus developed by [[Digital Equipment Corporation]] for their [[Programmed Data Processor|PDP]] and later [[VAX]] computers.
* [[VESA Local Bus]] or VLB or VL-bus
* [[VESA Local Bus]] or VLB or VL-bus
* [[VMEbus]], the VERSAmodule Eurocard bus
* [[VMEbus]], the VERSAmodule Eurocard bus
* [[PC/104]]
* [[PC/104#PC/104-Plus|PC/104-Plus]]
* [[PCI-104]]
* [[PCI/104-Express]]
* [[PC/104#PCI/104|PCI/104]]
* [[Zorro II]] and [[Zorro III]], used in [[Amiga]] computer systems
* [[Zorro II]] and [[Zorro III]], used in [[Amiga]] computer systems
{{Div col end}}
{{Div col end}}
Line 146: Line 145:
{{Div col|colwidth=30em}}
{{Div col|colwidth=30em}}
* [[1-Wire]]
* [[1-Wire]]
* [[Advanced eXtensible Interface]]
* [[HyperTransport]]
* [[HyperTransport]]
* [[I²C]]
* [[I²C]]
* [[I3C (bus)]]
* [[I3C (bus)]]
* [[SLIMbus]]
* [[M-PHY]]
* [[PCI Express]] or PCIe
* [[PCI Express]] or PCIe
* [[Serial ATA]] (SATA), [[Hard disk drive]], [[solid-state drive]], [[optical disc drive]], [[tape drive]] peripheral attachment bus
* [[Serial ATA]] (SATA), [[Hard disk drive]], [[solid-state drive]], [[optical disc drive]], [[tape drive]] peripheral attachment bus
* [[Serial Peripheral Interface]] (SPI) bus
* [[Serial Peripheral Interface]] (SPI) bus
* [[SLIMbus]]
* [[SMBus]]
* [[UNI/O]]
* [[UNI/O]]
* [[SMBus]]
* [[Advanced eXtensible Interface]]
* [[M-PHY]]
{{Div col end}}
{{Div col end}}


Line 170: Line 169:
===Serial===
===Serial===
Many [[field bus]]es are serial data buses (not to be confused with the parallel data bus section of a [[system bus]] or [[expansion card]]), several of which use the [[RS-485]] electrical characteristics and then specify their own protocol and connector:
Many [[field bus]]es are serial data buses (not to be confused with the parallel data bus section of a [[system bus]] or [[expansion card]]), several of which use the [[RS-485]] electrical characteristics and then specify their own protocol and connector:
* [[ARINC 429]]
* [[CAN bus]] ("Controller Area Network")
* [[CAN bus]] ("Controller Area Network")
* [[IEEE 1355]]
* [[MIL-STD-1553]]
* [[Modbus]]
* [[Modbus]]
* [[ARINC 429]]
* [[MIL-STD-1553]]
* [[IEEE 1355]]


Other serial buses include:
Other serial buses include:
Line 210: Line 209:
* [[Control bus]]
* [[Control bus]]
* [[Crossbar switch]]
* [[Crossbar switch]]
* [[Memory address]]
* [[External Bus Interface]] (EBI)
* [[Front-side bus]] (FSB)
* [[Front-side bus]] (FSB)
* [[External Bus Interface]] (EBI)
* [[Harvard architecture]]
* [[Harvard architecture]]
* [[List of device bandwidths]]
* [[List of network buses]]
* [[Master/slave (technology)]]
* [[Master/slave (technology)]]
* [[Memory address]]
* [[Network on chip]]
* [[Network on chip]]
* [[List of device bandwidths]]
* [[List of network buses]]
* [[Software bus]]
* [[Software bus]]
{{div col end}}
{{div col end}}

Latest revision as of 23:36, 31 May 2026

File:PCIExpress.jpg
Four PCI Express bus card slots (from top to second from bottom: ×4, ×16, ×1 and ×16), compared to a 32-bit conventional PCI bus card slot (very bottom)

In computer architecture, a bus (historically also called a data highway[1] or databus) is a communication system that transfers data between components inside a computer or between computers.[2] It encompasses both hardware (e.g., wires, optical fiber) and software, including communication protocols.[3] At its core, a bus is a shared physical pathway, typically composed of wires or traces on a circuit board, that allows multiple devices to communicate. To prevent conflicts and ensure orderly data exchange, buses rely on a communication protocol to manage which device can transmit data at a given time.

Buses are categorized based on their role, such as system buses (also known as internal buses, internal data buses, or memory buses) connecting the CPU and memory. Expansion buses, also called peripheral buses, extend the system to connect additional devices, including peripherals. Examples of widely used buses include PCI Express (PCIe) for high-speed internal connections and Universal Serial Bus (USB) for connecting external devices.

Modern buses utilize both parallel and serial communication, employing advanced encoding methods to maximize speed and efficiency. Features such as direct memory access (DMA) further enhance performance by allowing data transfers directly between devices and memory without requiring CPU intervention.

Address bus

TemplateStyles' src attribute must not be empty.

An address bus is a bus that is used to specify a physical address. When a processor or DMA-enabled device needs to read or write to a memory location, it specifies that memory location on the address bus (the value to be read or written is sent on the data bus).[4] The width of the address bus determines the amount of memory a system can transfer simultaneously.[5] For example, a system with a 32-bit address bus can address 232 (4,294,967,296) memory locations.[6] If each memory location holds one byte, the addressable memory space is about GB.

Address multiplexing

Early processors used a wire for each bit of the address width. For example, a 16-bit address bus had 16 physical wires making up the bus. As the buses became wider and longer, this approach became expensive in terms of the number of chip pins and board traces. Beginning with the Mostek 4096 DRAM, address multiplexing implemented with multiplexers became common.[7] In a multiplexed address scheme, the address is sent in two equal parts on alternate bus cycles. This halves the number of address bus signals required to connect to the memory. For example, a 32-bit address bus can be implemented by using 16 lines and sending the first half of the memory address, immediately followed by the second half of the memory address.

Typically, two additional pins in the control bus – row-address strobe (RAS) and column-address strobe (CAS) – are used to tell the DRAM whether the address bus is currently sending the first half of the memory address or the second half.

Implementation

Accessing an individual byte frequently requires reading or writing the full bus width (a word) at once. In these instances, the least significant bits of the address bus may not even be implemented - it is instead the responsibility of the controlling device to isolate the individual byte required from the complete word transmitted. This is the case, for instance, with the VESA Local Bus, which lacks the two least significant bits, limiting this bus to aligned 32-bit transfers.

Historically, there were also some examples of computers that were only able to address words – word machines.

Memory bus

TemplateStyles' src attribute must not be empty.

The memory bus is the bus that connects the main memory to the memory controller in computer systems. Originally, general-purpose buses like VMEbus and the S-100 bus were used, but to reduce latency, modern memory buses are designed to connect directly to DRAM chips, and thus are defined by chip standards bodies such as JEDEC. Examples are the various generations of SDRAM, and serial point-to-point buses like SLDRAM and RDRAM.

Implementation details

Buses can be parallel buses, which carry data words in parallel on multiple wires, or serial buses, which carry data in bit-serial form. The addition of extra power and control connections, differential drivers, and data connections in each direction usually means that most serial buses have more conductors than the minimum of one used in 1-Wire and UNI/O. As data rates increase, the problems of timing skew, power consumption, electromagnetic interference and crosstalk across parallel buses become more and more difficult to circumvent. One partial solution to this problem has been to double pump the bus. Often, a serial bus can be operated at higher overall data rates than a parallel bus, despite having fewer electrical connections, because a serial bus inherently has no timing skew or crosstalk. USB, FireWire, and Serial ATA are examples of this. Multidrop connections do not work well for fast serial buses, so most modern serial buses use daisy-chain or hub designs.

The transition from parallel to serial buses was allowed by Moore's law which allowed for the incorporation of serializer/deserializers in integrated circuits which are used in computers.[8]

Network connections such as Ethernet are not generally regarded as buses, although the difference is largely conceptual rather than practical. An attribute generally used to characterize a bus is that power is provided by the bus for the connected hardware. This emphasizes the busbar origins of bus architecture as supplying switched or distributed power. This excludes, as buses, schemes such as serial RS-232, parallel Centronics, IEEE 1284 interfaces and Ethernet, since these devices also needed separate power supplies. Universal Serial Bus devices may use the bus-supplied power, but often use a separate power source. This distinction is exemplified by a telephone system with a connected modem, where the RJ11 connection and associated modulated signalling scheme is not considered a bus, and is analogous to an Ethernet connection. A phone line connection scheme is not considered to be a bus with respect to signals, but the Central Office uses buses with cross-bar switches for connections between phones.

However, this distinction‍—‌that power is provided by the bus‍—‌is not the case in many avionic systems, where data connections such as ARINC 429, ARINC 629, MIL-STD-1553B (STANAG 3838), and EFABus (STANAG 3910) are commonly referred to as data buses or, sometimes, databuses. Such avionic data buses are usually characterized by having several Line Replaceable Items/Units (LRI/LRUs) connected to a common, shared media. They may, as with ARINC 429, be simplex, i.e., have a single source LRI/LRU or, as with ARINC 629, MIL-STD-1553B, and STANAG 3910, be duplex, allowing all the connected LRI/LRUs to act, at different times (half duplex), as transmitters and receivers of data.[9]

The frequency or the speed of a bus is measured in Hz, such as MHz, and determines how many clock cycles there are per second; there can be one or more data transfers per clock cycle. If there is a single transfer per clock cycle, it is known as Single Data Rate (SDR), and if there are two transfers per clock cycle, it is known as Double Data Rate (DDR), although the use of signaling other than SDR is uncommon outside of RAM. An example of this is PCIe, which uses SDR.[10] Within each data transfer, there can be multiple bits of data. This is described as the width of a bus, which is the number of bits the bus can transfer per clock cycle and can be synonymous with the number of physical electrical conductors the bus has if each conductor transfers one bit at a time.[11][12][13] The data rate in bits per second can be obtained by multiplying the number of bits per clock cycle times the frequency times the number of transfers per clock cycle.[14][15] Alternatively a bus such as PCIe can use modulation or encoding such as PAM4[16][17][18] which groups 2 bits into symbols which are then transferred instead of the bits themselves, and allows for an increase in data transfer speed without increasing the frequency of the bus. The effective or real data transfer speed/rate may be lower due to the use of encoding that also allows for error correction, such as 128/130b (b for bit) encoding.[19][20][10] The data transfer speed is also known as the bandwidth.[21][22]

Bus multiplexing

The simplest system bus has completely separate input data lines, output data lines, and address lines. To reduce cost, most microcomputers have a bidirectional data bus, reusing the same wires for input and output at different times.[23]

Some processors use a dedicated wire for each bit of the address bus, data bus, and control bus. For example, the 64-pin STEbus is composed of 8 physical wires dedicated to the 8-bit data bus, 20 physical wires dedicated to the 20-bit address bus, 21 physical wires dedicated to the control bus, and 15 physical wires dedicated to various power buses.

Bus multiplexing requires fewer wires, which reduces costs in many early microprocessors and DRAM chips. One common multiplexing scheme, address multiplexing, has already been mentioned. Another multiplexing scheme re-uses the address bus pins as the data bus pins,[23] an approach used by conventional PCI and the 8086. The various serial buses can be seen as the ultimate limit of multiplexing, sending each of the address bits and each of the data bits, one at a time, through a single pin (or a single differential pair).

History

Over time, several groups of people worked on various computer bus standards, including the IEEE Bus Architecture Standards Committee (BASC), the IEEE Superbus study group, the open microprocessor initiative (OMI), the open microsystems initiative (OMI), the Gang of Nine that developed EISA, etc.[citation needed]

First generation

Early computer buses were bundles of wire that attached computer memory and peripherals. Anecdotally termed the digit trunk in the early Australian CSIRAC computer,[24] they were named after electrical power buses, or busbars. Almost always, there was one bus for memory, and one or more separate buses for peripherals. These were accessed by separate instructions, with completely different timings and protocols.

One of the first complications was the use of interrupts. Early computer programs performed I/O by waiting in a loop for the peripheral to become ready. This was a waste of time for programs that had other tasks to do. Also, if the program attempted to perform those other tasks, it might take too long for the program to check again, resulting in loss of data. Engineers thus arranged for the peripherals to interrupt the CPU. The interrupts had to be prioritized because the CPU can only execute code for one peripheral at a time, and some devices are more time-critical than others.

High-end systems introduced the idea of channel controllers, which were essentially small computers dedicated to handling the input and output of a given bus. IBM introduced these on the IBM 709 in 1958, and they became a common feature of their platforms. Other high-performance vendors like Control Data Corporation implemented similar designs. Generally, the channel controllers would do their best to run all of the bus operations internally, moving data when the CPU was known to be busy elsewhere if possible, and only using interrupts when necessary. This greatly reduced CPU load and provided better overall system performance.

File:Computer system bus.svg
Single system bus

To provide modularity, memory and I/O buses can be combined into a unified system bus.[25] In this case, a single mechanical and electrical system can be used to connect together many of the system components, or in some cases, all of them.

Later computer programs began to share memory common to several CPUs. Access to this memory bus had to be prioritized, as well. The simple way to prioritize interrupts or bus access was with a daisy chain. In this case, signals will naturally flow through the bus in physical or logical order, eliminating the need for complex scheduling.

Minis and micros

Digital Equipment Corporation (DEC) further reduced cost for mass-produced minicomputers, and mapped peripherals into the memory bus, so that the input and output devices appeared to be memory locations. This was implemented in the Unibus of the PDP-11 around 1969.[26]

Early microcomputer bus systems were essentially a passive backplane connected directly or through buffer amplifiers to the pins of the CPU. Memory and other devices would be added to the bus using the same address and data pins as the CPU itself used, connected in parallel. Communication was controlled by the CPU, which read and wrote data from the devices as if they were blocks of memory, using the same instructions, all timed by a central clock controlling the speed of the CPU. Still, devices interrupted the CPU by signaling on separate CPU pins.

For instance, a disk drive controller would signal the CPU that new data was ready to be read, at which point the CPU would move the data by reading the memory location that corresponded to the disk drive. Almost all early microcomputers were built in this fashion, starting with the S-100 bus in the Altair 8800 computer system.

In some instances, most notably in the IBM PC, although similar physical architecture can be employed, instructions to access peripherals (in and out) and memory (mov and others) have not been made uniform at all, and still generate distinct CPU signals, that could be used to implement a separate I/O bus.

These simple bus systems had a serious drawback when used for general-purpose computers. All the equipment on the bus had to talk at the same speed, as it shared a single clock.

Increasing the speed of the CPU becomes harder because the speed of all the devices must increase as well. When it is not practical or economical to have all devices as fast as the CPU, the CPU must either enter a wait state, or work at a slower clock frequency temporarily,[27] to talk to other devices in the computer. While acceptable in embedded systems, this problem was not tolerated for long in general-purpose, user-expandable computers.

Such bus systems are also difficult to configure when constructed from common off-the-shelf equipment. Typically, each added expansion card requires many jumpers in order to set memory addresses, I/O addresses, interrupt priorities, and interrupt numbers.

Second generation

TemplateStyles' src attribute must not be empty.

Second-generation bus systems like NuBus addressed some of these problems. They typically separated the computer into two address spaces, the CPU and memory on one side, and the various peripheral devices on the other. A bus controller accepted data from the CPU side to be moved to the peripherals side, thus shifting the communications protocol burden from the CPU itself. This allowed the CPU and memory side to evolve separately from the peripheral bus. Devices on the bus could talk to each other with no CPU intervention. This led to much better performance but also required the cards to be much more complex. These buses also often addressed speed issues by being bigger in terms of the size of the data path, moving from 8-bit parallel buses in the first generation, to 16 or 32-bit in the second, as well as adding software setup (later standardized as Plug-n-play) to supplant or replace the jumpers.

However, these newer systems shared one quality with their earlier cousins, in that everyone on the bus had to talk at the same speed. While the CPU was now isolated and could increase speed, CPUs and memory continued to increase in speed much faster than the buses they talked to. The result was that the bus speeds were now much slower than what a modern system needed, and the machines were left starved for data. A particularly common example of this problem was that video cards quickly outran even the newer bus systems like PCI, and computers began to include AGP just to drive the video card. By 2004, AGP was outgrown again by high-end video cards and other peripherals and had been replaced by the new PCI Express bus.

An increasing number of external devices started employing their own bus systems as well. When disk drives were first introduced, they would be added to the machine with a card plugged into the bus, which is why computers have so many slots on the bus. But through the 1980s and 1990s, new systems like SCSI and IDE were introduced to serve this need, leaving most slots in modern systems empty. Today, there are likely to be about five different buses in the typical machine, supporting various devices.[citation needed]

Third generation

Third-generation buses have been emerging into the market since about 2001, including HyperTransport and InfiniBand. They also tend to be very flexible in terms of their physical connections, allowing them to be used both as internal buses as well as connecting different machines together. This can lead to complex problems when trying to service different requests, so much of the work on these systems concerns software design, as opposed to the hardware itself. In general, these third-generation buses tend to look more like a network than the original concept of a bus, with a higher protocol overhead needed than early systems, while also allowing multiple devices to use the bus at once.

Buses such as Wishbone have been developed by the open source hardware movement in an attempt to further remove legal and patent constraints from computer design.

The Compute Express Link (CXL) is an open standard interconnect for high-speed CPU-to-device and CPU-to-memory, designed to accelerate next-generation data center performance.[28]

Examples of internal computer buses

Parallel

Serial

Examples of external computer buses

Parallel

  • HIPPI High Performance Parallel Interface
  • IEEE-488 (also known as GPIB, General-Purpose Interface Bus, and HPIB, Hewlett-Packard Instrumentation Bus)
  • PC Card, previously known as PCMCIA, much used in laptop computers and other portables, but fading with the introduction of USB and built-in network and modem connections

Serial

Many field buses are serial data buses (not to be confused with the parallel data bus section of a system bus or expansion card), several of which use the RS-485 electrical characteristics and then specify their own protocol and connector:

Other serial buses include:

Examples of internal/external computer buses

See also

References

  1. Hollingdale, Stuart H. (1958-09-19). Session 14. Data Processing. Applications of Computers, University of Nottingham 15–19 September 1958.
  2. Clifton, Carl (1986-09-19). What Every Engineer Should Know about Data Communications. CRC Press. p. 27. ISBN 9780824775667. Archived from the original on 2018-01-17. The internal computer bus is a parallel transmission scheme; within the computer....
  3. "bus Definition from PC Magazine Encyclopedia". pcmag.com. 2014-05-29. Archived from the original on 2015-02-07. Retrieved 2014-06-21.
  4. Gustavson, David (April 1984). Computer Buses: A Tutorial (PDF).
  5. "Difference Between System Bus and Address Bus". GeeksForGeeks. 2025-07-23.
  6. "Operating Systems". 2003-01-01: 169–191. doi:10.1016/B0-12-227410-5/00851-6. Cite journal requires |journal= (help)
  7. "Chip Hall of Fame: Mostek MK4096 4-Kilobit DRAM - IEEE Spectrum". spectrum.ieee.org. Retrieved 2025-11-13.
  8. The Boundary — Scan Handbook. Springer. 2003-06-30. ISBN 978-1-4020-7496-7.
  9. Avionic Systems Standardisation Committee, Guide to Digital Interface Standards For Military Avionic Applications, ASSC/110/6/2, Issue 2, September 2003
  10. 10.0 10.1 IBM z15 (8561) Technical Guide. IBM Redbooks. 2022-07-13. ISBN 978-0-7384-5812-0.
  11. Foundations of Computer Technology. CRC Press. 2020-10-25. ISBN 978-1-000-11716-5.
  12. Beales, R. P. (2006-08-11). PC Systems, Installation and Maintenance. Routledge. ISBN 978-1-136-37442-5.
  13. "How Motherboards Work". 2005-07-20.
  14. Buchanan, Bill (2000-04-25). Computer Busses. CRC Press. ISBN 978-1-4200-4168-2.
  15. Oklobdzija, Vojin G. (2019-07-05). The Computer Engineering Handbook. CRC Press. ISBN 978-1-4398-3316-2.
  16. Robinson, Dan (2022-01-12). "Final PCIe 6.0 specs unleashed: 64 GTps link speed incoming... with products to follow in 2023". www.theregister.com.
  17. "PCIe 7.0 Draft 0.5 Spec Available: 512 GB/S over PCIe x16 on Track for 2025". Archived from the original on 2024-04-04.
  18. "PCIe 5.0 is just beginning to come to new PCS, but version 6.0 is already here". 2022-01-12.
  19. "PCIe 6.0: Everything you need to know about the upcoming standard". 2024-06-30.
  20. "PAM-4 Signaling".
  21. Upgrading and Repairing PCS. Que. 2003. ISBN 978-0-7897-2745-9.
  22. "PCIe 7.0 Draft 0.5 Spec Available: 512 GB/S over PCIe x16 on Track for 2025". Archived from the original on 2024-04-04.
  23. 23.0 23.1 Don Lancaster. "TV Typewriter Cookbook". (TV Typewriter). Section "Bus Organization". p. 82.
  24. McCann, Doug; Thorne, Peter (2000). The Last of The First, CSIRAC: Australias First Computer. University of Melbourne Computing Science. pp. 8–11, 13, 91. ISBN 0-7340-2024-4.
  25. Linda Null; Julia Lobur (2006). The essentials of computer organization and architecture (2nd ed.). Jones & Bartlett Learning. pp. 33, 179–181. ISBN 978-0-7637-3769-6. Archived from the original on 2018-01-17.
  26. C. Gordon Bell; R. Cady; H. McFarland; B. Delagi; J. O'Laughlin; R. Noonan; W. Wulf (1970). A New Architecture for Mini-Computers—The DEC PDP-11 (PDF). Spring Joint Computer Conference. pp. 657–675. Archived (PDF) from the original on 2011-11-27.
  27. Bray, Andrew C.; Dickens, Adrian C.; Holmes, Mark A. (1983). "28. The One Megahertz bus". The Advanced User Guide for the BBC Microcomputer. Cambridge, UK: Cambridge Microcomputer Centre. pp. 442–443. ISBN 0-946827-00-1. Archived from the original (zipped PDF) on 2006-01-14. Retrieved 2008-03-28.
  28. "ABOUT CXL". Compute Express Link. Retrieved 2019-08-09.
  29. "Odds & Ends: Opti Local Bus, Aria sound cards". 2015-07-21. Retrieved 2021-02-19.

Template:Computer-bus