user PADDR in peripherals not ADDR
[shakti-peripherals.git] / src / peripherals / gpio / gpio.bsv
index 3ac83bad392628c266ee6bf203b0b15dcf2da30d..df55b67eea41f6a8a6a6449b514e798453f12d7b 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*)
@@ -55,7 +56,7 @@ package gpio;
   interface GPIO#(numeric type ionum);
     interface GPIO_config#(ionum) pad_config;
     interface GPIO_func#(ionum) func;
-               interface AXI4_Lite_Slave_IFC#(`ADDR,`DATA,`USERSPACE) axi_slave;
+               interface AXI4_Lite_Slave_IFC#(`PADDR,`DATA,`USERSPACE) axi_slave;
        endinterface
 
        module mkgpio(GPIO#(ionum_));
@@ -73,7 +74,7 @@ package gpio;
                Vector#(ionum_,ConfigReg#(Bit#(1))) pwrupzhl_reg        <-replicateM(mkConfigReg(0));   
                Vector#(ionum_,ConfigReg#(Bit#(1))) pwrup_pull_en_reg   <-replicateM(mkConfigReg(0));   
                
-               AXI4_Lite_Slave_Xactor_IFC #(`ADDR, `DATA, `USERSPACE)  s_xactor <- mkAXI4_Lite_Slave_Xactor;
+               AXI4_Lite_Slave_Xactor_IFC #(`PADDR, `DATA, `USERSPACE)  s_xactor <- mkAXI4_Lite_Slave_Xactor;
                rule rl_wr_respond;
                        // Get the wr request
        let aw <- pop_o (s_xactor.o_wr_addr);
@@ -185,22 +186,28 @@ 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 ActionValue#(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 ActionValue#(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]);
                        return temp;
                endmethod
+      endinterface;
     endinterface;
     interface pad_config=interface GPIO_config
                method Vector#(ionum,Bit#(1))   gpio_DRV0;