add Trigger.invert()
authoradam <adam@megacz.com>
Mon, 10 Nov 2008 11:28:40 +0000 (12:28 +0100)
committeradam <adam@megacz.com>
Mon, 10 Nov 2008 11:28:40 +0000 (12:28 +0100)
src/edu/berkeley/fleet/fpga/verilog/Verilog.java

index 56e8fbb..06e474c 100644 (file)
@@ -54,6 +54,14 @@ public class Verilog {
 
     public static interface Trigger {
         public String getVerilogTrigger();
+        public Trigger invert();
+    }
+
+    public static class InvertedTrigger implements Trigger {
+        private final Trigger original;
+        public InvertedTrigger(Trigger original) { this.original = original; }
+        public String getVerilogTrigger() { return "!("+original.getVerilogTrigger()+")"; }
+        public Trigger invert() { return original; }
     }
 
     public static interface Assignable {
@@ -89,6 +97,7 @@ public class Verilog {
         public String getVerilogTrigger() {
             return "&& (("+condition+") ? (1 " + trigger.getVerilogTrigger() + ") : 1)";
         }
+        public Trigger invert() { return new InvertedTrigger(this); }
     }
 
     public static class SimpleAssignable implements Assignable {
@@ -249,6 +258,7 @@ public class Verilog {
             public abstract String getDeclaration();
             public abstract String getAssignments();
             public abstract void   connect(SinkPort driven);
+            public Trigger invert() { return new InvertedTrigger(this); }
         }
 
         public static class InstantiatedModule {