Technical computing environments are known that present a user, such as a scientist or engineer, with an environment that enables efficient analysis and generation of technical applications. For example, users may perform analyses, visualize data, and develop algorithms. Technical computing environments may allow a technical researcher or designer to efficiently and quickly perform tasks such as research and product development.
Existing technical computing environments may be implemented as or run in conjunction with a graphically-based environment. For example, in one existing technical computing environment that is run in conjunction with a graphically-based environment, graphical simulation tools allow models to be built by connecting graphical blocks, where each block may represent an object associated with functionality and/or data.
The accompanying drawings, which are incorporated in and constitute a part of this specification, illustrate one or more implementations described herein and, together with the description, explain these implementations. In the drawings:
The following detailed description refers to the accompanying drawings. The same reference numbers in different drawings may identify the same or similar elements. Also, the following detailed description does not limit the invention.
In modeling a system in a graphical modeling environment (GME), the system to be modeled may include a multiprocessor system such as a distributed embedded system or a parallel computing system. In a distributed embedded system, each processor may have a defined role and may perform different tasks from other processors. A parallel computing system may include multiple processors packaged as a unit in which a large problem is decomposed to smaller problems that can be run in parallel on the multiple processors.
Graphically represented blocks (i.e., functional elements) that are to be executed by different processors may need to communicate with one another over one or more logical channels that connect the blocks on different processors. A “channel,” when eventually implemented in the run-time environment may correspond to, for example, a low-level local electrical bus, a network connection, or a long distance optical connection.
Models generated with graphical modeling tools may be simulated on a host computer or converted to computer code by the graphical modeling tool. The computer code can then be executed in the target multiprocessor environment. Graphical modeling tools may allow the user to separately specify an architectural model of the physical system, such as the number of processors and the communication channels through which they are connected, and the algorithm that is to be implemented by the model. A final, executable version of the model may then be based on a mapping of the functional model to the architectural model.
Implementations described herein relate to a graphical modeling environment (GME). The GME may be a part of or incorporate a technical computing environment (TCE). The models may include an architectural model that defines a physical or conceptual implementation of a multiprocessor system and a functional model that defines a desired algorithm that is to be implemented by the model. The architectural and functional versions of the model may be combined to create a version of the model that can be deployed in a target environment. In an implementation, inter-process communication (IPC) blocks may be defined that describe a connectivity of functional blocks in a deployed version of the model. The IPC blocks may describe functional properties of the communication, such as the connectivity of the blocks and the communication timing, independently of physical details of one or more communication channels that connect processor nodes in the multiprocessor system. The IPC blocks may then be further customized using an authoring language, as part of an application programming interface (API), to describe deployment details of communication interfaces that attach the processor nodes to one or more communication channels. The communication channels may be defined such that they describe functional properties of the communication, such as Bit Error Rate (BER) or latency, independently of the processor nodes and independently of the IPC blocks which are communicating data over the channels. A functionality of the communication between the processor nodes may be derived based on the communication interfaces and the functional properties of communication. The functionality of communication may be derived, for example, while evaluating or compiling the model. Note that the communication interfaces and the functional properties of the communication may be described in a partial manner such that the GME propagates and derives a functionality of the communication based on partial information.
A “multiprocessor system” may be defined as a computing system in which multiple processors or processor cores communicate over one or more channels to execute a task. Each processor or processor core in a multiprocessor system may be referred to as a “processor,” “processor node,” or “node” herein. Distributed embedded systems and task parallel computing systems are examples of multiprocessor systems.
A “functional model,” as used herein, may refer to a model that implements algorithmic elements in which a designer is interested. Generally, the functional model may be created without regard to implementation details of the physical system that is to implement the model. The “architectural model” or “deployment model,” as used herein, may refer to a target system in which the functional model is to be implemented. The deployment model may generally describe capabilities of the physical system such as its computational resources, memory resources and additional physical devices for which the functional model will be implemented. Consideration of the details of the physical system with respect to the requirements of the algorithmic elements in the functional model may be resolved as part of a mapping of the functional model to the architectural model.
The models described herein may be created in a graphical modeling environment (GME). The GME may incorporate or be part of a technical computing environment that may include any hardware and/or software based logic that provides a computing environment that allows users to perform tasks related to disciplines, such as, but not limited to, mathematics, science, engineering, medicine, business, etc.
The GME may further provide mathematical functions and/or graphical tools or blocks (e.g., for creating plots, surfaces, images, volumetric representations, etc.). In an implementation, the GME may provide these functions and/or tools using toolboxes (e.g., toolboxes for signal processing, image processing, data plotting, parallel processing, etc.). In another implementation, the GME may provide these functions as block sets. In still another implementation, the GME may provide these functions in another way, such as via a library, etc.
The GME may implement an environment that provides for the graphical creation of models that are defined by users to implement desired functionality. Certain aspects of the GME, as it relates to the creation of models, will be described in more detail below.
Workstation 110 may operate as a single detached computing device. Alternatively, workstation 110 may be connected to a network 130, such as a local area network (LAN) or wide area network (WAN) such as the Internet. When workstation 110 is connected to a network, GME 120 may be run by multiple networked computing devices or by one or more remote computing devices. In such an implementation, GME 120 may be executed in a distributed manner, such as by executing on multiple computing devices simultaneously. Additionally, in some implementations, GME 120 may be executed over network 130 in a client-server relationship. For example, workstation 110 may act as a client that communicates with, using a web browser, a server that stores and potentially executes the GME program.
For example, as shown in
Processing unit 220 may include a processor, microprocessor, or other types of processing logic that may interpret and execute instructions. Main memory 230 may include a random access memory (RAM) or another type of dynamic storage device that may store information and instructions for execution by processing unit 220. ROM 240 may include a ROM device or another type of static storage device that may store static information and/or instructions for use by processing unit 220. Storage device 250 may include a magnetic and/or optical recording medium and its corresponding drive.
Input device 260 may include a mechanism that permits an operator to input information to workstation 110, such as a keyboard, a mouse, a pen, a single- or multi-point interface such as a touchpad, a microphone, an accelerometer, gyroscope, a neural interface, voice recognition and/or biometric mechanisms, etc. Output device 270 may include a mechanism that outputs information to the operator, including a display, a printer, a speaker, etc. Communication interface 280 may include any transceiver-like mechanism that enables workstation 110 to communicate with other devices and/or systems. For example, communication interface 280 may include mechanisms for communicating with another device or system via a network, such as network 130.
As will be described in detail below, workstation 110 may perform certain operations in response to processing unit 220 executing software instructions contained in a computer-readable medium, such as main memory 230. For instance, workstation 110 may implement GME 120 by executing software instructions from main memory 230. A computer-readable medium may be defined as a physical or logical memory device. The software instructions may be read into main memory 230 from another computer-readable medium, such as storage device 250, or from another device via communication interface 280. The software instructions contained in main memory 230 may cause processing unit 220 to perform processes that will be described later. Alternatively, hardwired circuitry may be used in place of or in combination with software instructions to implement processes described herein. Thus, implementations described herein are not limited to any specific combination of hardware circuitry and software.
Although
Referring to
When designing functional model 400, the user, in general, may not need to be concerned with the details of how the model will be finally deployed.
Referring back to
IPC blocks for a processor node may describe an interface that the processor node sees to a communication channel. Thus, for example, IPC blocks 550-1 to 550-N may describe an interface that processor node 520 sees to communication channel 530. The IPC blocks 550 may include, for instance, a “read” block and a “write” block that may be configured to implement reading and writing to the channel 530, respectively.
Communication channel 530 may include one or more channel functional blocks 560-1 through 560-N that describe the behavior of the channel. Communication channel 530 may also include port blocks 570-1 through 570-N which describe connection ports attached to the channel 530. The blocks that define communication channel 530 may, for instance, model properties of channel 530 such as the bandwidth of the channel, an error rate of the channel (e.g., bit error rate (BER) or packet error rate (PER)), the latency of the channel, or other properties relating to the channel. A model of channel 530 may be designed to be a model of an expected implementation of channel 530, such as, for example, a network connection, a direct physical connection (e.g., a serial bus), or a shared memory connection.
Channel functional blocks 560 and port blocks 570 of communication channel 530 may be associated with one or more parameters that define the operation of blocks 560 and port blocks 570. For example, if a block 560 introduces a network delay, a parameter associated with this block 560 may be the amount of delay, delay probability distribution that may be defined by mean and variance parameters, or maximum delay for the block 560. GME 120 may allow channel designers to define a mask for the parameters of communication channel 530, where the mask specifies which parameters for communication channel 530 are to be “public” parameters (i.e., the parameters that can normally be altered by external processor nodes or functional blocks) for communication channel 530.
A channel, such as communication channel 530, may also be specified as a library of different implementations at different levels of abstraction. For instance, a channel model of a bus may be expressed as a variable delay or in much more detail as a discrete-event model. Users may be allowed to use a user-interface to select a specific channel model from among the several implementations in the library for a simulation run of their deployment model to implement the channel. Additionally, a choice from the library may be made in an automated fashion based on actual signals being communicated on the channel. For instance, if the data being communicated is a vector of values, the channel may automatically configure itself to be an implementation that decomposes each vector element to a separate packet that is then passed through the channel. It should also be noted that within the library of implementations for a channel, one may also use an implementation that involves co-simulating with another software environment. For example, among different models of a bus in a library of channel models could be a bus which is in co-simulation with a System-C environment that has a full specification of the bus in the System-C language.
Referring back to
As part of the mapping process, certain properties of the functional blocks may be reconfigured or partially reconfigured in order to meet various algorithmic requirements of functionality with respect to capabilities and resources provided by hardware and/or other architectural elements. For example, as part of the mapping, fixed-point data types may be reconsidered to make use of available word-sizes on target hardware. As another example, values of certain closed-loop gains may be readjusted to account for delays which may be incurred as a result of communication from one node to another.
Various properties of the functional blocks may be partially specified. Here, the GME may propagate, complete, and select the partially specified properties based on hardware and other architectural resources available. For example, the GME may select data types of block outputs to be the largest possible word size for accuracy or the smallest possible word size based on memory optimization settings.
Referring back to
The final deployed model may next be simulated on a host environment (e.g., workstation 110) or executed in the target environment (block 350). The target environment may include any of a number of arrangements of multiprocessor computing devices. For example, the target environment may include a distributed embedded system or a parallel computing system.
When mapping the functional model to the architectural model, connectivity between functional blocks located at different processing nodes may be specified. In existing systems, connectivity of functional blocks amongst different processing nodes may be specified as an aggregate connection path including links from a processor node to an input of the channel, from the input of the channel to an output of the channel, and from the output of the channel to the input of the destination processor node. This process is conceptually illustrated in
Specifying connectivity as separate links that traverse channel 705, as shown in
Consistent with aspects described herein, inter-process communication (IPC) blocks may be defined that describe the connectivity of functional blocks in the deployed version of a model. The IPC blocks may describe the connectivity of the functional blocks independent of the communication channel(s) connecting the processing nodes. In an implementation, each IPC communication block may be associated with a label that designates the messages communicated by that IPC communication block. Connectivity between two IPC blocks can be automatically derived by matching different labels for IPC blocks. The actual connectivity of the channel may be independent of the logical connectivity of the IPC blocks.
IPC blocks 845, 855, 865, and 875 may be added to model 800 during, for instance, the design of the architectural model or the mapping of the functional model to the architectural model. GME 120 may provide a number of different types of IPC blocks that relate to inter-processor communication, such as the previously mentioned read blocks (e.g., read blocks 865 and 875) and write blocks (e.g., write blocks 845 and 855). Read blocks 865 and 875 may generally operate to provide an interface that receives data over communication channel 805 and provides it to one or more functional blocks. Write blocks 845 and 855 may generally operate to provide an interface that receives data from one or more functional blocks and transmits the data over communication channel 805. Additional types of IPC blocks, which perform different functions relating to inter-processor communications, may also be implemented by GME 120 and will be discussed in more detail below. Further, functions of one or more IPC blocks given herein may, in some implementations, be combined to be included in the functionality of a single block or separated into multiple different blocks. For example, in some implementations, the read and write IPC blocks may be implemented as a single read/write IPC block.
As shown in
Separating the logical connectivity of the IPC blocks from the actual connectivity of communication channel 805 can advantageously allow for efficient substitution of different channels into a model. For example, a user may wish to simulate the operation of a model with multiple different types of channels before deciding on a particular channel to use in the final system.
In addition to specifying connectivity tags, in some implementations, the IPC read and write blocks may be associated with additional parameters that specify further functional details about the timing of the read or write operations, respectively. These parameters may be modified through GME 120. These additional parameters may be specified independently of the actual details of the communication interface represented by the read and write blocks.
The IPC write blocks may additionally include parameters relating to, for example, whether the write operation is blocking or non-blocking, whether the write operation is buffered and the buffer size, and whether the write operation can be executed conditionally (for example, by placing an IPC write block inside of a conditionally triggered subsystem), and whether the write operation may be attached to an Interrupt Service Routine (ISR) to begin an asynchronous task. For conditional execution of the write operation, the write operation may be specified to emit signals only at discrete time instances. The IPC read blocks may additionally include parameters relating to whether the read operation is blocking or non-blocking, whether the read operation is buffered and the buffer size, and whether the read operation may be attached to an ISR to begin an asynchronous task. In the case of the write and read operations being attached to an ISR, the ISR or the task may be initiated upon writing a message or receiving a message from a designated port.
In some implementations, the communication channel may also specify constraints on an operation mode (blocking/non-blocking), buffer sizes and triggering modes of the IPC blocks.
IPC read blocks 865 and 875, and IPC write blocks 845 and 855 can be conceptualized as blocks in the functional model 800 that correspond to data input ports and data output ports, respectively. The corresponding processor node may then be tested in a purely functional modeling environment. In addition, it may be desirable to validate that certain connections amongst IPC blocks are one-to-one or one-to-many. These constraints may be specified, for example, as a parameter of channel 805 itself. Examples of constraints that may be validated include, but are not limited to one-to-one connections, one-to-many connections, and many-to-one connections. Additionally, by using IPC read and write blocks, the functional connectivity of the model blocks does not necessarily depend on the actual details of the physical communication interface represented by the IPC read and write blocks
The above-described IPC read blocks and write blocks may allow topological constraints that are specified for the architectural model to be validated independently of the representation of communication channel 805.
In addition to IPC read blocks and IPC write blocks, GME 120 may provide additional IPC blocks that can be used to configure other aspects of an inter-processor communications interface.
As shown in
IPC write block 930 and IPC read block 940 may function similarly to IPC write block 855 and IPC read block 865 (
IPC initialization block 960 may be a block provided by GME 120 that logically groups functions and/or parameters that provide for the conditional initialization of an interface between processor node 920 and communication channel 905, potentially as a function of one or more input signals. In some implementations, certain aspects of the system, such as hardware relating to communication channel 905, may need to be initially configured. For example, for a synchronous bus, the data transmission rate for the bus may need to be configured. Parameters relating to IPC initialization block 960 may allow the user to control these initialization parameters. During run-time operation of the model, IPC initialization block 950 may initially, before operation of other blocks, initialize the channel interface. In some implementations, multiple IPC initialization blocks 960 may be used to initialize different aspects of the channel interface. As shown in
IPC status block 965 may be a block provided by GME 120 that monitors the status of the channel interface and produces output signals that represent the monitored status. IPC status block 965 may also maintain a log of the status of the channel interface. IPC status block 965 may make the status of the interface available to other blocks as one or more variables or other data structures. For example, IPC status block 965 may provide an output indicating whether the interface is functioning normally, an output indicating whether an error or exception occurred, an output indicating the bandwidth of the interface, an output indicating whether a network connection is valid or dropped, an output indicating whether a serial interface is “ready to transmit” or “ready to receive,” or other outputs. Other IPC blocks or model functional blocks may view the status of the interface by connecting to IPC status block 965. For instance, as shown in
IPC setup block 955 may be a block provided by GME 120 to specify parameters of a communication interface that are common to IPC read, write, initialization, or status blocks associated with that interface. IPC setup block 955 may configure (e.g., initialize, terminate) the communication interface and monitor the communication interface. Examples of the parameters that may be specified by IPC setup block 955 include an Internet Protocol (IP) address in a TCP/IP communication link, an interrupt request (IRQ) number of the communication device on a personal computer based processing node, or other vendor specific parameters of the communication device that may be driving the communication interface.
As previously mentioned, the communication channel itself may be modeled. Modeling the communication channel can be useful when simulating a model before final deployment of the model in its target system. More particularly, to support the logical connectivity discussed above between IPC read and write blocks, it may be important to validate the functional behavior of the communication channel such that the physical connection paths that follow the links in the channel are true to the logical paths. Consistent with aspects described herein, GME 120 may provide model connector blocks that function to aggregate messages being written to the communication channel.
Channel inport block 1010 may be a model connector block that may aggregate messages written to the channel by IPC write blocks connected to the channel. In
Blocks 1020, 1030, and 1040 model communications through communication channel 1005 as a channel that may randomly delay some messages. It can be appreciated that other communication channels may be modeled using different functional blocks. Switch block 1040 may particularly represent a block that operates element-wise (i.e., on a message basis) on bus signals. For an element in the aggregate signal line, switch block 1040 may output either the current message or a time delayed version (corresponding to a communication delay) of the current message received from delay block 1020. The decision whether to output the current message or the time delayed version may be randomly determined based on the output of random block 1030.
Blocks 1020, 1030, and 1040 illustrate an exemplary model of a channel. In general, bus capable blocks can be used to model the behavior of any arbitrary channel.
Channel outport block 1045 may be a model connector block that may receive the messages from switch 1040 and provide the messages to the appropriate IPC read blocks. Channel outport block 1045 may be implemented so that channel outport block 1045 represents the aggregation of all messages being read from communication channel 1045 by the connected IPC read blocks.
Using channel inport block 1010 and channel outport block 1045 to aggregate messages, as described above, can realize a number of advantages. For instance, communication channel 1005 may model an ideal communication channel by ignoring duplicate labels at channel inport block 1010 and channel outport block 1045, and by directly connecting the channel inport block 1010 to channel outport block 1045. Additionally, as shown in
The structure of the signal bus may contain an element for a signal being written to the channel. The element may have the same functional properties (e.g., sample time, dimensions, frame mode) as a corresponding signal that is being transmitted by an IPC write block associated with the channel. Consequently, using, for example, Simulink® bus expansion technology, blocks 1020, 1030, and 1040, which are processing the signal bus, may also expand (e.g., for each a block, GME 120 may create a copy of the block for each element in the signal bus, where the copy may process an element of the signal bus, and may be compiled and interpreted to process the element with respect to the dimensions, sample time, and other functional properties of that element). Therefore, the model of the communication channel may not necessarily depend on the number of processing units and the number of IPC read and write blocks attached to the channel so that the channel may be reused in a different architectural model without changing its contents. Conversely, a communication channel may be replaced in a given architectural model with a different channel without changing the contents of the processing units that are connected to that channel. Further, existing bus signal logging technologies may be used to log data that is transmitted across the channel. Therefore, it may be possible to log and compute the dynamic behavior of the channel, such as the dynamic behavior of the channel described with terms such as bandwidth and congestion.
In some implementations, the channel signal sent over communication channel 1005 may be implemented using either fixed or variable size signals. Variable size signals may be used, for example, to represent variable size messages. Additionally, the channel signal may be decorated to include timing information to indicate the times at which a message is delivered.
In time-based operation, a complete execution period of model 1000 may include generating data at data source blocks (thereby producing the aggregate signal bus at the output of the channel inport 1010), generating a random number 1030, processing each element of the signal bus by the delay 1020, processing an element of the signal through the switch 1040, and using the data at the data sink blocks. The IPC read, IPC write, channel inport and channel outport may be virtual blocks. That is, they may specify connectivity of functional blocks in the nodes to functional blocks in the channel. They would not typically be implemented during the execution of model 1000. Instead, the actual deployed implementation of the channel would be used. Further, it is noted that the data source and data sink blocks may be arbitrary time based blocks, such as Simulink® blocks. Also, the delay and switch block that implement the channel behavior may be replaced by arbitrary time based blocks which are bus capable.
The operation of model 1000 may also be described in a data flow based domain. A difference is that blocks may run when data is made available to them at their input ports. Consequently, execution of model 1000 may include generating or receiving data at source blocks, generating a random number 1030, processing each element of the data bus by the delay 1020, processing an element of the signal through the switch 1040, and using the data at the data sink blocks.
The GME 120 may derive a first functionality of communication between the first logic and the second logic based on the channel, where the first logic is assigned to the first node and the second logic is assigned to the second node (block 1120). The first logic may be assigned from the first node to the third node and the GME 120 may derive a second functionality of communication based on the channel (block 1130).
For example,
Referring now to
In the discussion above, processor nodes 810, 820, 830, and 840 were described as connecting to a single communication channel over a single interface. In some implementations, a processor node may connect to multiple communication channels and specify multiple IPC ports labeled with unique identifiers. In this case, a tag on an IPC Reader or IPC Writer block may include multiple labels, such as a label of the form “X.Y”, where ‘X’ denotes an interface on the processor node and ‘Y’ denotes the message identifier as discussed above. Different interfaces for a processor node may correspond to different ports on the same communication channel or to different ports on different communication channels.
The IPC blocks described above may be provided to users of GME 120 as preconfigured blocks that provide the functionality described previously. In some implementations, users may be additionally given an option to customize the IPC blocks, for example, through an application programming interface (API). For example, through the API, users may be given an option to extend the functionality of the IPC blocks. It can be desirable to customize the behavior of IPC blocks for validation, simulation, and for code generation.
In an implementation, the API may be implemented through callback functions to GME 120. Code that implements customizable aspects of the IPC blocks can be code programmed in any number of programming languages, such as C, C++, M, Java. The API may be designed to represent two sets of callback functions that can be called by the modeling system, one for use during simulation and the other for generating code for deployment on a real-time target.
Setup callback function 1310 may be a function that is called by GME 120 at least each time the content of the callback function changes. In this callback, GME 120 may manipulate the run-time block object to add parameters to the represented block, which are parameters describing the characteristics of the IPC setup block. As shown in
GME 120 may provide services to display parameters for a block, allow a user to specify a value for a parameter, and to evaluate and return the value of the parameter to other callbacks specified for the block. GME 120 may provide dialog boxes such as an “edit box,” a “combo box,” and/or a “check box.” For example, the call to function “addDialogPrm” in callback function 1110 for the MessageHeaderSize parameter specifies that a “combo box” should be displayed to the user for this parameter.
The CheckPrms callback function 1320 may be a callback function designed to check and validate the parameters that are specified by the user of the GME and IPC blocks. In
The DoPostProp callback function 1330 may be a callback function configured to register work areas or data stores that may be shared amongst different IPC blocks. GME 120 may ensure that storage is provided during simulation and code generation for the specified vectors. GME 120 may also provide a way for other callbacks to access the work vectors for reading and writing through a run-time block object. In
It can be appreciated that additional or alternate callback functions, other than the examples given above, may be added based on requirements and operational semantics of the modeling environment.
The callback functions shown in
It can be appreciated that additional callback functions, other than the examples given above, may be added based on requirements and operational semantics of the modeling environment. The additional callback functions may be added based on the requirements and operational semantics of the block diagram modeling environment.
It should be noted that IPC blocks, such as described above, may support sub-classing. For example, if one were to design IPC blocks for a CAN interface, one can design the base CAN interface IPC blocks to have identical parameters on their user-interfaces. Semantic methods of the superclass associated with the IPC blocks may be overridden by one or more hardware-specific subclasses that may provide specialized implementations of those methods. This may allow hardware vendors to seamlessly tie into a GME, such as GME 120, with a custom implementation of a generic hardware interface.
An alternate approach to obtaining hardware specific subclasses of IPC blocks may involve using a block-based registration approach. Here, the IPC blocks may be implemented in the GME in a generic fashion to support simulation semantics in the GME. Hardware-specific code, which may be generated by the GME, may be implemented using an API that may be associated with a generic block in the GME. A hardware configuration set may be used to register a block with the GME during a registration phase.
For example, referring to
Now suppose that a user wants to set up a model to generate code for a hardware target provided by vendor X that uses the CAN interface. Dialog box 1650 in
Referring also to
After these parameters are configured, code specific to the hardware target of vendor X can be generated automatically from the GME. This may be accomplished in the GME by auto-inserting IPC blocks specific to target X, such as blocks 1512, 1516, and 1514, in place of generic IPC blocks in the model and have them perform code generation roles that are encoded into their implementation. This approach may enable reuse of existing APIs for generic blocks in the GME.
Although the above description discussed techniques for implementing communicating interfaces over a channel for models that included separate functional and architectural models, in some implementations, an architectural model may not be necessary. More particularly, a functional model may be created that includes communication links between elements of the functional model. The communication links may be specified independently, such as by modeling the communication channel, as described above, of what is communicated over the communication links.
The foregoing description of implementations provides illustration and description, but is not intended to be exhaustive or to limit the invention to the precise form disclosed. Modifications and variations are possible in light of the above teachings or may be acquired from practice of the invention.
For example, while a series of acts have been described with regard to
Also, the term “user” has been used herein. The term “user” is intended to be broadly interpreted to include, for example, a workstation or a user of a workstation.
It will be apparent that embodiments, as described herein, may be implemented in many different forms of software, firmware, wetware, and hardware in the implementations illustrated in the figures. The actual software code or specialized control hardware used to implement embodiments described herein is not limiting of the invention.
Further, certain portions of the invention may be implemented as “logic” that performs one or more functions. This logic may include hardware, such as an application specific integrated circuit or a field programmable gate array, software, or a combination of hardware and software.
It should be noted that one or more computer-readable media may store computer-executable instructions that when executed by a processing unit, such as processing unit 220, may perform various acts associated with one or more embodiments of the invention. The computer-readable media may be volatile or non-volatile and may include, for example, flash memories, removable disks, non-removable disks, and so on.
It should be further noted that various electromagnetic signals, such as wireless signals, electrical signals carried over a wire, optical signals carried over optical fiber, etc., may be encoded to carry computer-executable instructions, configured to implement one or more embodiments of the invention, on a network, such as, for example, network 130.
No element, act, or instruction used in the present application should be construed as critical or essential to the invention unless explicitly described as such. Also, as used herein, the article “a” is intended to include one or more items. Where only one item is intended, the term “one” or similar language is used. Further, the phrase “based on” is intended to mean “based, at least in part, on” unless explicitly stated otherwise.
The instant application claims priority from provisional application No. 61/102,502, filed Oct. 3, 2008, the disclosure of which is incorporated by reference herein in its entirety.
Number | Name | Date | Kind |
---|---|---|---|
7145898 | Elliott | Dec 2006 | B1 |
7869425 | Elliott et al. | Jan 2011 | B2 |
7885902 | Shoemaker et al. | Feb 2011 | B1 |
7925490 | Calvez | Apr 2011 | B2 |
7991603 | Calvez | Aug 2011 | B2 |
20040133861 | Bollano et al. | Jul 2004 | A1 |
20060282252 | Ciolfi | Dec 2006 | A1 |
20080004851 | Calvez | Jan 2008 | A1 |
20080243464 | Calvez | Oct 2008 | A1 |
Number | Date | Country | |
---|---|---|---|
61102502 | Oct 2008 | US |