Module: peripheral_sysclock
Filename: peripheral_sysclock.v
Ports:
|
Direction | Size | Name |
---|
input | | clk |
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_sysclock (
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
);
reg [31:0] sysclock = 0;
reg [31:0] counter = 0;
always @(posedge clk) begin
if (!resetn) begin
sysclock <= 0;
end else begin
if (counter == 0) begin
counter <= `PICOSOC_CLOCK_1000;
sysclock <= sysclock + 1;
end else begin
counter <= counter - 1;
end
iomem_ready <= 0;
if (iomem_valid && !iomem_ready) begin
iomem_ready <= 1;
iomem_rdata <= sysclock;
if (iomem_wstrb[0]) sysclock[ 7: 0] <= iomem_wdata[ 7: 0];
if (iomem_wstrb[1]) sysclock[15: 8] <= iomem_wdata[15: 8];
if (iomem_wstrb[2]) sysclock[23:16] <= iomem_wdata[23:16];
if (iomem_wstrb[3]) sysclock[31:24] <= iomem_wdata[31:24];
end
end
end
endmodule