| summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'instance-calculator/src/VHDLEntity.java')
| -rw-r--r-- | instance-calculator/src/VHDLEntity.java | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/instance-calculator/src/VHDLEntity.java b/instance-calculator/src/VHDLEntity.java new file mode 100644 index 0000000..d2a8e07 --- /dev/null +++ b/instance-calculator/src/VHDLEntity.java @@ -0,0 +1,150 @@ +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; +import java.util.HashMap; + +public class VHDLEntity +{ + private static final Map<String, VHDLEntity> FROM_ID; + + static + { + 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)) + { + FROM_ID.put(id, new VHDLEntity(id)); + } + } + + public static VHDLEntity get_from_id (final String id) + { + final VHDLEntity result; + + result = FROM_ID.get(id); + + if (result == null) + { + System.err.println + ( + "[E] Element " + + id + + " is used like an entity, but is not declared as such before that" + + " use." + ); + + System.exit(-1); + } + + return result; + } + + public static VHDLEntity find (final String id) + { + return FROM_ID.get(id); + } + +/******************************************************************************/ + private final Collection<VHDLProcess.Instance> process_instances; + private final Collection<VHDLWaveform.Instance> waveform_instances; + + private final OutputFile output_file; + private final Collection<String> ports; + private final String id; + + private VHDLArchitecture architecture; + + private VHDLEntity (final String id) + { + this.id = id; + ports = new ArrayList<String>(); + + architecture = null; + + this.process_instances = new ArrayList<VHDLProcess.Instance>(); + this.waveform_instances = new ArrayList<VHDLWaveform.Instance>(); + + output_file = OutputFile.new_output_file("instances_in_" + id + ".mod"); + } + + public String get_id () + { + return id; + } + + public void add_port (final String pt) + { + if (!ports.contains(pt)) + { + ports.add(pt); + } + } + + public void set_architecture (final VHDLArchitecture arch) + { + architecture = arch; + } + + public VHDLArchitecture get_architecture () + { + return architecture; + } + + public Collection<VHDLProcess.Instance> get_process_instances () + { + return process_instances; + } + + public Collection<VHDLWaveform.Instance> get_waveform_instances () + { + return waveform_instances; + } + + public void generate_instance () + { + final Map<VHDLWaveform, VHDLWaveform.Instance> local_conversion; + + local_conversion = new HashMap<VHDLWaveform, VHDLWaveform.Instance>(); + + for (final String pt: ports) + { + final VHDLWaveform wfm; + final VHDLWaveform.Instance i_wfm; + + wfm = VHDLWaveform.get_from_id(Waveforms.get_waveform_id_from_id(pt)); + i_wfm = wfm.add_instance(this); + + waveform_instances.add(i_wfm); + + local_conversion.put(wfm, i_wfm); + } + + architecture.add_instance_to + ( + process_instances, + waveform_instances, + local_conversion + ); + } + + public void write_predicates () + { + for (final VHDLWaveform.Instance iwfm: waveform_instances) + { + iwfm.write_predicates_to(output_file); + } + + for (final VHDLProcess.Instance ips: process_instances) + { + ips.write_predicates_to(output_file); + } + } +} |


