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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
module gfx_top
import gfx::*;
(
input logic clk,
rst_n,
srst_n,
if_axib.m vram,
if_axil.s host_ctrl
);
if_axib data_mem(), insn_mem(), sched_vram();
if_axil bootrom_axi(), host_ctrl_axi(), sched_axi(), shader_0_axi();
logic irq_host_ctrl;
irq_lines irq;
gfx_sched sched
(
.clk,
.rst_n,
.srst_n,
.irq,
.axim(sched_axi.m)
);
axilemu host_ctrl_bridge
(
.clk,
.rst_n,
.irq(irq_host_ctrl),
.agent(host_ctrl),
.driver(host_ctrl_axi.s)
);
gfx_bootrom bootrom
(
.clk,
.rst_n,
.axis(bootrom_axi.s)
);
gfx_shader shader_0
(
.clk,
.rst_n,
.sched(shader_0_axi.s),
.data_mem(data_mem.m),
.insn_mem(insn_mem.m)
);
gfx_xbar_sched sched_xbar
(
.clk,
.srst_n,
.sched(sched_axi.s),
.vram(sched_vram.m),
.bootrom(bootrom_axi.m),
.shader_0(shader_0_axi.m),
.host_ctrl(host_ctrl_axi.m)
);
gfx_xbar_vram vram_xbar
(
.clk,
.srst_n,
.vram,
.sched(sched_vram.s),
.shader_0_data(data_mem.s),
.shader_0_insn(insn_mem.s)
);
/*TODO
gfx_raster raster
(
.clk,
.rst_n,
.geometry(TODO),
.coverage(TODO)
);
*/
always_ff @(posedge clk or negedge rst_n)
if (~rst_n)
irq <= '0;
else begin
irq <= '0;
irq[0] <= irq_host_ctrl;
end
endmodule
|