1c58dc6eb4611caf4b0a8344a9c83dd9cf33fe9b
[Mograsim.git] / plugins / net.mograsim.logic.model.verilog / src / net / mograsim / logic / model / verilog / model / Assign.java
1 package net.mograsim.logic.model.verilog.model;
2
3 import java.util.Objects;
4
5 public class Assign
6 {
7         private final Signal source;
8         private final NamedSignal target;
9
10         public Assign(Signal source, NamedSignal target)
11         {
12                 this.source = Objects.requireNonNull(source);
13                 this.target = Objects.requireNonNull(target);
14
15                 check();
16         }
17
18         private void check()
19         {
20                 if (source.getWidth() != target.getWidth())
21                         throw new IllegalArgumentException("Signal widthes don't match");
22         }
23
24         public Signal getSource()
25         {
26                 return source;
27         }
28
29         public Signal getTarget()
30         {
31                 return target;
32         }
33
34         public String toVerilogCode()
35         {
36                 return "assign " + target.toReferenceVerilogCode() + " = " + source.toReferenceVerilogCode() + ";";
37         }
38
39         @Override
40         public String toString()
41         {
42                 return target.getName() + " = " + source.toReferenceVerilogCode();
43         }
44
45         @Override
46         public int hashCode()
47         {
48                 final int prime = 31;
49                 int result = 1;
50                 result = prime * result + ((source == null) ? 0 : source.hashCode());
51                 result = prime * result + ((target == null) ? 0 : target.hashCode());
52                 return result;
53         }
54
55         @Override
56         public boolean equals(Object obj)
57         {
58                 if (this == obj)
59                         return true;
60                 if (obj == null)
61                         return false;
62                 if (getClass() != obj.getClass())
63                         return false;
64                 Assign other = (Assign) obj;
65                 if (source == null)
66                 {
67                         if (other.source != null)
68                                 return false;
69                 } else if (!source.equals(other.source))
70                         return false;
71                 if (target == null)
72                 {
73                         if (other.target != null)
74                                 return false;
75                 } else if (!target.equals(other.target))
76                         return false;
77                 return true;
78         }
79 }