convert gpio to getput
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 23 Jul 2018 12:13:50 +0000 (13:13 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 23 Jul 2018 12:13:50 +0000 (13:13 +0100)
src/peripherals/gpio/gpio.bsv

index 3ac83bad392628c266ee6bf203b0b15dcf2da30d..84e54bedfc52bae0b5feddf3ee092924af9efb0b 100644 (file)
@@ -14,6 +14,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 package gpio;
        /*==== Package imports ==== */
        import TriState          ::*;
+    import GetPut            ::*;
        import Vector                            ::*;
        import BUtils::*;
        import ConfigReg                        ::*;
@@ -26,11 +27,11 @@ package gpio;
 
        interface GPIO_func#(numeric type ionum);
                (*always_ready,always_enabled*)
-               method Action gpio_in (Vector#(ionum,Bit#(1)) inp);
+        interface Put#(Vector#(ionum,Bit#(1)) gpio_in;
                (*always_ready*)
-               method Vector#(ionum,Bit#(1))   gpio_out;
+        interface Get#(Vector#(ionum,Bit#(1)) gpio_out;
                (*always_ready*)
-               method Vector#(ionum,Bit#(1))   gpio_out_en;
+        interface Get#(Vector#(ionum,Bit#(1)) gpio_out_en;
   endinterface
        interface GPIO_config#(numeric type ionum);
                (*always_ready*)
@@ -185,17 +186,22 @@ package gpio;
 
                interface axi_slave= s_xactor.axi_side;
     interface func=interface GPIO_func
-       method Action gpio_in (Vector#(ionum,Bit#(1)) inp);
+      interface gpio_in = interface Put#(ionum)
+        method Action put(Vector#(ionum,Bit#(1)) in);
                        for(Integer i=0;i<ionum;i=i+1)
-                               datain_register[i]<=inp[i];
+                               datain_register[i]<=in[i];
                endmethod
-               method Vector#(ionum,Bit#(1))   gpio_out;
+      endinterface;
+      interface gpio_out = interface Get#(ionum)
+               method Vector#(ionum,Bit#(1))  get;
                        Vector#(ionum,Bit#(1)) temp;
                        for(Integer i=0;i<ionum;i=i+1)
                                temp[i]=dataout_register[i];
                        return temp;
                endmethod
-               method Vector#(ionum,Bit#(1))   gpio_out_en;
+      endinterface;
+      interface gpio_out_en = interface Get#(ionum)
+               method Vector#(ionum,Bit#(1))   get;
                        Vector#(ionum,Bit#(1)) temp;
                        for(Integer i=0;i<ionum;i=i+1)
                                temp[i]=pack(direction_reg[i]);