Abstract:
Software for building a block diagram representation of a system includes instructions for defining a propagation block having an input port for receiving information indicative of an attribute set of an input signal and an output port for providing information indicative of an attribute set of an output signal on the basis of the attributes of the input signal. The software includes instructions for associating, with the propagation block, a rule-set for determining the output attribute set on the basis of the input attribute-set.

Description:
FIELD OF INVENTION 
   This invention relates to computer simulation, and in particular, to software for building block-diagram models of systems to be simulated. 
   BACKGROUND 
   Before a computer can simulate the behavior of a system, a model of that system must be built. In many cases, a system can be described by one or more constituent elements connected together so that outputs of one element become inputs of other elements. Each such system element can be characterized by a transfer function. Such a system is often represented as a block diagram in which each system element corresponds to one of the blocks in the block diagram. 
   Software intended for computer simulation of systems often provides a user-interface for enabling users to define blocks representative of the constituent elements of the system. At a purely abstract level, the definition of a particular block is no more than the definition of the transfer function of the system element that that block represents. However, at the implementation level, there are many computational details to consider. 
   For example, to optimize performance, a system designer must consider what data types (fixed or floating point, arrays or scalars) are to be used in representing input and output signals of the block. Having done so, a designer must consider the number of bits to use for each input and output and the scaling to be applied to map a sequence of bits into a number that represents some value in a range of values. Each input or output signal of a block can thus be thought of as having two different parts: a value, and a set of attributes for representing that value. Two such attributes, already described above, are data-type and scaling attributes. 
   In most cases, a user can easily make the value of a block&#39;s output signals (hereafter referred to as “outputs”) depend on the values of its input signals (hereafter referred to as “inputs”). This permits a change in an input&#39;s value to propagate automatically throughout the system. However, it is not so easy for a user to cause the attributes of a block&#39;s output to depend on the attributes of its inputs. As a result, in most cases, a change in an input attribute does not propagate automatically throughout the system. 
   SUMMARY 
   The invention is based on the recognition that it is possible to specify rules for determining the output signal&#39;s attributes on the basis of one or more input signal attributes. This enables a user to programmably set attributes associated with inputs and outputs of a block representative of a system element. Such a block can then be interconnected with other blocks without regard to matching the attributes of signals passed between blocks. 
   The invention thus includes a computer-readable medium having encoded thereon instructions for causing a computer system to receive a definition of a propagation block. The propagation block has an input port for receiving information indicative of an input attribute-set of an input signal, and an output port for providing information defining an output attribute-set of an output signal. The medium also has encoded thereon instructions for causing the computer to receive a definition of a rule-set for determining the output attribute-set on the basis of the input attribute-set. The user can program the propagation block by define the rule-set through a user-interface. 
   In one aspect of the invention, the instructions cause the propagation block to define an output attribute-set that includes a number of bits to be used for representing the output. In another aspect of the invention, the instructions cause the propagation block to define an output attribute-set that includes a scaling factor to be applied to the output. Such a scaling factor can include a bias, a slope, or both. 
   Other types of attributes can be controlled. For example, the output might be an array, in which case the instructions cause the propagation block to define an output attribute-set that includes a dimension of the array. Or, the output might include a signal, in which case the instructions cause the propagation block to define an output-attribute set that includes a sampling rate associated with the signal and/or information indicative of whether the signal is a time-based signal or a frame-based signal. 
   These and other features and objects of the invention will be apparent from an examination of the following detailed description and the figures, in which: 

   
     BRIEF DESCRIPTION OF THE FIGURES 
       FIG. 1  shows a user-defined block that incorporates the invention; 
       FIG. 2  shows the detailed architecture of the user-defined block in  FIG. 1 ; 
       FIG. 3  shows a dialog box for causing a computation block to accept attributes specified by an attribute-propagation block; 
       FIGS. 4 and 5  illustrate alternate methods of interconnecting the attribute-propagation block shown in  FIG. 2 ; 
       FIG. 6  is a graphical user interface element for enabling the attribute-propagation block to be programmed by a user; 
       FIG. 7  shows a method carried out by the attribute-propagation block of  FIG. 2 ; 
       FIG. 8  shows an alternate embodiment of the system of  FIG. 2 ; and 
       FIGS. 9 and 10  are graphical user interface elements showing the rule-sets associated with the additional attribute-propagation blocks in  FIG. 8 . 
   

   DETAILED DESCRIPTION 
   Software for simulating dynamic systems often provides a graphical interface for creating a block diagram of the system to be simulated. Such a block diagram typically includes several blocks, each of which is characterized by a transfer function. 
   To build a system model, a user drags selected blocks from a library onto a worksheet. These blocks can be built-in blocks, provided as part of the software, or user-defined blocks that a user has defined and saved in a library. 
   Once the selected blocks are on the worksheet, the user interconnects them to build the system. If a block having the desired transfer function is unavailable, the user can often define such a block by assembling existing blocks. As noted above, the resulting user-defined block can be saved in a library and re-used in a variety of system models. 
   In defining a block, a user must define the attributes of the input and output signals for the block. In most cases, the optimal selection of output signal attributes depends on the input signal attributes. The invention provides a user-interface for enabling a user to programmably define attributes of output signals on the basis of attributes of input signals. 
     FIG. 1  illustrates a user-defined block  10  incorporating the invention. The illustrated block  10  is intended to flawlessly and efficiently add two addends together. 
   To achieve flawlessness, attributes of the sum should, whenever possible, be selected to avoid rounding errors or overflow errors. To achieve efficiency, attributes of the sum should, whenever possible be selected to minimize the lengths of data types used and to avoid excessive scaling adjustments. 
   The optimal attributes for the addends and the sum are not independent of each other. For example, if the first and second addends are eight-bits wide, then the sum should also be eight-bits wide. This reduces (but does not eliminate) the likelihood of overflow error. However, if the first addend is sixteen bits wide and the second addend is eight-bits wide, then the sum should be sixteen-bits wide to reduce the likelihood of overflow error. 
   Since the optimal attributes for the sums and addends (collectively referred to as the “block variables”) depend on each other, it is not possible to assign optimal attributes without a priori knowledge of the attributes assigned to at least one of the block variables. Nevertheless, it is possible to specify, in advance, rules for selecting optimal attributes of one or more block variables. Once attributes of one or more block variables become known, these rules can be applied to determine optimal attributes for other block variables. 
     FIG. 2  shows the internal architecture of the user-defined block  10  of  FIG. 1 . The values of the first and second addends are provided to an adder  12 , the output of which is the sum shown in  FIG. 1 . The adder  12  is an example of a “computation block.” A computation block is one that sets the value of its output on the basis of the values of its inputs. 
   In the example of  FIG. 2 , the adder  12  is a built-in block dragged into the system model from a library of built-in blocks. A built-in block, such as the adder  12 , typically includes built-in attribute-setting rules for providing output attributes on the basis of input attributes. These built-in rules are rigid and cannot easily be changed by the user. The invention provides a user-interface through which these built-in rules can be overridden by user-defined attribute setting rules. 
   To override the built-in attribute-setting rules, these rules are first disabled. To disable built-in attribute-setting rules of a built-in block, the user opens a dialog box that controls the attribute-setting rules associated with that block. A dialog box provided by the illustrated embodiment is shown in  FIG. 3 . However, user-interfaces other than dialog boxes, or dialog boxes having different layouts, can also be used. 
   Referring now to  FIG. 3 , the illustrated dialog box  15  includes options  17  for “Output data type and scaling”. These options control the manner in which the built-in library block sets its output. By selecting the option entitled “Inherit via block propagation”  19 , the user forces a built-in block to set attributes using rules carried out by an attribute-propagation block in communication with the built-in block. 
   The attributes of the first and second addends are made available to an attribute-propagation block  14  through first and second ports. Unlike a computation block, an attribute-propagation block does not operate on the values of its inputs and outputs. Instead, the attribute-propagation block determines attributes of its output signal on the basis of attributes of its input signals. This is different from a computation block, which determines the value of an output on the basis of values of its inputs. 
   The attribute-propagation block  14  includes a rule-set  16  for determining the optimal attributes of the sum on the basis of attributes of the first and second addends, more generally referred to as the “controlling attributes.” The optimal attributes of the sum, more generally referred to as the “propagated attributes,” are then provided back to the summer. 
   The illustrated attribute-propagation block  14  has two inputs and one output. The two inputs receive controlling attributes and the output provides a propagated attribute selected by applying rules to a subset of the controlling attributes. However, an attribute-propagation block can also have one input and one output. Alternatively, an attribute-propagation block can have many inputs and many outputs. 
   One method for achieving an attribute-propagation block having many inputs and many outputs is to appropriately interconnect attribute propagation blocks of the type shown in  FIG. 2 . For example,  FIG. 4  illustrates a parallel connection of attribute-propagation blocks  18 ,  20  that effectively creates an attribute-propagation block having two inputs and two outputs.  FIG. 5  illustrates daisy-chained attribute propagation blocks  22 ,  24  that effectively create an attribute-propagation block having three inputs and one output. The interconnections shown in  FIGS. 4  and  5  can readily be combined to form attribute-propagation blocks with any number of inputs and outputs. 
   It is also important to note that the concept of “input” and “output” are purely logical concepts. In this context, it is useful to consider an attribute-propagation block as having a plurality of ports, each of which can be an input port or an output port depending on circumstances that become apparent only at run-time. For example, in the case of an attribute-propagation block  14  with three ports, as shown in  FIG. 2 , a controlling attribute can be made available at the first and third ports, in which case the attribute-propagation block  14  applies the rules in the rule-set  16  to determine a propagated attribute at the second port. In such a case, the second port is a logical output port and the first and third ports are logical input ports. However, controlling attributes might instead be made available at the second and third ports, in which case the attribute-propagation block  14  applies the rules in its rule-set  16  to determine the propagated attribute at the first port. In this case, the second port is now a logical input port and the first port becomes a logical output port. 
   An analogy can be drawn to the process of solving one equation with two unknowns. If one learns the value of the first unknown, one can use the equation to evaluate the second unknown. However, one could just as easily have learned the second unknown and used that, together with the equation, to evaluate the first unknown. In either case, the result would have been the same. The designation of one variable as the “given” variable and the other as derived from the given variable is thus meaningless until the evaluation has already taken place. 
   The attribute-propagation block  14  also includes a user-interface  26  for enabling a user to easily alter the rules for determination of attributes. In the illustrated embodiment, the user-interface  26  is a graphical user-interface that presents user-selectable options in a dialog box  28 , as shown in  FIG. 6 . Such a dialog box can be opened, for example, by selecting the attribute-propagation block  14  and choosing an appropriate menu command. 
   Referring now to  FIG. 6 , the illustrated dialog box  28  implements a first collection of rules  30  for controlling a first attribute, namely the data-type attribute, and a second collection of rules  32  for controlling a second attribute, namely the scaling attribute. Each collection of rules includes a switch (designated as rules  1  and  2  respectively) for disabling the function of the propagation block  14 . These switches enable a user to explicitly specify one or both attributes. In the illustrated embodiment, attribute propagation is enabled by choosing “Inherit via propagation rule” in a drop-down list of options. 
   In some cases, the application of two rules will be impossible because of a conflict between the rules. To resolve such conflicts, each collection of rules  30 ,  32  includes a priority order for application of the rules. When the application of two rules results in a conflict, the rule having the higher priority is applied. The priority order of the rules is communicated to the user by listing the rules on the dialog box  28  in the order of their priority. 
   Rules  1 . 1  and  1 . 2  describe what should happen if the attribute of either of the addends were set to be floating point. The remaining rules  1 . 3  through  1 . 4 . 4  only apply if neither addend has an attribute set to be floating point. 
   Rule  1 . 3  controls whether the propagated attribute designates a signed or unsigned fixed point number. It is only necessary to designate a bit to represent a sign if there exists some way that the sum can become negative. Since this can occur when either or both of the addends is signed, rule  1 . 3  causes the propagated attribute to be signed if either one of the addends is signed. 
   To avoid rounding errors, it is necessary (though not sufficient) that the sum have at least as many bits as the widest of the addends. Rule  1 . 4 . 1  creates such a rule by setting the base number of bits based on the widest addend. 
   To avoid overflow errors, it is necessary that the sum have at least one bit more than the widest addend. Rules  1 . 4 . 2  and  1 . 4 . 3  cause this to be the case. These rules are set to multiply the base number of bits by 2 and then to add 0 to the resulting product. For example, suppose the first and second addends are, respectively, sixteen and eight bits wide. The base number of bits would then correspond to the wider of the two addends, namely the 16-bit addend. Rules  1 . 4 . 2  and  1 . 4 . 3  adjust this base to be 2*16+0 bits (i.e. 32 bits). 
   Rule  1 . 4 . 4  determines what bit sizes are allowable. In this example, the allowable sizes are 8, 16, and 32 bits. Since the adjusted base number of bits (32) happens to be an allowed value, the propagated data-type attribute would specify that the sum is a 32-bit fixed point number. If the adjusted number of bits had been other than one of the three allowed values, the propagation block  14  would have set an error message. 
   Rules  2  through  2 . 2 . 3  determine the scaling attributes of the output signal. The concept of scaling arises because of the need to map an integer to a range of values. For example, if an integer between 0 and 256 is to map to a value between a and b, a suitable mapping might be to multiply the integer by a “slope” of (b−a)/256 and adding a “bias” of a. The user controls the values of the slope and bias by appropriately setting values in Rules  2  through  2 . 2 . 3 . 
   To avoid round-off error, the sum should allow as much precision as the most precise of the addends. Rule  2 . 1 . 1  determines which addend has the smallest slope, and hence which is most precise. This value will be used to set the attribute of the sum to be as precise as the most precise of the addends. Rules  2 . 1 . 2  and  2 . 1 . 3  allow a user to adjust the base slope as determined by Rule  2 . 1 . 1 , either by multiplying by a constant (Rule  2 . 1 . 2 ) or by adding a constant (rule  2 . 1 . 3 ). As illustrated, these constants are set to 1 and 0 respectively. Hence, in the illustrated example, it is rule  2 . 1 . 1  that determines the slope associated with the output. 
   Rule  2 . 2 . 1  determines how scaling biases (also known as scaling offsets) should be treated. In the illustrated embodiment, the propagated attribute of the sum is set to have a bias equal to the sum of the biases associated with the controlling attributes of the addends. By effectively canceling the effects of the biases, rule  2 . 2 . 1  reduces the likelihood of a loss of precision or overflow resulting from bias mismatch. Rules  2 . 2 . 2  and  2 . 2 . 3  are analogous to rules  2 . 1 . 2  and  2 . 1 . 3  respectively, and are set to similar trivial values. 
   The user-interface  26  of  FIG. 2  can take the form of a dialog box, as shown in  FIG. 6 . However, the user-interface  26  can take other forms, for example a tabbed dialog box, a sequence of dialog boxes such as that presented by a wizard, or menu commands. The user-interface  26  need not be a graphical user-interface  26 . For example, the user-interface  26  might be stored in an external file accessible to the user. 
   In addition, the rule definitions shown in the dialog box  28  are representative only and are selected for the specific purpose of creating a user-defined block  10  that generates a sum from two addends. The rule definitions in the dialog box  28  will, in general, depend on the specific application of the attribute-propagation block  14 . 
   Additional details on the user-interface  26  of the attribute-propagation block  14  are provided in an extract from “Fixed-Point Blockset Users Guide”, Version 3 published by Math Works in September 2000 that is attached as an appendix to this specification. 
     FIG. 7  shows the process carried out by the attribute-propagation block. The propagation block begins by collecting  34  all the rules identified in the dialog box of  FIG. 6 . The attribute-propagation block then determines  36  whether any propagated attributes can be set without reference to any controlling attributes. If the rules permit a propagated attribute to be set without knowledge of any controlling attributes, the attribute-propagation block sets  38  the propagated attribute accordingly. If not, the attribute-propagation block collects the known attributes and determines  40  if these are sufficient to set the remaining attributes consistent with the rules. If they are not sufficient, the attribute-propagation block waits  42  and retries later. 
   If the known attributes are sufficient to determine a propagated attribute, then the attribute-propagation block determines  44  whether the propagated attribute can be set in a manner consistent with all the rules. If not, the attribute-propagation block posts  46  an error. Otherwise, the attribute-propagation block sets  38  the propagated attribute consistent with the rules and the known input attributes. 
   The system  10  illustrated in  FIG. 2 , when implemented with a rule-set  16  as defined in  FIG. 7 , reduces, but does not eliminate overflow errors. To alert the user to overflow, it is useful to provide second and third attribute-propagation blocks  48 ,  50 , as shown in  FIG. 8 . 
   Both the second and third attribute-propagation blocks  48 ,  50  set the same propagated attribute, namely the propagation attribute of a reference value provided by a reference block  52 . So long as the second and third attribute-propagation blocks  48 ,  50  agree on the attribute assigned to the reference value, there is no error. If the second and third attribute-propagation blocks  48 ,  50  attempt to assign conflicting attributes to the reference value, an error results. The interconnection shown in  FIG. 8 , when combined with the rule-set definitions  52 ,  54  shown in  FIGS. 9 and 10 , are such that the occurrence of such an error is likely to correspond to an overflow. 
     FIGS. 9 and 10  show the rule-set definitions for the second and third attribute-propagation blocks  48 ,  50  respectively. An examination of these figures shows that if a conflict is to arise, it will do so because of the difference in rules  2 . 1 . 1  and  2 . 1 . 2 . 
   Using its rule  2 . 1 . 1  (see  FIG. 9 ), the second attribute-propagation block  48  attempts to set the base of the reference signal to correspond to the addend having the greatest range. Using rule  2 . 1 . 2 , the second attribute-propagation block  48  provides one additional bit of range to the sum by setting the multiplicative adjustment to double the slope. The extra bit of range insures that overflow is impossible. 
   Using its rule  2 . 1 . 1  (see  FIG. 10 ), the third attribute-propagation block  50  attempts to set the base of the reference signal to correspond to the addend having the smallest, rather than the largest, range. 
   The attribute of the reference value is both an input attribute and an output attribute of the third attribute-propagation block  50 . Consequently, if the reference value has a smaller range than the adder&#39;s output, then no conflict occurs. Otherwise an error occurs. Such an error is desirable because it alerts the user to the possibility of an overflow. 
   The attribute-propagation block of the invention has been described in the context of a particular application, namely a system  10  for generating the sum of two addends. This particular application has been chosen as a vehicle for describing the structure and function of the attribute-propagation block primarily for its simplicity. It will be appreciated that the attribute-propagation block of the invention has broader applications than that described in connection with the detailed description herein. For example, other attributes can be controlled by an attribute-propagation block. These attributes can include dimensions of arrays, vectors, or matrices, whether values are real or complex, sampling rates of signals, and whether signals are subject to frame-based or time-based sampling.