The following figure illustrates the BCDR architecture, showing the relevant inputs and outputs. The deserialized data (32- or 80-bit wide) flows in parallel into the lower branch (LB) and the upper branch (UB).
The lower branch works on delayed data, continuously tuning the numerically controlled oscillator (NCO) to track the incoming data edges. Each raw sample is associated with a phase between –180 degrees and +180 degrees. The raw sample with the phase closest to 0 degrees (that is, closest to the middle of the eye diagram) is extracted by the sample selector block. The lower branch tracks phase variations with typical time constants that are much longer than the preamble time. Thus, the loop in the lower branch is expected to track phase changes or jitter, but not bursts.
The delay element allows the upper branch to recognize a preamble and estimate its phase by averaging the phase information of many consecutive edges. Upon recognizing the consecutive edges as a preamble, the NCO in the lower branch is steered in one single clock cycle to be aligned with the new packet. The lower branch never experiences a phase burst because the NCO is steered just before the burst enters the phase detector in the lower branch.
For debugging purposes, you can disable the burst injection capability by setting BURST_EN to 0. BCDR Simulation Test Bench further describes this item, which is the characterizing feature of a BCDR. The phase of the NCO can be monitored over time for debug purposes, both in simulation and in hardware, through the signal PHASE_OUT.
The following table describes the attributes of the BCDR core.
Attribute | Type | Description |
---|---|---|
DT_IN_WIDTH | Integer | Input datapath width. Can be 32 or 80. |
DT_OUT_WIDTH | Integer | Output datapath width. Can be 8 or 32. |
ENABLE_CENTER_F_ATTR | Std_logic |
When set to 1, CENTER_F_ATTR is used as CENTER_F. When set to 0, the CENTER_F port is used. |
CENTER_F_ATTR |
Std_logic_vector (36 downto 0) |
The CENTER_F_ATTR is used when ENABLE_CENTERF_ATTR is set to 1. |
EN_PAT_MSK_ATTR | Std_logic |
When set to 1, PAT_MSK_ATTR is used as PAT_MSK. When set to 0, the PAT_MSK port is used. |
PAT_MSK_ATTR |
Std_logic_vector (31 downto 0) |
The PAT_MSK_ATTR attribute is used when EN_PAT_MSK_ATTR is set to 1. |
EN_AVE_SEL_ATTR | Std_logic |
When set to 1, AVE_SEL_ATTR is used as AVE_SEL. When set to 0, the AVE_SEL port is used. |
AVE_SEL_ATTR |
Std_logic_vector (1 downto 0) |
The AVE_SEL_ATTR is used when EN_AVE_SEL_ATTR is set to 1. |
EN_BDW_ATTR | Std_logic |
When set to 1, BDW_ATTR is used as BDW. When set to 0, the BDW port is used. |
BDW_ATTR |
Std_logic_vector (3 downto 0) |
The BDW_ATTR attribute is used when EN_BDW_ATTR is set to 1. |
ENABLE_EN | Std_logic | When set to 1, the EN port is active for all internal processes. |
EN_LTR_PORT | Std_logic |
When EN_LTR_PORT is set to 1, the LTR port is used to disable the lower branch. When EN_LTR_PORT is set to 0, the lower branch is disabled. |
ENABLE_DBG | Std_logic | When set to 1, debug output ports are enabled. |
REDUCE_PD | Std_logic | When set to 1, allows resource reduction only in 10X mode. |
USE_RED_BRICK | Std_logic | When set to 1, allows resource reduction only in 10X mode. |
EN_PREAMBLE_ATTR | Std_logic |
When set to 1, PREAMBLE_ATTR_0 and PREAMBLE_ATTR_1 are used as PREAMBLES. When set to 0, the PREAMBLE_0 and PREAMBLE_1 ports are used. |
PREAMBLE_ATTR_0 |
Std_logic_vector (31 downto 0) |
The PREAMBLE_ATTR_0 and PREAMBLE_ATTR_1 are used when EN_PREAMBLE_ATTR is set to 1. |
PREAMBLE_ATTR_1 |
Std_logic_vector (31 downto 0) |
The PREAMBLE_ATTR_0 and PREAMBLE_ATTR_1 are used when EN_PREAMBLE_ATTR is set to 1. |
EN_CF_ADD | Std_logic | RESERVED. Set to 0. |
SAM_VALIDS |
Std_logic_vector (4 downto 0) |
Average number of valid bits per clock cycle. The setting 0 is valid for all cases. Setting this number according to use case allows saving resources. |
MASK_CG |
Std_logic_vector (15 downto 0) |
RESERVED. Leave at default. |
MASK_PD |
Std_logic_vector (15 downto 0) |
RESERVED. Leave at default. |
MASK_VCO |
Std_logic_vector (36 downto 0) |
RESERVED. Leave at default. |
The following table describes the BCDR core ports.
Port Name | Direction and Type | Description | Comment |
---|---|---|---|
Data Flow Ports | |||
CLK | In std_logic | Clock | Core REFCLK, typically from the SerDes |
RST | In std_logic | Reset | Active-High |
EN | In std_logic | Enable pin | Connected to all internal processes of the BCDR. Set to 1. |
DIN | In std_logic_vector ((DT_IN_WIDTH -1) downto 0) | Input data | MSB is conventionally the latest bit coming in. The same convention used in the UltraScale SerDes series. |
DV_OUT | Out std_logic | Output data valid | When High, DT_OUT is valid |
DT_OUT | Out std_logic_vector (31 downto 0) |
Output data | MSB is conventionally the latest bit coming in. Data is grouped in 32 or 8 bits. |
Configuration Ports | |||
BDW | In std_logic_vector (4 downto 0) |
BCDR bandwidth | This is the bandwidth of the BCDR in tracking mode. Reducing it by 1 doubles the BCDR bandwidth. |
CENTER_F | In std_logic_vector (36 downto 0) | Center frequency | Used to set the fractional ratio between oversampling data rate and incoming data rate |
PREAMBLE_0 | In std_logic_vector (31 downto 0) |
First preamble pattern | First pattern used by the BCDR to estimate the incoming phase of the packet |
PREAMBLE_1 | In std_logic_vector (31 downto 0) |
Second preamble pattern | Second pattern used by the BCDR to estimate the incoming phase of the packet |
PAT_MSK | In std_logic_vector (5 downto 0) |
Preamble mask | A bit in the preamble pattern is used to match when the corresponding bit in the PAT_MSK is set to 1. |
AVE_SEL | In std_logic_vector (1 downto 0) |
Depending on this value, a different number of
burst bits are used to calculate the burst phase: 00: 1 CLK cycle 01: 2 CLK cycles 10: 4 CLK cycles 11: 8 CLK cycles |
|
Debug Signals | |||
PL_IN | In std_logic | Inject estimated phase | When set to 1 by the user, the LB is steered with the latest estimated phase. |
SH_UB_PH | In std_logic_vector (7 downto 0) |
UB phase | Debug port. Leave at default. |
SH_LB_PH | In std_logic_vector (7 downto 0) |
LB phase | Debug port. Leave at default. |
PL_O | Out std_logic | Burst detected | Indicates a preamble has been detected. |
BURST_EN | In std_logic | Burst enable | When set to 1, a preamble detection is followed by a phase injection. |
DOUT_BST_EN | Std_logic | Enable on burst data out | Debug signal |
DOUT_BST | Out std_logic_vector (31 downto 0) |
Burst data out | Debug signal |
PHE_BST_DRU | Out std_logic_vector (15 downto 0) |
Debug signal | |
PHE_BST_BURST | Out std_logic_vector (15 downto 0) |
Debug signal. Phase profile of incoming packets, as seen by the BCDR | |
PHE_BST_BURST_AVE | Out std_logic_vector (15 downto 0) |
Debug signal. Average phase profile of incoming packets as seen by the BCDR. | |
PHASE_OUT | Out std_logic_vector (20 downto 0) |
Output VCO phase | Debug signal. At each clock cycle, the current NCO phase can be read. The phase is over the 16 least significant bits in signed format. |
LTR | In std_logic | Lock to reference mode | Debug signal. When set to 1, the BCDR tracking is disabled. |
VCOCTRL | Out std_logic_vector (31 downto 0) |
NCO control | Debug signal. The control signal of the NCO. |
CF_ADD | In std_logic | Center frequency adder | Reserved. Connect to 0. |
RECCLK | Out std_logic_vector (79 downto 0) |
Recovered clock | Debug signal. Can be serialized by a 12.44 Gb/s SerDes to synthesize the bursty recovered clock. |
VER | Out std_logic_vector (7 downto 0) |
Version | This is expected to be 2. |
SUB_VER | Out std_logic_vector (7 downto 0) |
Sub Version | This is expected to be 5. |
Additional insights on the BCDR ports and their usage follow. The oversampled and deserialized data enters from DIN and exits from DT_OUT. The output DT_OUT is valid only when DV_OUT is 1.
PL_O is a debug signal that the BCDR pulses to 1 each time it detects a preamble. If a preamble is detected, the NCO is steered to the estimated phase only if BURST_EN is set to 1, which is the default condition.
BDW or BDW_ATTR control the bandwidth of the BCDR during tracking—higher values correspond to lower bandwidth.