In electronic and optical systems, a bus is a subsystem that transfers data, power, and/or clock signals between electronic or optical components. A parallel bus involves several individual conductors or data channels that carry different signals simultaneously, such as those composing a single digital word, between components.
Buses may transfer signals among a myriad of different components. For example, a given component may use a bus signal from one source at one instant and the bus signal from another source at another instant, where both of the bus signals are received through the same input port at that component.
A bus switch is often used to selectively route bus signals received at input ports of the switch to one or more components connected to output ports of the switch. Traditional parallel bus switch architecture assumes that all signals in the bus have predefined purposes or adhere to a standard bus protocol. For example, the particular arrangement or placement of a signal among the multiple data channels of the parallel bus is indicative of the nature or purpose of that signal. Such bus standards facilitate communication between equivalent or “hot-swappable” data producers and data recipients that adhere to the same standard.
However, in some situations, factors such as board layout considerations and design communication may result in data producers or recipients having parallel buses with signals that do not align. Thus, a traditional parallel bus switch may not seamlessly and effectively transfer signals among such components.
The accompanying drawings illustrate various embodiments of the principles described herein and are a part of the specification. The illustrated embodiments are merely examples and do not limit the scope of the claims.
Throughout the drawings, identical reference numbers designate similar, but not necessarily identical, elements.
As mentioned above, buses are used to transfer data, power, and/or clock signals in electronic and optical systems. Often bus switches are used to selectively route bus signals between system components.
However, traditional parallel bus switch architecture assumes that all signals in the bus have predefined purposes according to a bus standard or protocol to facilitate the communication between equivalent or “hot-swappable” data producers and recipients. In some situations, factors such as board layout considerations and poor design communication may result in data producers and recipients having parallel buses whose signals do not align or do not adhere to the same standard or protocol. Traditional parallel bus switches may not seamlessly and effectively transfer signals among such components.
Some prior solutions require that all data producers and recipients adhere to a strict bus standard or protocol. This is potentially disadvantageous when an existing board does not adhere to those standards or a printed circuit board layout does not provide a way to route the signals to the appropriate location without sufficient signal integrity loss or additional layers on the board.
Other prior solutions require a field programmable gate array (FPGA) be specifically reprogrammed to support a particular configuration of data producers and/or recipients. While this approach may provide a sufficient interface between a data producer, a data recipient and a bus switch, the process of managing FPGA profiles leads to more configuration management hardware for the FPGA, which in some cases incurs significant additional costs. Furthermore, for large FPGA designs, the workflow for creating new FPGA profiles can require a substantial amount of time to complete.
It may be desirable, therefore, to provide a heterogeneous parallel bus switch that can seamlessly interface with data producers and recipients having different bus structures.
Accordingly, the present specification discloses a heterogeneous parallel bus switch having an input bus interface, an output bus interface and an internal standard bus. The heterogeneous parallel bus switch has a first switching module configured to switch individual signals from the input bus interface to predetermined locations on the internal standard bus. The internal standard bus is in communication with a second switching module that is configured to switch the individual signals in the standard bus to the configuration used by the output bus interface.
In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present systems and methods. It will be apparent, however, to one skilled in the art that the present systems and methods may be practiced without these specific details. Reference in the specification to “an embodiment,” “an example” or similar language means that a particular feature, structure, or characteristic described in connection with the embodiment or example is included in at least that one embodiment, but not necessarily in other embodiments. The various instances of the phrase “in one embodiment” or similar phrases in various places in the specification are not necessarily all referring to the same embodiment.
In general, a component outputting a signal is referred to as a data source, and a component receiving and using such a signal is referred to as a data recipient. A particular component may function as both a data source and recipient. The principles disclosed herein will now be discussed with respect to illustrative systems and methods.
Referring now to
In some embodiments, both buses (Input1, Output1) include the same number of data channels, with each data channel in the input bus (Input1) having a corresponding data channel in the output bus (Output1). However, the relative positions of corresponding data channels within the input bus (Input1) and the output bus (Output1) may not align, as described above.
Consequently, the parallel bus switch (100) includes a first switching module (103) that interfaces with an internal standard bus (109). The switching module (103), in various embodiments, may have electronic logic configured to selectively interconnect individual signals from the input bus (Input1) to corresponding conductors on the internal standard bus (109). Consequently, the signals or data channels from the input bus interface (101) in a first arrangement or format can be rearranged to a second arrangement or format that may be needed by a data recipient. The rearranged bus signal is then output through the output bus interface (107) to the output bus (Output1).
A control module (104) may be used to control the operations of the switching module (103). The control module (104) may receive configuration settings from an exterior source, such as a user interface or another electronic component. The control module (104) may then convert the configuration data into a format used by the switching module (103) and transmit the data to the switching module (103) so as to program the switching module (103) to make a particular transformation in the arrangement of the data channels on the bus. In some embodiments, the switching module (103) and control module (104) may be components in a state machine in which the switching module (103) is configured according to certain detected conditions.
Thus, because the format of the buses (Input1, Output1) used with the parallel bus switch may vary in different designs, the switching module (103) is configurable or programmable to account for such variations. In some embodiments, the switching module (103) may be dynamically configured to adapt to changes in an electronic system that occur throughout system operations.
In some embodiments, a second switching module (105) may also be used. As above, the second switching module (105) may have electronic logic configured to selectively interconnect the individual signals on the internal standard bus (109) to corresponding data channels or conductors on the output bus (Output1).
In such embodiments, the first switching module (103) may switch the format of the bus signal from the input interface (101) to a standard format used by the internal bus (109). If needed, the second switching module (105) then switches the format of the bus signal from that standard format to a format used by a data recipient receiving the bus signal from the output interface (107). The input bus signal (Input1) may therefore enter the parallel bus switch (100) through the input interface (101), be switched to an internal bus (109) by the switching module (103), and be switched to a configuration of the output bus (Output1) by the second switching module (105). The bus data may then be transferred to the output bus (Output1) by the output interface (107), where it may be received by a data recipient.
The switching modules (103, 105) may include, for example, predefined multiplexing circuitry or networks of multiplexing circuitry. In various embodiments, the switching modules (103, 105) may include programmable application specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), controllable switch networks, and the like.
The control module (104) may control both the first and second switching modules (103, 105). Thus, the switching modules (103, 105) may respond to electronic signals received from the control module (104) to adjust the configuration of the interconnections between the buses (Input1, Output1) and the internal standard bus (109).
Referring now to
As shown, an illustrative parallel bus switch (200) according to the principles described above may be used to not only provide bus signals received from a data recipient in one configuration to a data recipient in another configuration, but also to selectively switch signals received at one input bus interface (201, 203, 205) to one or more output bus interfaces (207, 209, 211).
Thus, the bus signals (Input1, Input2, InputN) may be selectively routed through the parallel bus switch (200) and provided to the intended destination output interface(s) in the desired format. A controller may dynamically change the routing and bus format configurations in response to user input or detected conditions.
Referring now to
The controller described in the present and subsequent examples of the bus switch architecture is configured to provide input signals to various components in the bus switch. These input signals affect the configuration of the components and the operation of the bus switch. However, some of these input signals may require modification, whether by dynamic modification during switch operations or according to the varying needs of different systems that employ bus switches according to the principles described herein.
In some embodiments, the controller may be a plurality of registers storing values to be used as the input signals. The contents of these registers may be altered by system data or from a user configuration. Additionally, in some embodiments the controller may include an electronic processing element, such as a microcontroller or other logical data circuit. It should be understood, however, that many suitable types of controllers are available and known in the art.
The signals in the internal standard configuration are then received into corresponding dual-port, first in first out (FIFO) electronic queues (313, 315, 317). The FIFO queues (313, 315, 317) are configured to store the data signals present at an input (Din) at a rate determined by a write clock signal (WR_CLK). The input clock signals (InClk1, InClk2, InClk3) corresponding to the buses (Input1, Input2, Input3) are routed to the FIFO queues (313, 315, 317) and used as write clock signals (WR_CLK) to sample the data from the switching modules (301, 303, 305).
By using the input clock signals (InClk1, InClk2, InClk3) corresponding to the input buses (Input1, Input2, Input3), the digital data present on the input buses (Input1, Input2, Input3) can be sampled at the correct moments in time to ensure that accurate representations of the sequential data are stored in the dual-port FIFO queues (313, 315, 317).
The dual-port FIFO queues (313, 315, 317) have output ports (Dout) configured to provide the next bits in a sequence of digital data stored in the queues (313, 315, 317) when indicated by a read clock signal (RD_CLK). In the present example, an internal system clock signal (SysClk) is used for the read clock signal (RD_CLK) at each of the dual-port FlFOs (313, 315, 317). The internal system clock signal (SysClk) is generated by a local oscillator, such as a crystal oscillator, and each of dual-port FIFO queues (313, 315, 317) receives the same system clock signal for read functions.
As each of the input buses (Input1, Input2, Input3) of the present embodiment has its own corresponding clock signal (InClk1, InClk2, InClk3, respectively), the data from the input buses may be provided at different rates. For this reason, among others, the data are cued into the dual-port FIFO queues (313, 315, 317). By using a standard system clock signal (SysClk) for the read clock signals (RD_CLK) in the dual-port FIFO queues (313, 315, 317), asynchronously queued input data may be synchronously transferred from the output ports (Dout) of the dual-port FIFO queues (313, 315, 317) to standard internal buses (319, 321, 323).
To preserve the integrity of the data, the system clock signal (SysClk) must operate at a faster frequency than the fastest of the input clock signals (InClk1, InClk2, InClk3). Thus, the output ports (Dout) of the dual-port FIFO queues (313, 315, 317) are sampled and transferred to the internal standard buses (319, 321, 323) more frequently than the data signals on the output ports (Dout) are transitioning through the data received from the input buses (Input1, Input2, Input3).
The input clock signals (InClk1, InClk2, InClk3) are routed with the internal standard buses (319, 321, 323) to all output ports in the heterogeneous parallel bus switch.
Referring now to
As described previously, the internal standard buses (319, 321, 323) are routed to each of the output ports. In the present output stage (400), the internal standard buses (319, 321, 323) are received by a multiplexer (401). The multiplexer (401) is configured to use a control signal from the controller to selectively route one of the internal standard bus signals (319, 321, 323) through an output signal (403) to the input (Din) of a dual-port FIFO queue (405). The data on the internal standard buses (319, 321, 323) is sampled at the input (Din) of the dual-port FIFO queue (405) and stored in the FIFO queue (405) using the same internal clock signal (SysClk) that was used to place the data on the internal standard buses (319, 321, 323).
The embedded input clock signal (413) is extrapolated from the multiplexer output signal (403) and used as the read clock signal (RD_CLK) in the dual-port FIFO queue (405) to read the data at the output (Dout) of the dual-port FIFO queue (405) after at least M samples have been loaded into the dual-port FIFO where M is a number determined by the fastest clock frequency and its associated jitter. The data read at the output (Dout) of the FIFO queue (405) is routed to a switching module (409) using connection (407). Complementary to the switching modules (301, 303, 305) of the input stage (300,
Referring now to
Referring now to
In Pipeline Stage 0 of the input stage (600), Control[0] serves as a clock signal as the rest of the input bus (602) is sampled at an input port (D) of an electronic registers module (609). Buffers (601, 605, 607, 611) are used to condition signals in preparation for the signal transmission to various modules, thus ensuring correct timing throughout the various pipeline stages. In some embodiments, the buffers may be omitted depending on the implementation technology.
In Pipeline Stage 1, the data in the registers (609) are transferred from an output (Q) of the registers module (609) to the input (in) of an interconnect module (613) when enabled by a controller. The interconnect module (613) converts the parallel data received from the input bus (602) into a standard format used by the system. The interconnect module (613) optionally uses the input clock (WR_CLK), if additional intermediate pipeline stages are needed for timing purposes. The data from the input bus (602) are transferred from an output port (out) of the interconnect (613) to the input port (DIN) of a dual-port FIFO queue (617) using connection (615). When an enable bit (WR_EN) of the FIFO queue (617) is set high by the controller, the data from the input bus are sampled at DIN using Control[0] as the input clock (WR_CLK) for the dual-port FIFO queue (617).
In Pipeline Stage 2, an internal system clock (Sys_Clk) is used to read the data from the dual-port FIFO queue (617) at an output port (DOUT) and transfer the data to bits [39:1] of an internal port bus (623). The original input bus clock signal (Control[0]) is also routed to the internal port bus (623) as bit [0]. When the dual-port FIFO queue (617) has no remaining bus data, an “empty” node (EMPTY) is set high. The status of this “empty” node (EMPTY) is also routed to all output ports via the internal port bus (623). Additionally, in this example, a read enable node (RD_EN) on the dual-port FIFO queue (617) is constantly held high by a digital inverter (619) that is connected to the “empty” node (EMPTY), until the FIFO queue (617) is empty. Once the FIFO queue (617) is empty, the “empty” node (EMPTY) is set high, thereby causing that the read enable node (RD_EN) be set low. The internal port bus (623) is routed to each output port of the heterogeneous parallel bus switch.
Referring now to
During Pipeline Stage 2 in the output phase, a plurality of internal port buses (701), received from each of the input stages of the bus switch, are received into a multiplexer (703). A control signal (705) from the controller selectively routes bits [40:1] of the selected internal port bus (707) to another dual-port FIFO queue (709). Bits [39:1] are sampled into the dual-port FIFO queue (709) using the same system clock signal (Sys_Clk) as was used with the input stage (600,
During Pipeline Stage 3, the bus data is transferred from the output node (DOUT) to an interconnect module (715) using the clock signal in bit[0] (i.e. Control[0]) of the selected internal port bus (707). This signal (bit [0]) passes through a buffer (711) prior to being received at the read clock node (RD_CLK) of the FIFO queue (709) to compensate for delays from the FIFO queue (709) sampling and storing the data. A programmable full (PROG_FULL) node may be used in conjunction with read logic (717) to determine when a read enable (RD_EN) node in the FIFO queue (709) should be enabled to begin reading data from the FIFO queue (709). Once the data has started to flow out of the FIFO queue (709), the queue (709) will not be empty unless an error in the input stream or a controller induced reset occurs. This is true since the original input stream clock is used as the output stream clock, thus compensating for any jitter or frequency shifting, thereby allowing for continuous valid data on the output stream.
The interconnect module (715) is configured to convert the parallel data received from the output node (DOUT) of the FIFO queue (709) into a format used by a data recipient that is to receive the output bus from the parallel bus switch. The interconnect module (715) optionally uses the read clock (RD_CLK), if additional intermediate pipeline stages are needed for timing purposes. The output of the interconnect module (715) is connected to the input nodes (D) of parallel electronic registers (725), where the parallel bus data are stored. The registers (725) may have preset (pre) and clear (clr) nodes that are set by the controller thus enabling static values on the output buffers (729). These registers (725) use the clock signal from bit[0] to sample and store the data, and to output the data through a buffer (729).
Additionally, the clock signal from bit[0] is used to generate a new clock signal using a double data rate register (723), consistent with principles well-known in the art. The double data rate register (723) has two input nodes (D0, D1). In the present example, D1 is set by the controller, along with preset and clear nodes. D0 receives the opposite of D1, using a digital inverter (719). The double data rate register (723) is configured to alternately output at Q the values of D0, and D1. As one of the input nodes (D0, D1) is configured to maintain a digital high voltage (1) and the other is configured to maintain a digital low voltage (0), the output at Q is an alternating sequence of 1's and 0's. Furthermore, since the double data rate register (723) is configured to switch the source of its output at both rising and falling clock edges received from bit[0], the clock signal from bit[0] is regenerated at the output (Q) of the double data rate register (723). By changing the value on D1, the output at Q is phase shifted by 180 degrees, thus making the output clock to data relationship compatible with various types of synchronous clocking methodologies used by the data recipient.
The outputs from the double data rate register (723) and the other registers (725) are combined and output through buffers (727, 729) to a data recipient as a 40 bit bus having 30 data bits and 10 control bits. The 40 bit bus output to the data recipient is in the bus configuration used by the data recipient.
Referring now to
Referring now to
The internal standard bus is then queued (step 905) in a dual-port first in first out (FIFO) register. The data may be queued in the FIFO register using an associated clock signal from the input data. The internal standard bus is then dequeued (step 906) from the FIFO register using an internal system clock signal. The internal standard bus is then routed (907) to a plurality of output ports. An individual output port selects (step 909) the data from other available internal standard buses. This may be done using a multiplexer.
Data is then queued (step 911) from the selected internal standard bus into an output dual-port FIFO using the internal system clock signal. The data is dequeued (step 913) from the output FIFO using the associated clock signal from the input data. The internal standard bus is then switched (step 915) to the appropriate output bus signal configuration.
The appropriate output bus signal configuration may be different from the input bus signal configuration, and may vary in specific implementations. The data is then registered (step 917) on output pads, where the data may then be received by an associated data recipient.
The preceding description has been presented only to illustrate and describe embodiments and examples of the principles described. This description is not intended to be exhaustive or to limit these principles to any precise form disclosed. Many modifications and variations are possible in light of the above teaching.
The present application is related to and claims the priority under 35 U.S.C. §119(e) of U.S. Provisional Patent Application No. 61/002,061, entitled “Heterogeneous Parallel Bus Switch,” filed Nov. 6, 2007, which previous application is hereby incorporated by reference in its entirety.
Number | Date | Country | |
---|---|---|---|
61002061 | Nov 2007 | US |