-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcpu_top.v
66 lines (57 loc) · 1.38 KB
/
cpu_top.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*
* The top level module, meant to be synthesized
*/
module cpu_top
(
input wire clk,
input wire resetb,
inout wire [7:0] gpio0
);
wire [7:0] io_addr;
wire io_en, io_we;
wire [31:0] io_data_read;
wire [31:0] io_data_write;
wire irq_mtimecmp;
/* verilator lint_off UNUSED */
wire [31:2] ram_iaddr;
wire [31:0] ram_irdata;
wire [31:2] ram_addr;
wire [3:0] ram_wstrb;
wire [31:0] ram_rdata;
wire [31:0] ram_wdata;
/* verilator lint_on UNUSED */
wire [7:0] input0, output0, dir0;
generate
genvar i;
for (i=0; i<8; i=i+1) begin
assign gpio0[i] = dir0[i] ? output0[i] : 1'bZ;
assign input0[i] = gpio0[i];
end
endgenerate
bram_dpstrobe RAM0
(
.clk(clk),
.addra(ram_iaddr[15:2]), .addrb(ram_addr[15:2]),
.dina(32'bX), .dinb(ram_wdata),
.wea(4'b0), .web(ram_wstrb),
.douta(ram_irdata), .doutb(ram_rdata)
);
core_top CT0
(
.clk(clk), .resetb(resetb),
.ram_iaddr(ram_iaddr), .ram_irdata(ram_irdata),
.ram_addr(ram_addr), .ram_wstrb(ram_wstrb),
.ram_rdata(ram_rdata), .ram_wdata(ram_wdata),
.io_addr(io_addr), .io_en(io_en), .io_we(io_we),
.io_data_read(io_data_read), .io_data_write(io_data_write),
.irq_mtimecmp(irq_mtimecmp)
);
io_port IO0
(
.clk(clk), .resetb(resetb),
.io_addr(io_addr), .io_en(io_en), .io_we(io_we),
.io_data_read(io_data_read), .io_data_write(io_data_write),
.irq_mtimecmp(irq_mtimecmp),
.output0(output0), .input0(input0), .dir0(dir0)
);
endmodule