summaryrefslogtreecommitdiff
path: root/rtl/legacy_gfx/gfx_sp.sv
blob: ce0f9ff435ab47b277b62b8679c12fb984f827f4 (plain)
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