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
123
124
125
126
127
128
129
130
131
|
`include "gfx/gfx_defs.sv"
module gfx_sp
(
input logic clk,
rst_n,
input logic batch_waitrequest,
batch_readdatavalid,
input vram_word batch_readdata,
output vram_addr batch_address,
output logic batch_read,
input logic fetch_waitrequest,
fetch_readdatavalid,
input vram_word fetch_readdata,
output vram_addr fetch_address,
output logic fetch_read,
input logic program_start,
input cmd_word program_header_base,
program_header_size,
output logic running,
input logic send_ready,
output logic send_valid,
output lane_word send_data,
output lane_mask send_mask
);
logic batch_start, clear_lanes, insn_valid;
cmd_word batch_length;
insn_word insn;
vram_insn_addr batch_base;
gfx_sp_fetch fetch
(
.ready(insn_ready),
.valid(insn_valid),
.*
);
logic deco_valid, insn_ready;
insn_deco deco;
gfx_sp_decode decode
(
.*
);
logic deco_ready, combiner_issue_valid, shuffler_issue_valid, stream_issue_valid;
vreg_num rd_a_reg, rd_b_reg;
gfx_sp_issue issue
(
.*
);
logic recv_valid;
lane_word recv_data;
lane_mask recv_mask;
gfx_sp_batch batch
(
.out_data(recv_data),
.out_mask(recv_mask),
.out_ready(recv_ready),
.out_valid(recv_valid),
.*
);
logic shuffler_issue_ready, shuffler_wb_valid;
wb_op shuffler_wb;
gfx_sp_shuffler shuffler
(
.wb(shuffler_wb),
.in_ready(shuffler_issue_ready),
.in_valid(shuffler_issue_valid),
.wb_ready(shuffler_wb_ready),
.wb_valid(shuffler_wb_valid),
.*
);
logic combiner_issue_ready, combiner_wb_valid;
wb_op combiner_wb;
gfx_sp_combiner combiner
(
.wb(combiner_wb),
.in_ready(combiner_issue_ready),
.in_valid(combiner_issue_valid),
.wb_ready(combiner_wb_ready),
.wb_valid(combiner_wb_valid),
.*
);
logic recv_ready, stream_issue_ready, stream_wb_valid;
wb_op stream_wb;
gfx_sp_stream stream
(
.wb(stream_wb),
.in_ready(stream_issue_ready),
.in_valid(stream_issue_valid),
.wb_ready(stream_wb_ready),
.wb_valid(stream_wb_valid),
.*
);
mat4 wr_data;
logic combiner_wb_ready, shuffler_wb_ready, stream_wb_ready, wr;
vreg_num wr_reg;
gfx_sp_writeback writeback
(
.*
);
mat4 a, b;
gfx_sp_regs regs
(
.rd_a_data(a),
.rd_b_data(b),
.*
);
logic batch_end;
endmodule
|