BACKGROUND
In Ethernet, Peripheral Component Interconnect Express (PCIe) and other modern communication systems, physical signaling media may be organized into a configurable number of independent communication channels. For example, a 16-lane PCIe system may be configured alternately as eight distinct communication channels each containing two signaling lanes (eight “×2 links” in PCIe parlance), or as four links containing four lanes (four ×4 links), two ×8 links or a single ×16 link. To manage lane-to-lane timing deskew and other complex time-critical interactions between constituent lanes of a channel or link, a dedicated “link controller” is provided for each distinct link so that, in the 16-lane PCIe example (i.e., configurable into eight ×2 links, four ×4 links, two ×8 links or a single ×16 link), as many as fifteen link controllers may be required—eight controllers for each of the eight ×2 links, four controllers for each of the four ×4 links, two controllers for each of the two ×8 links, and one controller for the ×16 link. While this controller count is typically reduced by enabling each of the controllers for lane aggregations greater than the minimum (i.e., controllers for links formed by more than two lanes and thus the ×16, ×8 and ×4 controllers) to be configured for reduced-width operation (e.g., ×16 controller can be configured for operation in ×8 mode in which 50% of the lane inputs/outputs (I/Os) for that controller are unused, or for operation in ×4 mode (75% I/Os unused) or ×2 mode (87.5% IOs unused)), the constituent signaling conductors of individual lanes must still be multiplexed to and from each controller to enable the various configuration options. Thus, aside from the waste of redundant resources in all configuration modes (e.g., ×2, ×4 and ×8 controllers unused in ×16 mode, or unused I/Os within ×16, ×8 and/or ×4 controllers in all other modes), the extensive signal multiplexing required to support the various configuration modes adds implementation and operational complexity—for example, degraded signal integrity due to wire fan-out to multiple multiplexer loads, timing skew due to non-uniform propagation distances from fan-out point to individual multiplexers, layout congestion resulting in increased chip area, etc.
DRAWINGS
The various embodiments disclosed herein are illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings and in which like reference numerals refer to similar elements and in which:
FIG. 1 illustrates an embodiment of a synchronous signaling system having a media-dedicated retimer coupled between upstream and downstream components via respective channel-count-configurable signaling paths;
FIG. 2 illustrates a more detailed embodiment of a retimer having lane-dedicated controllers and an aggregation engine, together with physical media attachment and physical coding sublayer blocks for each lane on both upstream and downstream pseudo ports;
FIG. 3 illustrates a more detailed embodiment of a synchronization bus and its interconnection between a set of lane-dedicated controllers and an aggregation engine;
FIG. 4 illustrates exemplary link mask programming for each of four different aggregation (or segmentation) configurations;
FIG. 5 illustrates exemplary coordination between an aggregation engine and lane-dedicated controllers to remove timing skew between symbol streams flowing on respective lanes of a link—an inter-lane deskew operation to align incoming symbol streams on a block boundary;
FIG. 6 illustrates a lane deskew operation within a four lane link controlled by two lane-dedicated controllers;
FIG. 7 illustrates an alternative lane-dedicated controller/synchronization-bus implementation in which each controller drives a respective sync-bus signal per dedicated lane;
FIG. 8 illustrates an embodiment of a deskew FIFO (first-in-first-out) circuit that may be deployed within individual lane-dedicated controllers to enable inter-lane deskew operations;
FIG. 9 illustrates an exemplary data progression with respect to deskew FIFOs for each of four lanes of an aggregated link; and
FIG. 10 illustrates an embodiment of a clock selection circuit that may be employed with the lane-dedicated controllers discussed in reference to FIGS. 1-9 to enable clock selection and forwarding in accordance with a pre-programmed link aggregation configuration and clock-swap selection.
DETAILED DESCRIPTION
In various embodiments herein, individual signal conductors or groups of signal conductors within a configurable communication system are managed by respective, dedicated media controllers that support all possible channel-count configurations through coordinated action so that signal conductors need not be multiplexed to/from multiple controllers and no media controllers or controller I/Os need be disabled in any configuration. In a number of embodiments, the conductor-dedicated media controllers are implemented within a bidirectional reach extension device such as a retimer so that the resource savings—obviation of signal multiplexer circuitry and surplus controller I/O circuitry—are achieved in both the retimer ingress and egress paths for each signaling direction. To support configurations in which multiple per-controller sets of signaling conductors are aggregated to form a higher bandwidth (higher conductor count) signaling channel or link, an aggregation engine is provided to configure (program) the media controllers for coordinated action and, in some cases, to provide centralized timing for controller-state transition or other time-critical events. In other embodiments, clock signals recovered from serial data streams conveyed on individual signal conductors (or differential pairs of signal conductors) are selectively forwarded to conductor-dedicated media controllers according to channel-count configuration, with balanced clock propagation delay through the clock selection circuitry to ensure clock/data phase alignment for all configurations. These and other features and embodiments are described in greater detail below.
FIG. 1 illustrates an embodiment of a synchronous signaling system 100 having a media-dedicated (MD) retimer 101 coupled between upstream and downstream components 103, 105, via respective channel-count-configurable signaling paths 102 and 104. Retimer 101 extends the viable signaling path length between the upstream and downstream components by applying timing information and digital data recovered from inbound symbol streams (sourced by either of components 103, 105 and destined for the other) to produce enhanced-integrity outbound symbol streams (with occasional content modification)—overall, permitting the upstream and downstream components to communicate reliably (e.g., meeting specified bit error rate) over otherwise impracticable distances.
For purposes of example and clarity of explanation, signaling paths 102, 104 and driver/receiver ports within retimer 101, upstream component 103, and downstream component 105 (i.e., downstream port of component 103, upstream port of component 105 and upstream/downstream pseudo ports of retimer 101, as shown) are assumed to implement a configurable number of communication channels in accordance with the Peripheral Component Interconnect Express (PCIe) communication specification and are thus described in the terminology of that specification. Accordingly, upstream component 103 may be a root complex or switch and the downstream component 105 may be an endpoint or switch, and the N bidirectional signaling “lanes” 107 that constitute the physical signaling media within each of paths 102 and 104 may be organized in a configurable number of communication channels between a given pair of components (i.e., upstream component and retimer or downstream component and retimer). For example, in a fully/maximally aggregated configuration, all N lanes (each implemented by a dedicated differential signaling pair for each signaling direction as shown at 107) are aggregated to form a single PCIe link with, for example, individual data blocks striped across the N lanes. Conversely, each of the N lanes may each be operated as a distinct and independent PCIe link (i.e., through which a serial stream of data blocks is conveyed) in a minimally aggregated or non-aggregated configuration, and in aggregation configurations between those two extremes, two or more PCIe links are implemented by respective lane aggregations (e.g., two links of N/2 lanes each; four links of N/4 lanes each, 8 links of N/8 lanes each, etc.).
Still referring to FIG. 1, the examples at 110 and 150 contrast a conventional lane-multiplexed aggregation with a dedicated-lane aggregation (DLA) approach in which eight lane-dedicated controllers are provided for respective pairs of 16 PCIe lanes. In the conventional approach at 110, a ×16 controller (“×16 Ctrl”) is provided to ensure support for maximum lane aggregation (16 lanes aggregated into one link—no segmentation), with that controller being coupled, via signal multiplexers 112 and 114 to 16 upstream PCIe lanes and 16 downstream PCIe lanes and configurable in ×8, ×4 and ×2 aggregation/segmentation modes. When the ×16 controller is configured for ×8 aggregation, half of the controller inputs and outputs (I/Os, which appear on both sides of the controller in view of its deployment within a retimer) are unused and a ×8 controller (“×8 Ctrl”) is enabled to support the other of two ×8 links. That is, signal multiplexers 112 and 114 route half of the upstream/downstream PCIe lanes to the ×16 controller and the other half to the ×8 controller. Similarly, when the ×16 controller is configured for ×4 aggregation (the example depicted in FIG. 1), 24 out of the ×16 controller's 32 I/Os are unused, half of the ×8 controller's 16 I/Os are unused, and two ×4 controllers (“×4 Ctrl”) are enabled. When configured for ×2 aggregation—the minimum aggregation (maximum segmentation) in the FIG. 1 example—28 of the ×16 controller's 32 I/Os are unused, 12 of the ×8 controller's 16 I/Os are unused, 4 out of each ×4 controller's 8 I/Os are unused and four ×2 controllers (“×2 Ctrl”) are enabled. Thus, aside from the complexity and signal integrity challenges of routing high-bandwidth signaling lanes (which, after deserialization may include, for example, 32 conductors per direction per lane (or more) and thus 1024 conductors on each side of the configurable controllers) through a signal multiplexer to as many as four different controllers (×16, ×8, ×4, ×2), 60% of the total number of controller I/Os (as well as corresponding internal circuitry for those I/Os) are unused no matter the aggregation configuration.
In the lane-dedicated retimer architecture at 150, by contrast, no lane multiplexing is required on either side of the controller, dramatically simplifying the critical data path and avoiding the timing skew, latency penalty and signal degradation that plague point-to-multipoint multiplexing schemes. In the depicted embodiment, each of eight lane-dedicated controllers 151 is coupled to a respective, dedicated pair of PCIe lanes and thus naturally implement eight ×2 PCIe links (minimum aggregation, maximum segmentation in this example). When lane aggregation greater than ×2 is required, actions within individual lane-dedicated controllers 151 (“LD” controllers or “LDCs”) are coordinated by an aggregation engine 155 to carry out time-critical inter-lane actions, including lane-to-lane timing deskew as discussed in greater detail below. In one embodiment, aggregation engine 155 additionally programs a configuration register within each of lane-dedicated controllers 151 to implement a desired aggregation (or segmentation)—for example, by programming a lane aggregation code (indicating for example, full ×16 lane aggregation into a single link, two ×8 links, four ×4 links or 8×2 links) or by programming a lane mask that indicates, for each LD controller, the contribution of its dedicated lanes to a ×2, ×4, ×8 or ×16 link. In the depicted example, aggregation engine 155 has programed each of LD controllers 151 for operation in a ×4 aggregation and thus four PCIe links in which each neighboring pair of LD controllers is coordinated to effectuate ×4 link control.
FIG. 2 illustrates a more detailed embodiment of a retimer 170 having lane-dedicated controllers 171 and aggregation engine 173, together with physical media attachment (PMA) and physical coding sublayer blocks 175 for each lane on both upstream and downstream pseudo ports (176, 178). As shown for example in detail view 180, each PMA/PCS block 175 includes an input deserializer 181 that converts a 32 Gbps (32 gigabits per second) serial data stream received via a differential signaling pair into a 1 GHz stream of 32-bit wide data words, outputting that 1 GHz stream to PCS 183 which, in turn, reverses a 128b/130b encoding to produce a stream of 128 bit blocks (e.g., output in four successive sets of 32 bits at 1-nanosecond unit intervals). An interface 185 implemented by a set of data input/output registers and related circuitry according to a PIPE (Physical Interface for PCI Express) specification, registers the decoded data stream at the input of the corresponding LD controller. Though not specifically shown, the PMA/PCS may also perform clock recovery (i.e., synthesizing a clock based transitions in the incoming data stream on each lane) and produce framing signals (i.e., marking the boundary of each 128-bit “data block” or “ordered set” block) and others, outputting the recovered clock, block-framing signal and others for consumption to the LD controller via PIPE interface 185. Also, as discussed below, in a number of embodiments, a clock selection circuit is provided to select, in accordance with the lane aggregation configuration, one or more operating clocks from among the multiple clocks recovered from constituent PCIe lanes of a given link—the one or more operating clocks to be applied within the LD controllers and transmit path within the downstream PCS/PMA blocks.
Still referring to the PMA/PCS example at 180, an outbound PIPE interface 191, PCS 193 and serializer 195 perform essentially reverse operations to those of the input signal path (i.e., registering signals from the LD controller, 128b/130b-encoding the 128-bit block stream to produce an outbound 130-bit block stream and then serializing the 32-bit-wide 1 GHz encoded block stream for transmission on the outbound differential pair of the subject PCIe lane. In one embodiment, the aforementioned data-recovered clock (and/or derivations or subdivisions thereof) is applied within the deserializer, 130b-to-128b PCS and output PIPE, while a clock recovered from a corresponding downstream PCS/PMA block is applied within the input PIPE, 128b/130b PCS and serializer—an approach that avoids the complexity and latency penalty of a plesiochronous clock domain crossing in a given data flow direction. Other clocking architectures may be used in alternative embodiments.
In the FIG. 2 embodiment and those presented below, aggregation engine 173 communicates with each of the lane-dedicated controllers 171 (each of which is dedicated to two lanes in the depicted example—there may be more or fewer dedicated lanes per controller in alternative embodiments) via a set of controller-shared buses that include a high-speed synchronization bus (“Sync Bus”), somewhat lower speed interrupt bus (“Int Bus”) and even lower speed control/status bus (“Ctrl/Stat Bus”). The aggregation engine may additionally communicate with the upstream and downstream PMA/PCS blocks, for example, to trigger reset and/or calibration operations, control block framing, etc.
FIG. 3 illustrates a more detailed embodiment of a synchronization bus and its interconnection between a set of lane-dedicated controllers 2010-2017 (collectively and interchangeably “201”) and aggregation engine 203. In the example shown, the aggregation engine and each of the N=8 LD controllers 201 drives a respective, dedicated one of N+1 sync bus lines and listens to (i.e., receives) signals conveyed on the other N sync bus lines—that is, each of the N+1 sync bus lines are coupled to N+1 functional circuit blocks (aggregation engine+N LD controllers) and driven by a dedicated one of those functional blocks and monitored by the other N functional blocks. In alternative embodiments (and particularly where the number of LD controllers (N) exceeds practicable sync-bus-line fan out), two or more Sync bus lines may be provided to convey the same sync bus signals to different subsets of the functional units (e.g., aggregation engine drives two identical sync bus signals on lines coupled to respective subsets of the LD controllers).
In the FIG. 3 embodiment, each LD controller 201 includes a sync bus interface (e.g., as shown at 2050, 2057), programmable configuration register 207 and finite state machine 209 (or sequencer or other control circuitry), and identifier (ID) interface 211. As shown, individual inputs of the ID interface are strapped/soldered or otherwise connected to logic high and low reference voltages (e.g., VDD and ground in a complementary metal oxide semiconductor (CMOS) implementation) to set a unique identifier per LD controller—a respective one of the values between 0 and 7 in this N=8 example (i.e., ‘000b’, ‘001b’, ‘010b’, . . . , ‘110b’, ‘111b’, where ‘b’ signifies a binary value). The ID strapping enables aggregation engine 203 or other control circuitry to selectively/exclusively address an individual one of the LD controllers and thereby program the configuration register within each LD controller with a potentially unique value. In an exemplary implementation shown at 215, the programmable register 207 within each LD controller includes an enable field 217 (e.g., used to selectively disable one or more of the LD controllers when not needed in a given system configuration or under certain operating conditions) and a link mask field 217, the latter to be programmed with a link mask value that indicates an aggregation setting for each of the LD controllers and thus which of possibly multiple links to which a given LD controller and its dedicated lanes are allocated.
FIG. 4 illustrates exemplary link mask programming for each of four different aggregation (or segmentation) configurations: single ×16 link, two ×8 links, four ×4 links or eight ×2 links. In the example shown, the link mask value includes 16 bits—one for each of 16 lanes—that are individually set to 1 or 0 to indicate whether a corresponding one of 16 PCIe lanes is included within the PCIe link to which the host LD controller is committed. Thus, in the ×16 aggregation (all lanes committed/allocated to a solitary link—no segmentation), all bits of the link mask are programmed to ‘1’ for each of the eight LD controllers (LDC ID=0-7). In this configuration, each of the LD controllers monitors the sync bus outputs from all other LD controllers to carry out time-critical operations—most notably lane-to-lane deskew as discussed below. More specifically, referring to the exemplary sync bus interfaces shown in detail views 225 and 227 (for LD controllers 2010 and 2017, respectively), each LD controller 201 monitors sync bus inputs in0-in6 (i.e., inputs from the other 7 LD controllers) as well as the sync bus input (inA) from aggregation engine 203. When configured for two ×8 links, half of the LD controllers (e.g., controllers 0-3) and their corresponding PCIe lanes are allocated to a first ×8 link (i.e., via link-mask programming of value ‘0000000011111111’) and the other half of the LD controllers (i.e., controllers 4-7) and their corresponding lanes are allocated to a second ×8 link (link-mask programmed to ‘1111111100000000’) and, in the exemplary sync bus wiring of FIG. 3, all LD controllers monitor the first three sync bus inputs (in0-in2) and ignore/disable the sync bus inputs from other LD controllers (i.e., LD controllers 0-3 drive respective outputs coupled to one of the in0-in2 inputs of each counterpart controller within that set of four). In the four ×4 aggregation setting, each respective pair of LD controllers (i.e., 0/1, 2/3, 4/5, 6/7) and their corresponding PCIe lanes are allocated to one of four ×4 PCIe links through programming of link masks to ‘0000000000001111’ (LD controllers 0 and 1), ‘0000000011110000’ (LD controllers 2 and 3), ‘0000111100000000’ (LD controllers 4 and 5) and ‘1111000000000000’ (LD controllers 6 and 7). In this four-link (each with 4 lanes) aggregation configuration and with the sync bus wiring per the FIG. 3 example, each of the LD controllers monitors the sync bus input from its paired counterpart via in0 and ignores the inputs from all other LD controllers. In the eight ×2 aggregation setting (8 PCIe links with two lanes each), each of the LD controllers is programmed with a link mask corresponding to its dedicated lane pair (i.e., ‘0000000000000011’ for LD controller 0, ‘0000000000001100’ for LD controller 1, . . . , ‘1100000000000000’ for LD controller 7) and, as there is no aggregations of lanes dedicated to different controllers, ignores the sync bus inputs from all other LD controllers.
Though not specifically shown in FIG. 4, various alternative aggregation configurations may be programmed via the link mask (with corresponding difference in monitored SB inputs), including configurations in which non-uniform numbers of lanes are allocated/committed to respective PCIe links (e.g., one ×8 link, two ×4 links; one ×4 link, six ×2 links, etc.), and/or configurations in which lanes dedicated to non-adjacent/non-neighboring LD controllers are aggregated (e.g., ×4 link formed by aggregation of lanes dedicated to controller 0 with lanes dedicated to controller 2), the latter providing aggregation options during testing or upon failure of one or more LD controllers. Also, while a 16-bit link mask is shown for clarity, the mask may be reduced to an N/M-bit mask (where N is the number of lanes and M is the number of lanes per LD controller) and thus an eight-bit link mask in the N=16 lane, M=2-lane-per-controller example carried forward from FIG. 1 (i.e., each of the eight bits indicating the allocation of a controller's two dedicated lanes to a given link). Further, the correspondence between a given LD controller and the lane(s) to which it is dedicated may be implicit (rather than explicitly represented) in the link mask so that one or more bits shown for a controller's dedicated lanes may be omitted from the link mask (e.g., 14-bit link mask in which LD controller implies two ‘1’ bits at a position within the link mask corresponding to its ID). In yet other embodiments, the link mask may be replaced by an encoded aggregation setting (e.g., two bits to indicate one of the following four aggregation settings: ×16, ×8, ×4, ×2) in which the lanes dedicated to a given controller are impliedly included within a link according to the aggregation setting (e.g., in ×8 configuration each LD controller monitors sync bus inputs in0-in2; in ×4 configuration, each LD controller monitors sync bus input in0).
FIG. 5 illustrates exemplary coordination between an aggregation engine and lane-dedicated controllers (e.g., implemented according to embodiments discussed above) to remove timing skew between symbol streams flowing on respective lanes of a link—an inter-lane deskew operation to align incoming symbol streams on a block boundary (e.g., an ordered-set boundary). Because lane-to-lane misalignment at the PIPE interface (i.e., as shown at FIG. 2) may be as small as a bit time (symbol time or unit interval), time-critical operations that require same-clock-cycle (e.g., clock-edge-synchronized) action by two or more LD controllers are coordinated via the synchronization bus, while less time sensitive actions are coordinated via the control/status bus and/or interrupt bus. Thus, in the FIG. 5 embodiment, aggregation engine commences an inter-lane deskew within an aggregated set of LD controllers (i.e., controllers for lanes configurably aggregated into a single PCIe link) at 251 by instructing those controllers via the control/status bus (or interrupt bus) to begin monitoring their respective aggregation-engine inputs (inA as shown in controller sync bus interfaces 225 and 227 of FIG. 3) for a state-transition signal. The LD controllers receive the aggregation-engine instruction at 261 and begin monitoring their inA inputs for the state-transition signal (e.g., change in logic level at the inA input from high to low or low to high), looping at 263 until detected. In one embodiment, the longest flight time (worst case propagation delay from source to destination) across any line of the sync bus is less than a clock cycle or unit interval (e.g., less than shortest data-valid interval on individual lanes of the link) so that, when the aggregation engine toggles its sync bus output at 253 (driving cA from low to high or high to low), all LD controllers simultaneously (within a unit interval) transition to a deskew-marker search state (i.e., affirmative determination at 263).
In the inter-lane deskew strategy of FIG. 5, individual LD controllers monitor traffic on their dedicated lanes for deskew markers—for example, a skip ordered set (SKPOS) conveyed in the incoming block stream—and buffer the stream of symbols propagating on each lane from the point of deskew marker detection (on that lane) until deskew markers have been detected on all lanes of the aggregation set. This marker-triggered data buffering effectively sets a first-in-first-out (FIFO) buffer depth for each lane according to the degree by which traffic on that lane leads traffic on the slowest (last-marker-found) lane so that, upon last-marker detection, the LD controllers may enable through-FIFO data flow to align the symbol streams on all lanes of the link on the same block boundary. Accordingly, upon transitioning to the deskew-marker search state, each LD controller concurrently monitors both the Sync bus inputs from other LD controllers in the same aggregation set and the symbol stream on the controller's dedicated lanes for respective deskew markers (i.e., as shown at 265), maintaining a tally of the total number of lanes of the link for which deskew markers have been found (lane count) and a tally of the number of the controller's dedicated lanes for which markers have been found (local count). Each LD controller responds to detection of a deskew marker on a local lane (affirmative determination at 267) by incrementing both the local count and the lane count, and also enabling FIFO buffer loading for the subject lane as shown at 269. If the local count indicates that deskew markers have been detected on all local lanes—that is, local count >1 (affirmative decision at 271) in the two-lanes-per-controller example presented above—the LD controller asserts its sync bus output at 273 to notify other LD controller(s) within the aggregated set of the completed local marker detection. When an LD controller detects a sync bus assertion at one of its monitored Sync bus inputs at 275 (i.e., all or a subset or none of the sync bus inputs in accordance with aggregation configuration as show, for example, in FIG. 5), the LD controller increments the lane count by two (279) to reflect the detection of deskew markers on the two lanes dedicated to the sync-bus-asserting controller (more generally to increment by M at 279 according to the number of lanes dedicated to the signal-asserting LD controller). After asserting the sync bus output at 273 or incrementing the lane count at 279, the LD controller determines whether deskew markers have been detected for all lanes of the aggregated set (e.g., by comparing the lane count to the number of lanes within the aggregation set configuration as shown at 281). If deskew markers have not been found for all lanes of the aggregated set, operational flow continues at monitoring operations 267 and 275 (or at least one of those two monitoring operations according to lane count value). If the determination at 281 is affirmative, then the deskew marker has been detected for the most latent lane (as well as all others) and FIFO flow-through is enabled at 281 (e.g., by enabling the FIFO buffer for each lane, if loaded at all, to henceforth be unloaded as new data is loaded) to conclude the deskew operation.
Still referring to FIG. 5, the aggregation engine monitors sync bus inputs from aggregated LD controllers until all LD controllers within the aggregated set have asserted their sync bus outputs (i.e., monitoring at 255, looping until all markers found at 257). At this point, the aggregation engine deems the link deskew to be complete and may signal an imminent state change and/or other information to the LD controllers (e.g., via control/status bus or interrupt bus) to make ready for other link management operations and/or live traffic flow.
FIG. 6 illustrates a lane deskew operation within a four lane link controlled by two LD controllers (each controller being dedicated to a respective pair of lanes within the 4-lane link), showing traffic that precedes and succeeds the deskew marker on a given lane with and without hashing, respectively. The status of the local counter, lane counter, and per-lane FIFOs maintained by the two LD controllers is shown at 281 and 283, respectively, and progressively updated (repeating the lanes and status information downward across the drawing) as events occur in succession at times t0-t4.
At time t0, the aggregation engine asserts its Sync bus output (i.e., signal cA in FIG. 3) to transition the two LD controllers simultaneously into the deskew-marker search state. At this point (or in response to transitioning in to the deskew-marker search state), each LD controller zeroes its local count and lane count values, and disables FIFO load and unload (LD=0, UL=0) for each of its two dedicated lanes. At time t1, the LD controller for lanes 2/3 detects a deskew marker on lane 3 and responsively (i) increments the local count and lane count, and (ii) enables FIFO loading for lane 3 (LD=1). At t2, the lane 0/1 LD controller detects a deskew marker on lane 1 and thus increments the local count and lane count and enables lane 0 FIFO loading (LD=1 for lane L0). Note also that the data stream arriving on lane 3 between times t1 and t2 has been loaded into the lane 3 FIFO as marked by the shading at 285—the loaded data remains resident within the FIFO (is not unloaded or otherwise output) at this point and will continue to accumulate, setting a fill depth of the lane 3 FIFO according to the skew between lane 3 and the slowest (most latent) lane—lane 2 in this example. At t3 (after the lane 3 FIFO has filled further and the lane 0 FIFO has begun to fill), the lane 0/1 LD controller detects a deskew marker on lane 2 and thus increments the local count and lane count—in this case asserting the sync bus output to signify that deskew markers have been detected on all (both) lanes dedicated to the lane 0/1 LD controller. The lane 2/3 LD controller responds to the sync bus signal assertion (e.g., detected at in0 in the FIG. 4 sync bus interface example) by incrementing its lane count by two. At t4, after the FIFOs for lanes 0, 1 and 2 have been filled to varying degrees (according to their respective deskew-marker displacements from that of the slowest lane), the lane 2/3 controller detects a deskew marker on lane 2 and responsively (i) increments the local count and lane count (to 2 and 4, respectively), and (ii) asserts its sync bus output in view of the completed local-lane marker detection. The lane 0/1 controller increments its lane count from 2 to 4 in response to the sync bus signal assertion (i.e., by the lane 2/3 controller) so that both LD controllers have lane counts that match the lane aggregation count and thus transition the now-loaded FIFOs for lanes 0, 1 and 3 to a flow-through state (e.g., by enabling those FIFOs to be both loaded (LD=1) and unloaded (UL=1) during each succeeding unit interval. The effect of the FIFO flow-through is shown at 290—effectively moving the buffered data for lanes 0, 1 and 3 ahead of incoming traffic (which will continue to be loaded into and thus flow through the lane FIFO) so that the deskew markers for all aggregated lanes are aligned—the desired and deskewed timing alignment for the link.
FIG. 7 illustrates an alternative LD-controller/Sync-bus implementation in which each LD controller 3010-3017 drives a respective sync-bus signal per dedicated lane (two sync-bus outputs per LD controller 301 in the depicted ×2 controller example) so that the sync bus includes one signal line per PCIe lane plus at least one signal line driven by the aggregation engine (i.e., signal cA) and thus 17 signal lines in the 16-lane example shown. As shown in the exemplary sync-bus interface and internal LD controller logic (e.g., within FSM) at 305, each LD controller asserts a respective “marker-detect” signal on either output line out0 or out1 in response to detecting a deskew marker on the corresponding dedicated lane (asserting both out0 and out1 when markers have been detected on both lanes). The sync bus outputs of each LD controller are coupled to the sync bus inputs of all other controllers so that, in addition to asserting marker-detect status for each of its own lanes, each controller receives fourteen sync bus signals corresponding to the fourteen lanes managed by the other LD controllers. As shown, the sixteen marker-detect signals (the fourteen incoming and the two self-generated) are supplied to a multiplexer 307 which organizes the signals according to the LD controller ID to yield ID-aligned marker-detect signals c0-c15 at the multiplexer output, with each of those signals corresponding to the like-numbered PCIe lane. As an example, within the LD controller for lanes 0 and 1 (i.e., controller 3010), c0 and c1 are driven by the internally generated marker-detect signals, while c2 and c3 are driven by the marker-detect signals from the lane 2/3 controller, c4 and c5 are driven by the marker-detect signals from the lane 4/5 controller and so forth. By contrast, in LD controller 3017 (i.e., the controller for lanes 14 and 15), c14 and c15 are driven by the internally generated marker-detect signals, while c0 and c1 are driven by the marker-detect signals from the lane 0/1 controller, c2 and c3 are driven by the marker-detect signals from the lane 2/3 controller, and so forth.
Still referring to detail view 305 (FIG. 7), flow enable logic 309 enables FIFO flow-through operation (i.e., by asserting enable-unload signal, enU) in response to assertion of all marker-detect signals for a given link aggregation (i.e., the link aggregation that includes the lanes managed by the host LD controller). In the depicted embodiment, for instance, signals c0-c15 are ORed with the complements of link mask bits (i.e., LM[0]-LM[15]) within respective OR gates 315 to produce a masked-set of marker-detect signals at the inputs of AND gate (so that the masked marker-detect signals for lanes not included in the aggregation are always high and thus ignored) which, in turn, asserts the FIFO unload signal (enU) as soon AND gate all marker-detect signals for the aggregated lanes have been found. Overall, the signal multiplexer 307 structure and flow enable logic 309 impose a mere handful gate delays (picoseconds each) between sync-bus interface and output of AND gate 317 so that the enable-unload signal is asserted immediately after assertion of the final marker-detect signal for a given lane aggregation (i.e., final deskew marker found), thus enabling transition from FIFO load/bypass status to FIFO flow-through without interrupting or delaying the data flow path on the most latent link (i.e., avoiding any latency penalty that may be incurred in the counting and decision-making operations of the FIG. 5/6 embodiments). Latency may be further reduced in alternative embodiments by omitting multiplexer 307 and providing, instead, a respective sync-bus line (and sync-bus signal receiver) for each of the marker-detect signals. In a modification of the FIG. 7 implementation, for instance, each LD controller 301 includes 16 inputs to receive respective sync-bus signals c0-c15 (i.e., each LD controller both outputs and receives the marker-detect signals for the lanes to which it is dedicated) via sync-bus lines dedicated to respective lanes. That is, the sync-bus line conveying c0 is coupled to a “c0 input” within each of the LD controllers, the c1 sync-bus line is coupled to the c1 input within each LD controller, and so forth, so that, within a given LD controller, no multiplexing is required between the sync-bus inputs and flow-enable circuit 309.
FIG. 8 illustrates an embodiment of a deskew FIFO circuit 321 that may be deployed within individual LD controllers to enable the above-described deskew operations—that is, one deskew FIFO 321 for each flow direction for each lane and thus four deskew FIFOs per LD controller in a retimer having a respective controller per pair of lanes. As shown, deskew FIFO 321 includes a first-in-first-out storage 323 (with each constituent storage element 325 being, for example, 32 bits wide to accommodate deserialized data symbols), a FIFO controller 327 that issues control signals to FIFO storage 323 in response to load and unload signals from the host LD controller, and a path multiplexer 329 to route either the FIFO storage output or the incoming symbol stream to downstream circuitry. In the embodiment shown, FIFO storage 323 is operated as a shift register with a configurable load point established by a tail pointer (“tail”) output from FIFO controller 327. In one embodiment, FIFO controller 327 initially points the tail pointer to the head element of the FIFO storage (e.g., rightmost one of elements 305) and responds to a “Load” signal assertion by (i) asserting a load-enable signal (enL) to enable incoming traffic (e.g., a 32-bit data word) to be clocked into the FIFO storage element selected by the tail pointer and (ii) advance the tail pointer to select (point to) the preceding storage element within the FIFO. Through this operation, the FIFO depth (i.e., amount of data loaded into storage elements between FIFO head and tail) is progressively increased as constituent storage elements 325 are successively loaded with inbound data. The enable-unload (enU) output from FIFO controller 327 remains deasserted at this point so that no data is evicted from the FIFO storage 323 and the path multiplexer 329 forwards the incoming traffic stream to the FIFO circuit output. When the host LD controller asserts the FIFO unload signal (“Unload”) to establish FIFO flow-through operation, FIFO controller 327 asserts the enable-unload signal to enable content at the head of FIFO storage 323 to be output from the FIFO circuit via path multiplexer 329 and to shift the remaining contents of FIFO storage 323 forward from tail-pointer location to FIFO head. During the flow-through operation (unload asserted), FIFO controller 327 holds the tail pointer steady (i.e., does not adjust the tail pointer) so that the FIFO fill depth remains unchanged as data is shifted through the FIFO and thus adds latency (for the purpose of inter-lane deskew) to the outbound data stream according to the FIFO depth. As discussed below, FIFO circuit 321 may include circuitry to freeze the circuit output during FIFO fill (i.e., loading the FIFO storage, but not yet unloading) and may be implemented with alternative control and/or storage circuitry. For example, instead of operating FIFO storage elements 325 as a shift register, FIFO storage 323 may be implemented by a ring buffer for which the FIFO controller 327 manages head and tail pointers to enable FIFO load and flow-through operation—advancing the head and tail pointers during FIFO flow through rather than shifting data between storage elements 325.
FIG. 9 illustrates an exemplary data progression from time t0 to time t6 with respect to deskew FIFOs for each of four lanes (for one flow direction) within a ×4 aggregated link. Assuming the data pattern shown at 330 for the four lanes (i.e., in which the shaded blocks containing values b0-b3 constitute a SKP ordered set and thus a deskew marker, and in which like references ‘a1’, ‘a2’, . . . ‘c0’, etc. within the traffic for different lanes indicate values that, but for inter-lane skew, would be unit-interval-aligned), traffic flows past the FIFO for each lane until the SKP ordered set is detected. Upon SKPOS detection within a given lane, FIFO load commences and continues for that lane until the final SKP ordered set is detected (in lane 2 in this example). Thus, loading into the lane 3 FIFO commences at time t2 (after SKPOS detection at time t1), loading into the lane 0 FIFO commences at time t3 and loading into the lane 1 FIFO commences at time t4. After the final SKPOS detection in lane 2 at time t4, FIFO unload and thus FIFO flow-through is enabled for all data buffering lanes (0, 1 and 3 in this example) so that the SKP OS is forwarded to downstream circuitry simultaneously on all four lanes (i.e., starting with data word b0 in this example), thus rendering a deskewed link output from time t5 forward.
In the FIG. 9 embodiment, commencement of FIFO loading (without unloading) for a given lane results in repetition of a given data word in the output stream until FIFO unloading is enabled (e.g., as can be seen for repetition of ‘a3’ at the output of the lane 0 FIFO structure at times t3 and t4), effectively idling the data stream for that lane while buffering and awaiting the deskew marker for the most latent lane. In one implementation, the FIFO controller (e.g., element 327 of FIG. 8) outputs a hold signal to downstream circuitry (e.g., register within the data flow path) for the subject lane to suspend data-word forwarding. In an alternative embodiment (e.g., as may be applied in next-generation PCIe and/or other signaling systems in which physical signal media may be configurably aggregated), the data word at the head of the FIFO storage is output repeatedly to effect the hold (i.e., so that, for example, ‘b0’ would be repeated instead of ‘a3’ at the FIFO mux output as shown for lane 0 at times t3 and t4). Also, while the FIFO multiplexer (e.g., corresponding to multiplexer 329 of FIG. 8) for the most latent lane (lane 2 in the FIG. 9 example) is shown as unchanged at time t5 (contrast the FIFO multiplexer switch for all data-buffering lanes), the FIFO multiplexer may be switched also for that lane upon detection of the final deskew marker, with management of the FIFO storage (i.e., by the FIFO controller 327 of FIG. 8) effecting FIFO storage bypass.
FIG. 10 illustrates an embodiment of a clock selection circuit 370 that may be employed with the lane-dedicated controllers discussed above to enable clock selection and forwarding in accordance with a pre-programmed link aggregation configuration and lane-swap value. In the depicted 16 lane, 8 LD-controller example, clock-data recovery circuits 372 recover respective clock signals from the symbol streams of each incoming lane (i.e., “clock 0”, “clock 1”, . . . , “clock 15”), forwarding those clock signals to a clock-swap circuit 375. Clock-swap selects, for each of four different aggregation settings (×2, ×4, ×8, ×16) a clock from either the first lane or the last lane of the various aggregation sets, outputting the selected “link clocks” to a clock selection circuit 377. More specifically, in a ×2 aggregation (i.e., eight ×2 links), multiplexers 3810-3817 within clock-swap circuit 372 select the clock recovered from either of two neighboring lanes (e.g., by CDR circuits for lanes 0 and 1 in the case of multiplexer 381o) in accordance with respective bits of a swap value (“swap[7:0]”) programmed within configuration register 388. Similarly, in a ×4 aggregation (four ×4 links), multiplexers 3830-3833 select the clock recovered from either of two outer lanes (e.g., lanes 0 and 3; lanes 4 and 7; lanes 8 and 11; lanes 12 and 15) in accordance with bits 0-3 of the swap value; in a ×8 aggregation (two ×8 links), multiplexers 3850 and 3851 select the clock recovered from either of two outer lanes (lanes 0 and 7; lanes 8 and 15) in accordance with bits 0 and 1 of the swap value; and in the ×16 aggregation (single ×16 link), multiplexer 387 selects the clock recovered from either of outer lanes 0 and 15 in accordance with bit 0 of the swap value.
Continuing with FIG. 10, multiplexers within clock selector 377 select, for each link implemented in accordance with the aggregation setting, a single clock from among the clocks output from clock-swap circuit 375, delivering that clock to all the LD controllers within the link (e.g., LD controllers 0-7). In the depicted example, a clock-selection field (sel[2:0]) within register 388 is set to one of four settings in accordance with the link aggregation configuration (e.g., either eight ×2 links, four ×4 links, two ×8 links or one ×16 link in the example shown at 390, though configuration into links of non-uniform lane count may be supported in alternative embodiments), such that respective bits of the selection field may be supplied to control inputs of clock-selection multiplexers 3910-3917 (sel[0]), 3930-3933 (sel[1]) and 3950-3951 (sel[2]). If all the selection bits are low (×16 aggregation), the output of the ×16 clock-swap multiplexer is supplied to all LD controllers, cascading through all three tiers of multiplexers 395, 393 and 391.
Still referring to FIG. 10, the inputs to the clock-swap multiplexers (3810-7, 3830-3, 3850-1, 387) are routed in a balanced fashion that provides the same capacitive loading on the CDR clock outputs. Similarly, clock signals output from the clock-swap multiplexers are routed through the clock-selection multiplexers (3950-1,3930-3, 3910-7) in a binary tree topology that enables both balanced multiplexer placement and clock conductor routing—ensuring that the fanned-out instances of a selected clock arriving at inputs of respective LD controllers allocated to a given link aggregation or segment (i.e., one of eight ×2 link segments, one of four ×4 link segments, etc.) are aligned with nominally zero skew in any permissible aggregation or lane swap configuration.
Referring to FIGS. 1-10 generally, one or more programmed microcontrollers and/or dedicated hardware circuits (e.g., finite state machines, registered or combinational circuits, etc.) may be provided to implement and/or control all or part of the various architectural and functional elements within the dedicated-lane controller architectures presented herein (e.g., to implement any one or more of the lane-dedicated controllers, aggregation engine, and/or circuitry within the host integrated circuit component that interacts with the controllers or aggregation engine. Additionally, any or all of those architectural/functional elements (including the entirety of a dedicated-lane component architecture, such as a retimer architecture, endpoint architecture or root complex architecture) may be described using computer aided design tools and expressed (or represented), as data and/or instructions embodied in various computer-readable media, in terms of their behavioral, register transfer, logic component, transistor, layout geometries, and/or other characteristics. Formats of files and other objects in which such circuit expressions may be implemented include, but are not limited to, formats supporting behavioral languages such as C, Verilog, and VHDL, formats supporting register level description languages like RTL, and formats supporting geometry description languages such as GDSII, GDSIII, GDSIV, CIF, MEBES and any other suitable formats and languages. Computer-readable media in which such formatted data and/or instructions may be embodied include, but are not limited to, computer storage media in various forms (e.g., optical, magnetic or semiconductor storage media).
When received within a computer system via one or more computer-readable media, such data and/or instruction-based expressions of the above described circuits can be processed by a processing entity (e.g., one or more processors) within the computer system in conjunction with execution of one or more other computer programs including, without limitation, net-list generation programs, place and route programs and the like, to generate a representation or image of a physical manifestation of such circuits. Such representation or image can thereafter be used in device fabrication, for example, by enabling generation of one or more masks that are used to form various components of the circuits in a device fabrication process.
In the foregoing description and in the accompanying drawings, specific terminology and drawing symbols have been set forth to provide a thorough understanding of the disclosed embodiments. In some instances, the terminology and symbols may imply specific details not required to practice those embodiments. For example, the various signaling rates and related frequencies, lane counts, path widths, block sizes, encoding/decoding schemes, clock frequencies, aggregation/segmentation options, numbers of selectable/swap-able clocks or clock phases, and so forth are provided for purposes of example only—higher/lower/alternative rates, frequencies, numbers of phases, frequency divisors/multipliers, aggregation settings (including single-lane aggregation and non-uniform lane counter per link, lane counts, block sizes, encoding schemes etc. may be implemented in all cases. Similarly, signaling link parameters, protocols, configurations may be implemented in accordance with any practicable open or proprietary standard (PCIe being but one example) and any version of such standard. Links or other interconnection between integrated circuit devices or internal circuit elements or blocks may be shown as buses or as single signal lines. Each of the buses can alternatively be a single signal line (e.g., with digital or analog signals time-multiplexed thereon), and each of the single signal lines can alternatively be a bus. Signals and signaling links, however shown or described, can be single-ended or differential. Logic signals shown as having active-high assertion or “true” states, may have opposite assertion states in alternative implementations. A signal driving circuit is said to “output” a signal to a signal receiving circuit when the signal driving circuit asserts (or de-asserts, if explicitly stated or indicated by context) the signal on a signal line coupled between the signal driving and signal receiving circuits. The term “coupled” is used herein to express a direct connection as well as a connection through one or more intervening circuits or structures. Integrated circuit device or register “programming” can include, for example and without limitation, loading a control value into a configuration register or other storage circuit within the integrated circuit device in response to a host instruction (and thus controlling an operational aspect of the device and/or establishing a device configuration) or through a one-time programming operation (e.g., blowing fuses within a configuration circuit during device production), and/or connecting one or more selected pins or other contact structures of the device to reference voltage lines (also referred to as strapping) to establish a particular device configuration or operational aspect of the device. The terms “exemplary” and “embodiment” are used to express an example, not a preference or requirement. Also, the terms “may” and “can” are used interchangeably to denote optional (permissible) subject matter. The absence of either term should not be construed as meaning that a given feature or technique is required.
Various modifications and changes can be made to the embodiments presented herein without departing from the broader spirit and scope of the disclosure. For example, features or aspects of any of the embodiments can be applied in combination with any other of the embodiments or in place of counterpart features or aspects thereof. Accordingly, the specification and drawings are to be regarded in an illustrative rather than a restrictive sense.