1 package net.mograsim.logic.model.verilog.model.statements;
4 import java.util.Objects;
6 import java.util.stream.Collectors;
8 import net.mograsim.logic.model.verilog.model.VerilogComponentDeclaration;
9 import net.mograsim.logic.model.verilog.model.expressions.Expression;
10 import net.mograsim.logic.model.verilog.model.signals.IOPort;
11 import net.mograsim.logic.model.verilog.model.signals.Signal;
13 public class ComponentReference extends Statement
15 private final String name;
16 private final VerilogComponentDeclaration referencedComponent;
17 private final List<Expression> arguments;
19 public ComponentReference(String name, VerilogComponentDeclaration referencedComponent, List<Expression> arguments)
21 this.name = Objects.requireNonNull(name);
22 this.referencedComponent = Objects.requireNonNull(referencedComponent);
23 this.arguments = List.copyOf(arguments);
30 List<IOPort> ioPorts = referencedComponent.getIOPorts();
31 if (ioPorts.size() != arguments.size())
32 throw new IllegalArgumentException(
33 "Incorrect nubmer of arguments given: " + arguments.size() + ", but should be " + ioPorts.size());
35 for (int i = 0; i < ioPorts.size(); i++)
36 if (ioPorts.get(i).getWidth() != arguments.get(i).getWidth())
37 throw new IllegalArgumentException("Argument #" + i + "(" + ioPorts.get(i) + "): Incorrect width: "
38 + arguments.get(i).getWidth() + ", but shoud be " + ioPorts.get(i).getWidth());
41 public String getName()
46 public VerilogComponentDeclaration getReferencedComponent()
48 return referencedComponent;
51 public List<Expression> getArguments()
57 public String toVerilogCode()
59 StringBuilder sb = new StringBuilder();
61 sb.append(referencedComponent.getID() + " " + name);
62 sb.append(arguments.stream().map(Expression::toVerilogCode).collect(Collectors.joining(", ", "(", ")")));
69 public Set<String> getDefinedNames()
75 public Set<Signal> getDefinedSignals()
81 public Set<Signal> getReferencedSignals()
83 return arguments.stream().map(Expression::getReferencedSignals).flatMap(Set::stream).collect(Collectors.toUnmodifiableSet());
87 public String toString()
89 return name + "[" + referencedComponent.getID() + "]";
97 result = prime * result + ((arguments == null) ? 0 : arguments.hashCode());
98 result = prime * result + ((name == null) ? 0 : name.hashCode());
99 result = prime * result + ((referencedComponent == null) ? 0 : referencedComponent.hashCode());
104 public boolean equals(Object obj)
110 if (getClass() != obj.getClass())
112 ComponentReference other = (ComponentReference) obj;
113 if (arguments == null)
115 if (other.arguments != null)
117 } else if (!arguments.equals(other.arguments))
121 if (other.name != null)
123 } else if (!name.equals(other.name))
125 if (referencedComponent == null)
127 if (other.referencedComponent != null)
129 } else if (!referencedComponent.equals(other.referencedComponent))