1 package net.mograsim.logic.model.verilog.model;
4 import java.util.Objects;
5 import java.util.stream.Collectors;
7 public class ComponentReference
9 private final String name;
10 private final VerilogComponentDeclaration referencedComponent;
11 private final List<Signal> arguments;
13 public ComponentReference(String name, VerilogComponentDeclaration referencedComponent, List<Signal> arguments)
15 this.name = Objects.requireNonNull(name);
16 this.referencedComponent = Objects.requireNonNull(referencedComponent);
17 this.arguments = List.copyOf(arguments);
24 List<IOPort> ioPorts = referencedComponent.getIOPorts();
25 if (ioPorts.size() != arguments.size())
26 throw new IllegalArgumentException(
27 "Incorrect nubmer of arguments given: " + arguments.size() + ", but should be " + ioPorts.size());
29 for (int i = 0; i < ioPorts.size(); i++)
30 if (ioPorts.get(i).getWidth() != arguments.get(i).getWidth())
31 throw new IllegalArgumentException("Argument #" + i + "(" + ioPorts.get(i) + "): Incorrect width: "
32 + arguments.get(i).getWidth() + ", but shoud be " + ioPorts.get(i).getWidth());
35 public String getName()
40 public VerilogComponentDeclaration getReferencedComponent()
42 return referencedComponent;
45 public List<Signal> getArguments()
50 public String toVerilogCode()
52 StringBuilder sb = new StringBuilder();
54 sb.append(referencedComponent.getID() + " " + name);
55 sb.append(arguments.stream().map(Signal::toReferenceVerilogCode).collect(Collectors.joining(", ", "(", ")")));
62 public String toString()
64 return name + "[" + referencedComponent.getID() + "]";
72 result = prime * result + ((arguments == null) ? 0 : arguments.hashCode());
73 result = prime * result + ((name == null) ? 0 : name.hashCode());
74 result = prime * result + ((referencedComponent == null) ? 0 : referencedComponent.hashCode());
79 public boolean equals(Object obj)
85 if (getClass() != obj.getClass())
87 ComponentReference other = (ComponentReference) obj;
88 if (arguments == null)
90 if (other.arguments != null)
92 } else if (!arguments.equals(other.arguments))
96 if (other.name != null)
98 } else if (!name.equals(other.name))
100 if (referencedComponent == null)
102 if (other.referencedComponent != null)
104 } else if (!referencedComponent.equals(other.referencedComponent))