Module: peripheral_gpio
Filename: peripheral_gpio.v
Ports:
|
| Direction | Size | Name | 
|---|
| input |  | clk | 
| output |  | gpio0 | 
| output |  | gpio1 | 
| input | [31:0] | iomem_addr | 
| output | [31:0] | iomem_rdata | 
| output |  | iomem_ready | 
| input |  | iomem_valid | 
| input | [31:0] | iomem_wdata | 
| input | [3:0] | iomem_wstrb | 
| input |  | resetn | 
Child-Modules
Source
module peripheral_gpio (
        input resetn,
        input clk,
        input iomem_valid,
        input [3:0]  iomem_wstrb,
        input [31:0] iomem_addr,
        output reg [31:0] iomem_rdata,
        output reg iomem_ready,
        input [31:0] iomem_wdata,
        output gpio0,
        output gpio1
    );
    reg [31:0] gpio;
    assign gpio0 = gpio[0];
    assign gpio1 = gpio[1];
    always @(posedge clk) begin
        if (!resetn) begin
            gpio <= 0;
        end else begin
            iomem_ready <= 0;
            if (iomem_valid && !iomem_ready) begin
                iomem_ready <= 1;
                iomem_rdata <= gpio;
                if (iomem_wstrb[0]) gpio[ 7: 0] <= iomem_wdata[ 7: 0];
                if (iomem_wstrb[1]) gpio[15: 8] <= iomem_wdata[15: 8];
                if (iomem_wstrb[2]) gpio[23:16] <= iomem_wdata[23:16];
                if (iomem_wstrb[3]) gpio[31:24] <= iomem_wdata[31:24];
            end
        end
    end
endmodule