PAMn Capabilities
The IBIS BIRD (Buffer Issue Resolution Document) 213 adds supports to IBIS-AMI models for all levels of signaling from PAM2 (NRZ) onward, collectively known as PAMn. You can simulate PAMn models up to n = 32 with specific mapping using the Serial Link Designer or Parallel Link Designer apps.
Some important terms related to PAMn signaling include:
Payload — Binary bits to be transmitted using PAMn voltage levels.
Message — PAMn symbols.
Mapping — Look-up table used to translate PAMn voltage levels to binary bits.
Encoding — Process of converting binary payload to PAMn symbols sent.
Decoding — Process of converting received PAMn symbols to binary bits.
You can select the number of modulation levels with the
Modulation_Levels
AMI Parameter in the solution space.
To define PAMn mappings, in the Stimulus Editor, set the Number Modulation Levels and Mapping parameters. The available mapping option depends on the modulation scheme selected.
Mapping Binary Payload to PAMn Symbols
For a system that transmits and receives PAMn symbols, the ability to reliably map between binary and PAMn symbols is crucial.
For NRZ or PAM2 modulation, the mapping is trivial.
Binary Payload | Message Symbol | Symbol Voltage |
---|---|---|
0 | 0 | -0.5 |
1 | 1 | 0.5 |
You can map a PAM4 symbol in 24 ways. This table shows one of the possible solutions:
Binary Payload | Message Symbol | Symbol Voltage |
---|---|---|
00 | 0 | -0.5 |
01 | 1 | -0.1666 |
10 | 2 | 0.1666 |
11 | 3 | 0.5 |
For PAM2, PAM4, PAM8, and other PAMn, where n is a power of 2, the mapping is straightforward in that the message symbol sequence is of length 1. For PAM3, the mapping is not as clean since the number of bits per symbol is not an integer. This table shows the PAM3 symbol mapping for the IEEE 100Base-T1 standard.
Binary Payload | Message Symbol | Symbol Voltage |
---|---|---|
000 | 0 1 | -0.5 -0.5 |
001 | 0 1 | -0.5 0 |
010 | 0 2 | -0.5 0.5 |
011 | 1 0 | 0 -0.5 |
100 | 1 2 | 0 0.5 |
101 | 2 0 | 0.5 -0.5 |
110 | 2 1 | 0.5 0 |
111 | 2 2 | 0.5 0.5 |
The eight possible binary payload sequences in this table are assigned a unique message symbol sequence. But the 1 1 message sequence is not specified. As such, if a 1 1 is detected at the receiver, a simple decoding of the symbol message back to binary is not possible.
To analyze this mapping further, you need the payload and message set size. The binary payload length is 3, and therefore the binary payload set size is 23 = 8. The message length is 2 and with PAM3, the symbol message set size is 32 = 9. Therefore, the coverage of this PAM3 mapping is 8/9 = 88.88%. The IEEE 100Base-T1 standard could have chosen a different symbol sequence for the missing message. So there are many different possible mapping schemes. A PAM3 mapping with greater coverage is one with a binary payload length of 11 and a message length of 7. This has a coverage of 211/37 = 93.64% and has 139 missing messages.
One possible approach to mapping a binary payload to PAMn symbols and locating the missing messages is:
Represent the binary payload as a base-10 integer x.
Scale x from the binary payload range of [0, 2PayLoadLength-1] to the range of [0, nMessageLength-1] to obtain y.
Convert y to a base-n number to obtain the PAMn message sequence.
This mapping algorithm has the benefit of distributing the missing symbol sequences uniformly within the range of message sequences.
The complete list of mapping depending on the number of modulation levels is shown:
Number of Modulation Levels | Mapping |
---|---|
2 | Default |
3 | UNIFORM_3_2 |
UNIFORM_11_7 | |
UNIFORM_19_12 | |
USB4_V2 | |
ETH_100BASE_T1 | |
4 | PAM4_0132 |
PAM4_0123 | |
PAM4_0213 | |
PAM4_0231 | |
PAM4_0312 | |
PAM4_0321 | |
PAM4_1023 | |
PAM4_1032 | |
PAM4_1203 | |
PAM4_1230 | |
PAM4_1302 | |
PAM4_1320 | |
PAM4_1302 | |
PAM4_2013 | |
PAM4_2031 | |
PAM4_2103 | |
PAM4_2130 | |
PAM4_2301 | |
PAM4_2310 | |
PAM4_3012 | |
PAM4_3021 | |
PAM4_3102 | |
PAM4_3120 | |
PAM4_3201 | |
PAM4_3210 | |
5 | UNIFORM_9_4 |
UNIFORM_16_7 | |
UNIFORM_23_10 | |
UNIFORM_30_13 | |
UNIFORM_37_16 | |
UNIFORM_44_19 | |
6 | UNIFORM_5_2 |
UNIFORM_18_7 | |
UNIFORM_31_12 | |
7 | UNIFORM_14_5 |
UNIFORM_5_2 | |
UNIFORM_8_3 | |
UNIFORM_11_4 | |
8 | UNIFORM_3_1 |
9 | UNIFORM_3_1 |
UNIFORM_19_6 | |
10 | UNIFORM_3_1 |
UNIFORM_13_4 | |
UNIFORM_23_7 | |
UNIFORM_33_10 | |
UNIFORM_43_13 | |
11 | UNIFORM_17_5 |
UNIFORM_3_1 | |
UNIFORM_10_3 | |
UNIFORM_24_7 | |
UNIFORM_31_9 | |
UNIFORM_38_11 | |
12 | UNIFORM_7_2 |
UNIFORM_3_1 | |
UNIFORM_25_7 | |
UNIFORM_43_12 | |
13 | UNIFORM_11_3 |
UNIFORM_3_1 | |
UNIFORM_7_2 | |
UNIFORM_37_10 | |
14 | UNIFORM_15_4 |
UNIFORM_7_2 | |
UNIFORM_11_3 | |
UNIFORM_19_5 | |
15 | UNIFORM_31_8 |
UNIFORM_11_3 | |
UNIFORM_15_4 | |
UNIFORM_19_5 | |
UNIFORM_23_6 | |
UNIFORM_27_7 | |
UNIFORM_35_9 | |
UNIFORM_39_10 | |
16 | UNIFORM_4_1 |
17 | UNIFORM_4_1 |
UNIFORM_49_12 | |
18 | UNIFORM_25_6 |
UNIFORM_4_1 | |
19 | UNIFORM_21_5 |
UNIFORM_4_1 | |
UNIFORM_38_9 | |
20 | UNIFORM_17_4 |
UNIFORM_4_1 | |
UNIFORM_30_7 | |
UNIFORM_43_10 | |
21 | UNIFORM_13_3 |
UNIFORM_4_1 | |
UNIFORM_35_8 | |
22 | UNIFORM_22_5 |
UNIFORM_4_1 | |
UNIFORM_13_3 | |
UNIFORM_31_7 | |
UNIFORM_40_9 | |
UNIFORM_49_11 | |
23 | UNIFORM_9_2 |
UNIFORM_4_1 | |
24 | UNIFORM_9_2 |
UNIFORM_4_1 | |
UNIFORM_32_7 | |
25 | UNIFORM_9_2 |
UNIFORM_4_1 | |
UNIFORM_23_5 | |
UNIFORM_37_8 | |
26 | UNIFORM_14_3 |
UNIFORM_4_1 | |
UNIFORM_9_2 | |
UNIFORM_47_10 | |
27 | UNIFORM_19_4 |
UNIFORM_9_2 | |
UNIFORM_14_3 | |
28 | UNIFORM_24_5 |
UNIFORM_9_2 | |
UNIFORM_14_3 | |
UNIFORM_19_4 | |
29 | UNIFORM_34_7 |
UNIFORM_9_2 | |
UNIFORM_14_3 | |
UNIFORM_19_4 | |
UNIFORM_24_5 | |
UNIFORM_29_6 | |
30 | UNIFORM_49_10 |
UNIFORM_9_2 | |
UNIFORM_14_3 | |
UNIFORM_19_4 | |
UNIFORM_24_5 | |
UNIFORM_29_6 | |
UNIFORM_34_7 | |
UNIFORM_39_8 | |
UNIFORM_44_9 | |
31 | UNIFORM_64_13 |
UNIFORM_29_6 | |
UNIFORM_34_7 | |
UNIFORM_39_8 | |
UNIFORM_44_9 | |
UNIFORM_49_10 | |
32 | UNIFORM_5_1 |
PAM6 Mapping Using UNIFORM_5_2 Standard
For PAMn = 6, a payload length of 5 bits and a message length of 2 symbols gives 88.88% coverage with 4 missing symbol sequences. This example illustrates how each possible payload is mapped to a symbol sequence and the missing symbol sequences are distributed uniformly throughtout.
Define the PAMn level, payload length, and message length.
n = 6; %PAMn Levels PayloadLength=5; %Number of binary bits to encode MessageLength=2; %Number of PAMn symbols to encode each payload into
Calculate the number of gaps between the number of possible messages and the number of possible payload values.
missingSymbolSequenceCount = n^MessageLength - 2^PayloadLength;
To loop over every possible payload value, first represent the binary payload as a base-10 integer Payload. Scale this value from the binary payload range of [0, 2^PayloadLength-1]
to the range of [0, N^MessageLength-1]
to get the ScaledPayload parameter. Then convert the ScaledPayload parameter to a base-N number. This approach uniformly distributes any missing message sequences throughout the message space. You can visualize the integer and binary payload, scaled payload, and resulting PAMn symbol values.
for Payload = 0:2^PayloadLength-1 ScaledPayload = round(Payload*(1 + missingSymbolSequenceCount/(2^PayloadLength))); ScaledPayload1 = ScaledPayload; %Store initial value for report %Convert the integer Payload value to a base N number SymbolsOut=zeros(1,MessageLength); for jj=1:MessageLength %Determine the remainder after division to determine the next %least-significant base N value and store output symbols big-endian SymbolsOut(MessageLength+1-jj) = (mod(round(ScaledPayload),n)); %Remove contribution of least-significant base N value and shift by %division (analogous to how divide by 2 is a binary bitshift). ScaledPayload = (ScaledPayload - SymbolsOut(MessageLength+1-jj)) / n; end %Report out payload (integer and binary), scaled payload and resulting %PAMn symbol values if Payload==0 %Print out header of report fprintf('%13s --> %6s --> %s\n','Payload ','Scaled ','Output Symbols'); end fprintf('%4g: %7s --> %8.6g --> %s\n',... Payload,... %Input payload value in integer form dec2bin(Payload,PayloadLength), ... %Input payload value in binary form ScaledPayload1,... %Scaled payload value in double form num2str(round(SymbolsOut))) %Output PAMn message symbol values end
Payload --> Scaled --> Output Symbols
0: 00000 --> 0 --> 0 0 1: 00001 --> 1 --> 0 1 2: 00010 --> 2 --> 0 2 3: 00011 --> 3 --> 0 3 4: 00100 --> 5 --> 0 5 5: 00101 --> 6 --> 1 0 6: 00110 --> 7 --> 1 1 7: 00111 --> 8 --> 1 2 8: 01000 --> 9 --> 1 3 9: 01001 --> 10 --> 1 4 10: 01010 --> 11 --> 1 5 11: 01011 --> 12 --> 2 0 12: 01100 --> 14 --> 2 2 13: 01101 --> 15 --> 2 3 14: 01110 --> 16 --> 2 4 15: 01111 --> 17 --> 2 5 16: 10000 --> 18 --> 3 0 17: 10001 --> 19 --> 3 1 18: 10010 --> 20 --> 3 2 19: 10011 --> 21 --> 3 3 20: 10100 --> 23 --> 3 5 21: 10101 --> 24 --> 4 0 22: 10110 --> 25 --> 4 1 23: 10111 --> 26 --> 4 2 24: 11000 --> 27 --> 4 3 25: 11001 --> 28 --> 4 4 26: 11010 --> 29 --> 4 5 27: 11011 --> 30 --> 5 0 28: 11100 --> 32 --> 5 2 29: 11101 --> 33 --> 5 3 30: 11110 --> 34 --> 5 4 31: 11111 --> 35 --> 5 5
Create and print out the summary string.
strout = sprintf(['PAMn=%g, Payload Length=%g, Message Length=%g\n',... 'Missing %g symbol sequences for coverage of 2^{%g}/%g^{%g} = %g%%'],... n,PayloadLength,MessageLength,... missingSymbolSequenceCount,... PayloadLength,n,MessageLength,2^PayloadLength/n^MessageLength*100)
strout = 'PAMn=6, Payload Length=5, Message Length=2 Missing 4 symbol sequences for coverage of 2^{5}/6^{2} = 88.8889%'
Identify and visualize the gaps in message symbol sequences.
Payload = 0:2^PayloadLength-1; ScaledPayload = Payload + (n^MessageLength-2^PayloadLength)/(2^PayloadLength)*Payload; isaGap = ones(1,n^MessageLength-1); isaGap(round(ScaledPayload)+1) = 0; stem(0:length(isaGap)-1,isaGap) axis([0 n^MessageLength-1 0 1.1]) title({'Location of the missing message symbol sequences for ',strout}) xlabel('Message (Decimal)')