mirror of https://github.com/YosysHQ/picorv32.git
119 lines
3.9 KiB
Verilog
119 lines
3.9 KiB
Verilog
|
|
module top (
|
|
input clk, io_resetn,
|
|
output io_trap,
|
|
|
|
output io_mem_axi_awvalid,
|
|
input io_mem_axi_awready,
|
|
output [31:0] io_mem_axi_awaddr,
|
|
output [ 2:0] io_mem_axi_awprot,
|
|
|
|
output io_mem_axi_wvalid,
|
|
input io_mem_axi_wready,
|
|
output [31:0] io_mem_axi_wdata,
|
|
output [ 3:0] io_mem_axi_wstrb,
|
|
|
|
input io_mem_axi_bvalid,
|
|
output io_mem_axi_bready,
|
|
|
|
output io_mem_axi_arvalid,
|
|
input io_mem_axi_arready,
|
|
output [31:0] io_mem_axi_araddr,
|
|
output [ 2:0] io_mem_axi_arprot,
|
|
|
|
input io_mem_axi_rvalid,
|
|
output io_mem_axi_rready,
|
|
input [31:0] io_mem_axi_rdata,
|
|
|
|
input [31:0] io_irq,
|
|
output [31:0] io_eoi
|
|
);
|
|
wire resetn;
|
|
wire trap;
|
|
wire mem_axi_awvalid;
|
|
wire mem_axi_awready;
|
|
wire [31:0] mem_axi_awaddr;
|
|
wire [2:0] mem_axi_awprot;
|
|
wire mem_axi_wvalid;
|
|
wire mem_axi_wready;
|
|
wire [31:0] mem_axi_wdata;
|
|
wire [3:0] mem_axi_wstrb;
|
|
wire mem_axi_bvalid;
|
|
wire mem_axi_bready;
|
|
wire mem_axi_arvalid;
|
|
wire mem_axi_arready;
|
|
wire [31:0] mem_axi_araddr;
|
|
wire [2:0] mem_axi_arprot;
|
|
wire mem_axi_rvalid;
|
|
wire mem_axi_rready;
|
|
wire [31:0] mem_axi_rdata;
|
|
wire [31:0] irq;
|
|
wire [31:0] eoi;
|
|
|
|
delay4 #( 1) delay_resetn (clk, io_resetn , resetn );
|
|
delay4 #( 1) delay_trap (clk, trap , io_trap );
|
|
delay4 #( 1) delay_mem_axi_awvalid (clk, mem_axi_awvalid, io_mem_axi_awvalid);
|
|
delay4 #( 1) delay_mem_axi_awready (clk, io_mem_axi_awready, mem_axi_awready);
|
|
delay4 #(32) delay_mem_axi_awaddr (clk, mem_axi_awaddr , io_mem_axi_awaddr );
|
|
delay4 #( 3) delay_mem_axi_awprot (clk, mem_axi_awprot , io_mem_axi_awprot );
|
|
delay4 #( 1) delay_mem_axi_wvalid (clk, mem_axi_wvalid , io_mem_axi_wvalid );
|
|
delay4 #( 1) delay_mem_axi_wready (clk, io_mem_axi_wready , mem_axi_wready );
|
|
delay4 #(32) delay_mem_axi_wdata (clk, mem_axi_wdata , io_mem_axi_wdata );
|
|
delay4 #( 4) delay_mem_axi_wstrb (clk, mem_axi_wstrb , io_mem_axi_wstrb );
|
|
delay4 #( 1) delay_mem_axi_bvalid (clk, io_mem_axi_bvalid , mem_axi_bvalid );
|
|
delay4 #( 1) delay_mem_axi_bready (clk, mem_axi_bready , io_mem_axi_bready );
|
|
delay4 #( 1) delay_mem_axi_arvalid (clk, mem_axi_arvalid, io_mem_axi_arvalid);
|
|
delay4 #( 1) delay_mem_axi_arready (clk, io_mem_axi_arready, mem_axi_arready);
|
|
delay4 #(32) delay_mem_axi_araddr (clk, mem_axi_araddr , io_mem_axi_araddr );
|
|
delay4 #( 3) delay_mem_axi_arprot (clk, mem_axi_arprot , io_mem_axi_arprot );
|
|
delay4 #( 1) delay_mem_axi_rvalid (clk, io_mem_axi_rvalid , mem_axi_rvalid );
|
|
delay4 #( 1) delay_mem_axi_rready (clk, mem_axi_rready , io_mem_axi_rready );
|
|
delay4 #(32) delay_mem_axi_rdata (clk, io_mem_axi_rdata , mem_axi_rdata );
|
|
delay4 #(32) delay_irq (clk, io_irq , irq );
|
|
delay4 #(32) delay_eoi (clk, eoi , io_eoi );
|
|
|
|
picorv32_axi #(
|
|
.TWO_CYCLE_ALU(1)
|
|
) cpu (
|
|
.clk (clk ),
|
|
.resetn (resetn ),
|
|
.trap (trap ),
|
|
.mem_axi_awvalid(mem_axi_awvalid),
|
|
.mem_axi_awready(mem_axi_awready),
|
|
.mem_axi_awaddr (mem_axi_awaddr ),
|
|
.mem_axi_awprot (mem_axi_awprot ),
|
|
.mem_axi_wvalid (mem_axi_wvalid ),
|
|
.mem_axi_wready (mem_axi_wready ),
|
|
.mem_axi_wdata (mem_axi_wdata ),
|
|
.mem_axi_wstrb (mem_axi_wstrb ),
|
|
.mem_axi_bvalid (mem_axi_bvalid ),
|
|
.mem_axi_bready (mem_axi_bready ),
|
|
.mem_axi_arvalid(mem_axi_arvalid),
|
|
.mem_axi_arready(mem_axi_arready),
|
|
.mem_axi_araddr (mem_axi_araddr ),
|
|
.mem_axi_arprot (mem_axi_arprot ),
|
|
.mem_axi_rvalid (mem_axi_rvalid ),
|
|
.mem_axi_rready (mem_axi_rready ),
|
|
.mem_axi_rdata (mem_axi_rdata ),
|
|
.irq (irq ),
|
|
.eoi (eoi )
|
|
);
|
|
endmodule
|
|
|
|
module delay4 #(
|
|
parameter WIDTH = 1
|
|
) (
|
|
input clk,
|
|
input [WIDTH-1:0] in,
|
|
output reg [WIDTH-1:0] out
|
|
);
|
|
reg [WIDTH-1:0] q1, q2, q3;
|
|
always @(posedge clk) begin
|
|
q1 <= in;
|
|
q2 <= q1;
|
|
q3 <= q2;
|
|
out <= q3;
|
|
end
|
|
endmodule
|
|
|