Opened 8 years ago
Last modified 7 years ago
#4873 closed defect
Issue with enumeration-indexed arrays in NF — at Version 1
| Reported by: | Francesco Casella | Owned by: | Per Östlund | 
|---|---|---|---|
| Priority: | high | Milestone: | 2.0.0 | 
| Component: | New Instantiation | Version: | |
| Keywords: | Cc: | 
Description (last modified by )
Please consider the model Modelica.Electrical.Digital.Examples.FlipFlop. The following runtime error is reported by the NF:
assert | error | Dimension 1 has bounds 1..9, got array subscript 0 assert | info | simulation terminated by an assertion at initialization
In the old FE, equations such as this one were flattened:
  FF.RS2.Nor2.auxiliary_n = {Modelica.Electrical.Digital.Interfaces.Logic.'U', Modelica.Electrical.Digital.Interfaces.Logic.'X', Modelica.Electrical.Digital.Interfaces.Logic.'1', Modelica.Electrical.Digital.Interfaces.Logic.'0', Modelica.Electrical.Digital.Interfaces.Logic.'X', Modelica.Electrical.Digital.Interfaces.Logic.'X', Modelica.Electrical.Digital.Interfaces.Logic.'1', Modelica.Electrical.Digital.Interfaces.Logic.'0', Modelica.Electrical.Digital.Interfaces.Logic.'X'}[FF.RS2.Nor2.auxiliary[2]];
In the NF, this is obtained instead:
  FF.RS2.Nor2.auxiliary_n = Modelica.Electrical.Digital.Tables.NotTable[FF.RS2.Nor2.auxiliary[2]];
  constant enumeration('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-') Modelica.Electrical.Digital.Tables.NotTable[Modelica.Electrical.Digital.Interfaces.Logic.'U'] = Modelica.Electrical.Digital.Interfaces.Logic.'U' "9-value logic for 'not'";
  constant enumeration('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-') Modelica.Electrical.Digital.Tables.NotTable[Modelica.Electrical.Digital.Interfaces.Logic.'X'] = Modelica.Electrical.Digital.Interfaces.Logic.'X' "9-value logic for 'not'";
  constant enumeration('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-') Modelica.Electrical.Digital.Tables.NotTable[Modelica.Electrical.Digital.Interfaces.Logic.'0'] = Modelica.Electrical.Digital.Interfaces.Logic.'1' "9-value logic for 'not'";
  constant enumeration('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-') Modelica.Electrical.Digital.Tables.NotTable[Modelica.Electrical.Digital.Interfaces.Logic.'1'] = Modelica.Electrical.Digital.Interfaces.Logic.'0' "9-value logic for 'not'";
  constant enumeration('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-') Modelica.Electrical.Digital.Tables.NotTable[Modelica.Electrical.Digital.Interfaces.Logic.'Z'] = Modelica.Electrical.Digital.Interfaces.Logic.'X' "9-value logic for 'not'";
  constant enumeration('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-') Modelica.Electrical.Digital.Tables.NotTable[Modelica.Electrical.Digital.Interfaces.Logic.'W'] = Modelica.Electrical.Digital.Interfaces.Logic.'X' "9-value logic for 'not'";
  constant enumeration('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-') Modelica.Electrical.Digital.Tables.NotTable[Modelica.Electrical.Digital.Interfaces.Logic.'L'] = Modelica.Electrical.Digital.Interfaces.Logic.'1' "9-value logic for 'not'";
  constant enumeration('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-') Modelica.Electrical.Digital.Tables.NotTable[Modelica.Electrical.Digital.Interfaces.Logic.'H'] = Modelica.Electrical.Digital.Interfaces.Logic.'0' "9-value logic for 'not'";
  constant enumeration('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-') Modelica.Electrical.Digital.Tables.NotTable[Modelica.Electrical.Digital.Interfaces.Logic.'-'] = Modelica.Electrical.Digital.Interfaces.Logic.'X' "9-value logic for 'not'";
I'm not sure how this is actually rendered in terms of internal data structures, but it seems that the new one is not accepted by the subsequent code generation phases.
  Note:
 See   TracTickets
 for help on using tickets.
    
