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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
`include "gfx/gfx_defs.sv"
module gfx
(
input logic clk,
rst_n,
input logic[5:0] cmd_address,
input logic cmd_read,
cmd_write,
input logic[31:0] cmd_writedata,
output logic[31:0] cmd_readdata,
input logic mem_waitrequest,
mem_readdatavalid,
input logic[15:0] mem_readdata,
output logic[25:0] mem_address,
output logic mem_read,
mem_write,
output logic[15:0] mem_writedata,
input logic scan_ready,
output logic scan_valid,
scan_endofpacket,
scan_startofpacket,
output rgb30 scan_data
);
logic enable_clear, start_clear, swap_buffers;
rgb24 clear_color;
gfx_cmd cmd
(
.*
);
logic frag_mask, scan_mask;
gfx_masks masks
(
.frag_mask_read_addr(),
.*
);
logic raster_ready;
fixed_tri raster_ws;
bary_lanes barys;
paint_lanes raster_valid;
frag_xy_lanes fragments;
gfx_raster raster
(
.ws(raster_ws),
.in_ready(raster_ready),
.in_valid(0), //TODO
.out_ready(funnel_ready),
.out_valid(raster_valid),
.vertex_a(), //TODO
.vertex_b(), //TODO
.vertex_c(), //TODO
.*
);
logic frag_mask_set, frag_mask_write, frag_wait;
linear_coord frag_mask_write_addr;
gfx_clear clear
(
.rop_mask_addr(),
.rop_mask_assert(0),
.*
);
logic funnel_ready, funnel_valid;
frag_xy frag;
fixed_tri frag_bary, frag_ws;
gfx_funnel funnel
(
.in_ready(funnel_ready),
.in_valid(raster_valid),
.out_ready(frag_ready),
.out_valid(funnel_valid),
.*
);
logic frag_ready, frag_valid;
frag_paint frag_out;
gfx_frag frag_
(
.out(frag_out),
.ws(frag_ws),
.bary(frag_bary),
.in_ready(frag_ready),
.in_valid(funnel_valid),
.out_ready(1), //TODO
.out_valid(frag_valid),
.*
);
logic scanout_read_tmp, vsync;
linear_coord scan_mask_addr;
gfx_scanout scanout
(
.mask(scan_mask),
.mask_addr(scan_mask_addr),
.fb_read(scanout_read_tmp),
.fb_address(),
.fb_readdata(),
.fb_waitrequest(0),
.fb_readdatavalid(scanout_read_tmp),
.*
);
endmodule
|