| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'instance-calculator/src')
| -rw-r--r-- | instance-calculator/src/Main.java | 104 | ||||
| -rw-r--r-- | instance-calculator/src/ModelFile.java | 8 | ||||
| -rw-r--r-- | instance-calculator/src/Parameters.java | 6 | ||||
| -rw-r--r-- | instance-calculator/src/VHDLArchitecture.java | 5 | ||||
| -rw-r--r-- | instance-calculator/src/VHDLComponent.java | 5 | ||||
| -rw-r--r-- | instance-calculator/src/VHDLEntity.java | 19 | 
6 files changed, 105 insertions, 42 deletions
diff --git a/instance-calculator/src/Main.java b/instance-calculator/src/Main.java index 3835c16..b521324 100644 --- a/instance-calculator/src/Main.java +++ b/instance-calculator/src/Main.java @@ -35,45 +35,79 @@ public class Main           return;        } + +      create_instances();     }     private static void create_instances ()     { -      /* -       * FuturCandidates <- All Architecture. -       * Candidates <- emptyset -       * Set ProcessedCandidates <- emptyset. -       * -       * while (!isEmpty(FuturCandidates)) -       * { -       *    is_stuck = True; -       *    Candidates.addAll(FuturCandidates); -       *    FuturCandidates.setLength(0); -       * -       *    while (!isEmpty(candidates)) -       *    { -       *       a = Candidates.pop(); -       * -       *       if (a.has_components_not_in(ProcessedCandidates)) -       *       { -       *          FuturCandidates.push(a); -       *       } -       *       else -       *       { -       *          is_stuck = False; -       * -       *          a.create_instance(); -       * -       *          ProcessedCandidates.add(a); -       *       } -       *    } -       * -       *    if (is_stuck) -       *    { -       *       Error. -       *    } -       * } -       */ +      final Collection<VHDLEntity> futur_candidates; +      final Deque<VHDLEntity> candidates; +      final Collection<VHDLEntity> processed_candidates; +      boolean is_stuck; + +      futur_candidates = new ArrayList<VHDLEntity>(); +      candidates = new ArrayDeque<VHDLEntity>(); +      processed_candidates = new ArrayList<VHDLEntity>(); + +      futur_candidates.addAll(VHDLEntity.get_all()); + +      while (!futur_candidates.isEmpty()) +      { +         is_stuck = true; + +         candidates.addAll(futur_candidates); +         futur_candidates.clear(); + +         while (!candidates.isEmpty()) +         { +            final VHDLEntity e; +            boolean is_ready; + +            e = candidates.pop(); + +            is_ready = true; + +            for (final VHDLComponent cmp: e.get_architecture().get_components()) +            { +               if (!processed_candidates.contains(cmp.get_destination())) +               { +                  is_ready = false; + +                  break; +               } +            } + +            if (is_ready) +            { +               is_stuck = false; + +               e.generate_instance(); + +               processed_candidates.add(e); +            } +            else +            { +               futur_candidates.add(e); +            } +         } + +         if (is_stuck) +         { +            System.err.println("[F] Unable to create all the instances..."); +            System.err.println +            ( +               "[E] The following entites might form a circular dependency:" +            ); + +            for (final VHDLEntity e: futur_candidates) +            { +               System.err.println("[E] Entity " + e.get_id()); +            } + +            System.exit(-1); +         } +      }     }     public static Parameters get_parameters () diff --git a/instance-calculator/src/ModelFile.java b/instance-calculator/src/ModelFile.java index 929c348..b873c3b 100644 --- a/instance-calculator/src/ModelFile.java +++ b/instance-calculator/src/ModelFile.java @@ -120,19 +120,19 @@ public class ModelFile           return false;        } -      if (input.equals("entity")) +      if (input[1].equals("entity"))        {           VHDLEntity.add_element(input[2]);        } -      else if (input.equals("architecture")) +      else if (input[1].equals("architecture"))        {           VHDLArchitecture.add_element(input[2]);        } -      else if (input.equals("process")) +      else if (input[1].equals("process"))        {           VHDLProcess.add_element(input[2]);        } -      else if (input.equals("component")) +      else if (input[1].equals("component"))        {           VHDLComponent.add_element(input[2]);        } diff --git a/instance-calculator/src/Parameters.java b/instance-calculator/src/Parameters.java index ce5e2cf..e01f912 100644 --- a/instance-calculator/src/Parameters.java +++ b/instance-calculator/src/Parameters.java @@ -22,7 +22,7 @@ public class Parameters     public Parameters (final String... args)     { -      if (args.length != 4) +      if (args.length != 3)        {           print_usage(); @@ -35,8 +35,8 @@ public class Parameters        else        {           model_file = args[0]; -         id_prefix = args[2]; -         output_file = args[3]; +         id_prefix = args[1]; +         output_file = args[2];           are_valid = true;        }     } diff --git a/instance-calculator/src/VHDLArchitecture.java b/instance-calculator/src/VHDLArchitecture.java index 0a61a24..09576e3 100644 --- a/instance-calculator/src/VHDLArchitecture.java +++ b/instance-calculator/src/VHDLArchitecture.java @@ -87,6 +87,11 @@ public class VHDLArchitecture        }     } +   public Collection<VHDLComponent> get_components () +   { +      return components; +   } +     public void add_waveform (final VHDLWaveform wfm)     {        if (!waveforms.contains(wfm)) diff --git a/instance-calculator/src/VHDLComponent.java b/instance-calculator/src/VHDLComponent.java index b0f8de2..6803a57 100644 --- a/instance-calculator/src/VHDLComponent.java +++ b/instance-calculator/src/VHDLComponent.java @@ -56,6 +56,11 @@ public class VHDLComponent        destination = dest;     } +   public VHDLEntity get_destination () +   { +      return destination; +   } +     public void set_architecture (final VHDLArchitecture arch)     {        parent = arch; diff --git a/instance-calculator/src/VHDLEntity.java b/instance-calculator/src/VHDLEntity.java index e5ab4eb..7c29e63 100644 --- a/instance-calculator/src/VHDLEntity.java +++ b/instance-calculator/src/VHDLEntity.java @@ -9,6 +9,11 @@ public class VHDLEntity        FROM_ID = new HashMap<String, VHDLEntity>();     } +   public static Collection<VHDLEntity> get_all () +   { +      return FROM_ID.values(); +   } +     public static void add_element (final String id)     {        if (!FROM_ID.containsKey(id)) @@ -64,6 +69,11 @@ public class VHDLEntity        this.waveform_instances = new ArrayList<VHDLWaveform.Instance>();     } +   public String get_id () +   { +      return id; +   } +     public void add_port (final String pt)     {        if (!ports.contains(pt)) @@ -77,6 +87,11 @@ public class VHDLEntity        architecture = arch;     } +   public VHDLArchitecture get_architecture () +   { +      return architecture; +   } +     public Collection<VHDLProcess.Instance> get_process_instances ()     {        return process_instances; @@ -86,4 +101,8 @@ public class VHDLEntity     {        return waveform_instances;     } + +   public void generate_instance () +   { +   }  }  | 


