package gpio;
/*==== Package imports ==== */
import TriState ::*;
+ import GetPut ::*;
import Vector ::*;
import BUtils::*;
import ConfigReg ::*;
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*)
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_));
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);
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;