ModelComponentToVerilogConverter can now convert TriStateBuffers
[Mograsim.git] / plugins / net.mograsim.logic.model.verilog / src / net / mograsim / logic / model / verilog / model / statements / Assign.java
1 package net.mograsim.logic.model.verilog.model.statements;
2
3 import java.util.Objects;
4 import java.util.Set;
5
6 import net.mograsim.logic.model.verilog.model.expressions.Expression;
7 import net.mograsim.logic.model.verilog.model.signals.Signal;
8 import net.mograsim.logic.model.verilog.utils.CollectionsUtils;
9
10 public class Assign extends Statement
11 {
12         private final Signal target;
13         private final Expression source;
14
15         public Assign(Signal target, Expression source)
16         {
17                 this.target = Objects.requireNonNull(target);
18                 this.source = Objects.requireNonNull(source);
19
20                 check();
21         }
22
23         private void check()
24         {
25                 if (source.getWidth() != target.getWidth())
26                         throw new IllegalArgumentException("Signal widthes don't match");
27         }
28
29         public Signal getTarget()
30         {
31                 return target;
32         }
33
34         public Expression getSource()
35         {
36                 return source;
37         }
38
39         @Override
40         public String toVerilogCode()
41         {
42                 return "assign " + target.toReferenceVerilogCode() + " = " + source.toVerilogCode() + ";";
43         }
44
45         @Override
46         public Set<String> getDefinedNames()
47         {
48                 return Set.of();
49         }
50
51         @Override
52         public Set<Signal> getDefinedSignals()
53         {
54                 return Set.of();
55         }
56
57         @Override
58         public Set<Signal> getReferencedSignals()
59         {
60                 return CollectionsUtils.union(Set.of(target), source.getReferencedSignals());
61         }
62
63         @Override
64         public String toString()
65         {
66                 return target.getName() + " = " + source;
67         }
68
69         @Override
70         public int hashCode()
71         {
72                 final int prime = 31;
73                 int result = 1;
74                 result = prime * result + ((source == null) ? 0 : source.hashCode());
75                 result = prime * result + ((target == null) ? 0 : target.hashCode());
76                 return result;
77         }
78
79         @Override
80         public boolean equals(Object obj)
81         {
82                 if (this == obj)
83                         return true;
84                 if (obj == null)
85                         return false;
86                 if (getClass() != obj.getClass())
87                         return false;
88                 Assign other = (Assign) obj;
89                 if (source == null)
90                 {
91                         if (other.source != null)
92                                 return false;
93                 } else if (!source.equals(other.source))
94                         return false;
95                 if (target == null)
96                 {
97                         if (other.target != null)
98                                 return false;
99                 } else if (!target.equals(other.target))
100                         return false;
101                 return true;
102         }
103 }