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
|
module w3d_top
import gfx::*;
(
input logic clk,
rst_n,
input word a[SHADER_LANES],
b[SHADER_LANES],
input logic in_valid,
setup_mul_float,
setup_unit_b,
mnorm_put_hi,
mnorm_put_lo,
mnorm_put_mul,
mnorm_zero_b,
mnorm_zero_flags,
minmax_abs,
minmax_swap,
minmax_zero_min,
minmax_copy_flags,
shiftr_int_signed,
addsub_copy_flags,
addsub_int_operand,
clz_force_nop,
shiftl_copy_flags,
round_copy_flags,
round_enable,
encode_enable,
output logic out_valid,
output word q[SHADER_LANES],
input word geom_tdata,
input logic geom_tlast,
geom_tvalid,
output logic geom_tready,
input logic raster_tready,
output logic raster_tlast,
raster_tvalid,
output word raster_tdata
);
gfx_wb fpint_wb();
if_pkts coverage(), geometry();
gfx_regfile_io fpint_io();
assign q = fpint_wb.rx.lanes;
assign out_valid = fpint_wb.rx.valid;
assign geometry.tx.tdata = geom_tdata;
assign geometry.tx.tlast = geom_tlast;
assign geometry.tx.tvalid = geom_tvalid;
assign geom_tready = geometry.tx.tready;
assign raster_tdata = coverage.rx.tdata;
assign raster_tlast = coverage.rx.tlast;
assign raster_tvalid = coverage.rx.tvalid;
assign coverage.rx.tready = raster_tready;
fpint_op op;
assign op.writeback = 1;
assign op.setup_mul_float = setup_mul_float;
assign op.setup_unit_b = setup_unit_b;
assign op.mnorm_put_hi = mnorm_put_hi;
assign op.mnorm_put_lo = mnorm_put_lo;
assign op.mnorm_put_mul = mnorm_put_mul;
assign op.mnorm_zero_b = mnorm_zero_b;
assign op.mnorm_zero_flags = mnorm_zero_flags;
assign op.minmax_abs = minmax_abs;
assign op.minmax_swap = minmax_swap;
assign op.minmax_zero_min = minmax_zero_min;
assign op.minmax_copy_flags = minmax_copy_flags;
assign op.shiftr_int_signed = shiftr_int_signed;
assign op.addsub_copy_flags = addsub_copy_flags;
assign op.addsub_int_operand = addsub_int_operand;
assign op.clz_force_nop = clz_force_nop;
assign op.shiftl_copy_flags = shiftl_copy_flags;
assign op.round_copy_flags = round_copy_flags;
assign op.round_enable = round_enable;
assign op.encode_enable = encode_enable;
assign fpint_io.regs.a = a;
assign fpint_io.regs.b = b;
gfx_shader_fpint fpint
(
.clk,
.rst_n,
.op,
.wb(fpint_wb.tx),
.wave(),
.abort(0),
.in_valid,
.read_data(fpint_io.ab)
);
gfx_raster raster
(
.clk,
.rst_n,
.geometry(geometry.rx),
.coverage(coverage.tx)
);
gfx_top gfx
(
.clk,
.rst_n
);
endmodule
|