-
Notifications
You must be signed in to change notification settings - Fork 0
/
Types.sv
81 lines (64 loc) · 1.61 KB
/
Types.sv
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
`ifndef TYPES_SV
`define TYPES_SV
`include "MathTypes.sv"
// 接口设计,封装数据类型,以便更换底层算术类型
`define NUMBER `SINGLE
`define NUMBER_WIDTH `SINGLE_WIDTH
// Systolic Array Definition
`define SYS_ARRAY_LEN 6
typedef struct packed {
`NUMBER value;
logic valid;
} Scalar;
function automatic Scalar _ScalarZero;
_ScalarZero.value = `NUMBER_WIDTH'b0;
_ScalarZero.valid = 1'b0;
endfunction
typedef Scalar ScalarArray [`SYS_ARRAY_LEN];
function automatic ScalarArray _ScalarZeroArray;
for(int i = 0; i < `SYS_ARRAY_LEN; i++) begin
_ScalarZeroArray[i] = _ScalarZero();
end
endfunction
typedef ScalarArray Scalar2DArray [`SYS_ARRAY_LEN];
function automatic Scalar2DArray _ScalarZero2DArray;
for(int i = 0; i < `SYS_ARRAY_LEN; i++) begin
_ScalarZero2DArray[i] = _ScalarZeroArray();
end
endfunction
// Bus Definition
`define BUS_ARRAY_WIDTH `SYS_ARRAY_LEN
interface WritePort;
logic wvalid;
logic wready;
`NUMBER wdata [`BUS_ARRAY_WIDTH];
modport master(
output wvalid,
input wready,
output wdata
);
modport slave(
input wvalid,
output wready,
input wdata
);
endinterface
interface ReadPort;
logic rvalid;
logic rready;
`NUMBER rdata [`BUS_ARRAY_WIDTH];
modport master(
output rvalid,
input rready,
input rdata
);
modport slave(
input rvalid,
output rready,
output rdata
);
endinterface
`define SLAVE_ADDR `SYS_ARRAY_LEN
`define CORE_NUMBER 8
`define MASTER_ADDR `SLAVE_ADDR+$clog2(`CORE_NUMBER)
`endif