PCIe is an abbreviation for Peripheral Component Interconnect Express, an electrical interface standard used to connect high-speed add-in printed circuit boards (PCBs) to computer motherboards. GPUs, RAID cards, and SSD cards are all add-in cards. PCIE are found in many sizes: X1, X4, X8, X16, and X32. X1 stands for one Tx differential line and one Rx differential line.
You can use Ansys tools to design a motherboard or add-in board. You can use SIwave, HFSS, or 3D Layout. If your board contains PCIe lines, how do you know your design is correct? You need to check it against the PCIe specifications. So, we build, assemble, and test the PCB using well-known equipment. But this is a costly way. You would like to know if your design is acceptable while designing the PCB.
You can use the PCI template that OZEN Engineering developed to do that. The templates support PCIe1 to PCIe7 standards. If you open any one of them, you will find many circuits. Each circuit serves a purpose. Some of these have more than one circuit. All the necessary constraints, specifications, and limits are embedded in these circuits. We are talking about hundreds of numbers embedded in all these circuits. As we will see, these numbers are scattered in many places, but they are where they are supposed to be.
The circuits we have here are just the beginning, and users can construct an unlimited number of circuits based on them. Component The most important thing to remember is that all the necessary building blocks and setups exist in this Template; make a copy of them and run them.
Start first by generating the s-parameters of your model. In my case, I used SIwave to design and optimize a Motherboard. I solved 4 PCIe differential lines. These lines are RX lines. The Motherboard is supposed to support PCIe3 standards. You can also use measurements of some bare PCBs, i.e., with just traces and no components on them. You can do that also. The bottom line is that you need an S-parameter file.
We come back to the Template. What will you find in each circuit?
The first thing you will notice is the information below the circuit.
We will discuss the circuit, the variables, and the results. The circuit contains an input, middle, and outer sections.
The input section contains all the possibilities for the source. Each possibility is represented by one eye source and one eye probe. The user can activate or deactivate any of them. The more circuits you activate, the longer the simulation takes, increasing exponentially. The input section has a switch that allows you to select which eye source/eye probe circuit to activate and which channel to test. If you have many channels, I am using 4 channels, so I am using a 4 channel switch. If you have 8 channels, you can use the one here.
The output section is the reverse of the input. It also has a switch so that you can select between channels and the different sources/probes. Each eye probe is connected to one eye source. The number of eye probes must match the number of eye sources.
How to control these channels and the circuits. We use the global variables list and adjust the channel number, Preset Case, or EqualizationCase numbers. We will talk more when we go through the circuits one by one. Click on the name of the Standard to see the global variables.
Why are we using the global variables and not the local variables to adjust subcircuits? Because the subcircuits cannot see the local variables of their own circuit, they can only see the global variables. So, if I have a local variable here, I cannot use it in any subcircuit. I can use local variables with the eye sources and eye probes, but not inside a subcircuit.
The middle section is the S-parameters. But it is not as simple as you think. Click on the middle block, and press Push Down. You will find the real circuit. The box in the middle is the S-parameters calculated using SIwave, HFSS, or 3D Layout. However, the S-parameters of the traces are not enough. You need to construct the rest of the structure. This picture for PCIe5 16GHz shows you the specifications of the PCIe5. It dictates that the loss of the Motherboard should not exceed 26.5dB. The package-on-die on the Motherboard should not exceed 8.5dB. The Add-in board loss should not exceed 9.5dB. The package-on-die of the Add-in should not exceed 4.2dB. All this information exists here. Notice that they call the Motherboard CBB, which stands for Compliance Base Board.
So, how do we use this information? Depends on what you are testing. Are you testing a Motherboard or an add-in board? Are you testing RX lines or TX lines? For example, in this video, we use the Motherboard's RX lines. Consequently, I need to add the loss of the Add-in board 9.5dB at the input and the loss of the package-on-die 4.5dB at the output. This full link should satisfy all the specifications.
Figure 4: PCIe losses specifications
How to control these losses, using the global variables. If you go out of here by pressing Pop Up and selecting the Standard's name, you will see all the global variables. The ones you want to change are these attenuation variables. Because then they will apply to all the circuits of the Standard. So, I will enter 9.5dB for the input and 4.5dB for the output here.
Let us talk now about the variables. In each circuit, there are local variables that affect the eye sources and the eye probes. The definition of each variable is given in the Template.
If you open the eye source, you will see how they are used in the Bits, Jitter, and equalization panels. Again, they are local because the eye source can see them; they are only needed here.
But there are global variables:
If I open any eye source, you will see how these variables are being used.
We will go through them again when we discuss each circuit.
For the results, the user will find four major types of plots:
Figure 13: Eye graph setup and options
Figure 15: Return Loss
Figure 16: Insertion Loss
Let us start with the circuits one by one: First, the single case. This one has one eye source and one eye probe. It can be used to analyze one channel at a time. You can control the channel number using the global variable $Channel number. I can use this circuit to study some initial setups. I can also use the optimetrics to change the Vpp and the CTLE gain. You can also add another one for the channel or add the channel to the previous two. So, as you can see, the VPP and CTLE ranges are embedded in the optimetrics setup. These values are as in the specifications. From the results, we see the width, the height, and the eye plots. We also see the ones for the optimetrics setup. The first four are used when you do not use the optimetrics setup. Do not try to change that because you need the single set alone.
Figure 17: Single channel circuit
Figure 18: S-parameters circuit
Figure 19: Single channel circuit
Figure 20: Eye with equalization
So, using these circuits, the user can verify and optimize the design. The Template does not do any design or optimization but can ensure that the design meets the specification and by how much margin.