PCI Express

This lecture is based on the Peripheral Component Interconnect Express,
which is a standard for computer expansion cards.

More specifically, this is a standard for the communication link by which a
PCIe device communicates with the CPU.

According to Wikipedia, PCIe 3.0 (August 2007) is the latest standard.

The PCIe standard is an outgrowth of the original PCI standard, but is not
compatible with PCI at the hardware level.

The PCIe standard is based on a new protocol for electrical signaling.
This protocol is built on the concept of a lane, which we must define.

Here are some capacity quotes from Wikipedia

                           Per Lane              16–Lane Slot
Version 1            250 MB/s            4 GB/s
Version 2            500 MB/s            8 GB/s
Version 3            1 GB/s                16 GB/s

What is a Lane?

A lane is pair of point–to–point serial links.

It is a full–duplex link, able to communicate in two directions simultaneously.
Each of the serial links in the pair handles one of the two directions.

By definition, a serial link transmits one bit at a time.

By extension, a lane may transmit two bits at any one time,
one bit in each direction.

One may view a parallel link, transmitting multiple bits in one direction
at any given time, as a collection of serial links.

The only difference is that a parallel link must provide for synchronization
of the bits sent by the individual links.

Data Transmission Codes

The PCIe standard is byte oriented, in that it should be viewed logically
as a full–duplex byte stream.  What is actually transmitted?

The association of bits (transmitted or received) with bytes is handled at the
Data Link layer.  Suppose a byte is to be transmitted serially.

The conversion from byte data to bit–oriented data for serial transmission
is done by a shift register.  The register takes in eight bits at a time and
shifts out one bit at a time.

The bits, as shifted out, are still represented in standard logic levels.

The serial transmit unit takes the standard logic levels as input, and
converts them to voltage levels appropriate for serial transmission.


Three Possible Transmission Codes

The serial transmit unit sends data by asserting a voltage on the serial link.

On simple method would be as follows.
       To transmit a logic 1, assert +5 volts on the transmission line.
       To transmit a logic 0, assert 0 volts on the transmission line.

This simple method has so many difficulties in practice that it cannot be used.
Two of the most obvious are transmission of power and lack of data framing.

Standard methods for link management use codes that avoid these problems.
Two of the more common methods used are NRZ and NRZI.

Non–Return–to–Zero coding transmits by asserting the following voltages:
       For a logic 1, it asserts a positive voltage (3.0 – 5.0 volts) on the link.
       For a logic 0, it asserts a negative voltage (–3.0 to –5.0 volts).

Non–Return–to–Zero–Invert is a modification of NRZ, using the same
voltage levels.


The Problem of Noise

One problem with these serial links is that they function as antennas.
They will pick up any stray electromagnetic radiation if in the radio range.

In other words, the signal received at the destination might not be what
was actually transmitted.  It might be the original signal, corrupted by noise.

The solution to the problem of noise is based on the observation that two links
placed in close proximity will receive noise signals that are almost identical.

To make use of this observation, we use differential transmitters to send the
signals and differential receivers to reconstruct the signals.


Differential Transmitters and Receivers

In differential transmission, rather than asserting a voltage on a single output
line, the transmitter asserts two voltages: +V/2 and –V/2.

A +6 volt signal would be asserted as two: +3 volts and –3 volts.

A –8 volt signal would be asserted as two: –4 volts and +4 volts.

Here is a standard diagram of a differential transmitter.

The standard differential receiver is an analog subtractor.

For a 6 volt transmitted signal, we have A = 3, B = –3; A – B = 3 – (–3) = 6.


Noise in a Differential Link

We now assume that the lines used to transmit the differential signals are
physically close together, so that each line is subject to the same noise signal.

Here the received signal is the difference of the two voltages input to
the differential receiver.

The value received is V/2 – (–V/2) = V, the desired value.



Ground Offsets in Standard Links

All voltages are measured relative to a standard value, called “ground”.

Here is the complete version of the simple circuit that we want to implement.

Basically, there is an assumed second connection between the two
devices.  This second connection fixes the zero level for the voltage.

There is no necessity for the two devices to have the same ground.  Suppose
that the ground for the receiver is offset from the ground of the transmitter.

The signal sent out as +V(t) will be received as V(t) – VO.


Ground Offsets in Differential Links

Here again, the subtractor in the differential receiver handles this problem.

The signal originates as a given voltage, which can be positive, negative, or 0.

The signal is transmitted as the pair (+V/2, –V/2).

Due to the ground offset for the receiver, the signal is taken in as
(+V/2 – VO, –V/2 – VO).  The signal is interpreted as
(+V/2 – VO) – (–V/2 – VO) = +V/2 – VO + V/2 + VO = V.

The differential link will correct for both ground offset and line noise
at the same time.



1.    Wikipedia    http://en.wikipedia.org/wiki/PCI_Express

2.    Wikipedia       http://en.wikipedia.org/wiki/File:Differential_Signaling.png

3.    Web Site       http://www.interfacebus.com/Design_Connector_RS422.html

4.    Wikipedia    http://en.wikipedia.org/wiki/RS-422