Skip to content

Commit 968b5a5

Browse files
committed
typedef: add DECL macros to be used in parameter post list
1 parent a256a3b commit 968b5a5

File tree

1 file changed

+133
-105
lines changed

1 file changed

+133
-105
lines changed

include/axi/typedef.svh

Lines changed: 133 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
// - Thomas Benz <tbenz@iis.ee.ethz.ch>
1515
// - Florian Zaruba <zarubaf@iis.ee.ethz.ch>
1616
// - Wolfgang Roenninger <wroennin@iis.ee.ethz.ch>
17+
// - Riccardo Tedeschi <riccardo.tedeschi6@unibo.it>
1718

1819
// Macros to define AXI and AXI-Lite Channel and Request/Response Structs
1920

@@ -31,77 +32,91 @@
3132
// `AXI_TYPEDEF_R_CHAN_T(axi_r_t, axi_data_t, axi_id_t, axi_user_t)
3233
// `AXI_TYPEDEF_REQ_T(axi_req_t, axi_aw_t, axi_w_t, axi_ar_t)
3334
// `AXI_TYPEDEF_RESP_T(axi_resp_t, axi_b_t, axi_r_t)
34-
`define AXI_TYPEDEF_AW_CHAN_T(aw_chan_t, addr_t, id_t, user_t) \
35-
typedef struct packed { \
36-
id_t id; \
37-
addr_t addr; \
38-
axi_pkg::len_t len; \
39-
axi_pkg::size_t size; \
40-
axi_pkg::burst_t burst; \
41-
logic lock; \
42-
axi_pkg::cache_t cache; \
43-
axi_pkg::prot_t prot; \
44-
axi_pkg::qos_t qos; \
45-
axi_pkg::region_t region; \
46-
axi_pkg::atop_t atop; \
47-
user_t user; \
48-
} aw_chan_t;
35+
`define AXI_DECL_AW_CHAN_T(addr_t, id_t, user_t) \
36+
struct packed { \
37+
id_t id; \
38+
addr_t addr; \
39+
axi_pkg::len_t len; \
40+
axi_pkg::size_t size; \
41+
axi_pkg::burst_t burst; \
42+
logic lock; \
43+
axi_pkg::cache_t cache; \
44+
axi_pkg::prot_t prot; \
45+
axi_pkg::qos_t qos; \
46+
axi_pkg::region_t region; \
47+
axi_pkg::atop_t atop; \
48+
user_t user; \
49+
}
50+
`define AXI_TYPEDEF_AW_CHAN_T(aw_chan_t, addr_t, id_t, user_t) \
51+
typedef `AXI_DECL_AW_CHAN_T(addr_t, id_t, user_t) aw_chan_t;
52+
`define AXI_DECL_W_CHAN_T(data_t, strb_t, user_t) \
53+
struct packed { \
54+
data_t data; \
55+
strb_t strb; \
56+
logic last; \
57+
user_t user; \
58+
}
4959
`define AXI_TYPEDEF_W_CHAN_T(w_chan_t, data_t, strb_t, user_t) \
50-
typedef struct packed { \
51-
data_t data; \
52-
strb_t strb; \
53-
logic last; \
54-
user_t user; \
55-
} w_chan_t;
60+
typedef `AXI_DECL_W_CHAN_T(data_t, strb_t, user_t) w_chan_t;
61+
`define AXI_DECL_B_CHAN_T(id_t, user_t) \
62+
struct packed { \
63+
id_t id; \
64+
axi_pkg::resp_t resp; \
65+
user_t user; \
66+
}
5667
`define AXI_TYPEDEF_B_CHAN_T(b_chan_t, id_t, user_t) \
57-
typedef struct packed { \
58-
id_t id; \
59-
axi_pkg::resp_t resp; \
60-
user_t user; \
61-
} b_chan_t;
68+
typedef `AXI_DECL_B_CHAN_T(id_t, user_t) b_chan_t;
69+
`define AXI_DECL_AR_CHAN_T(addr_t, id_t, user_t) \
70+
struct packed { \
71+
id_t id; \
72+
addr_t addr; \
73+
axi_pkg::len_t len; \
74+
axi_pkg::size_t size; \
75+
axi_pkg::burst_t burst; \
76+
logic lock; \
77+
axi_pkg::cache_t cache; \
78+
axi_pkg::prot_t prot; \
79+
axi_pkg::qos_t qos; \
80+
axi_pkg::region_t region; \
81+
user_t user; \
82+
}
6283
`define AXI_TYPEDEF_AR_CHAN_T(ar_chan_t, addr_t, id_t, user_t) \
63-
typedef struct packed { \
64-
id_t id; \
65-
addr_t addr; \
66-
axi_pkg::len_t len; \
67-
axi_pkg::size_t size; \
68-
axi_pkg::burst_t burst; \
69-
logic lock; \
70-
axi_pkg::cache_t cache; \
71-
axi_pkg::prot_t prot; \
72-
axi_pkg::qos_t qos; \
73-
axi_pkg::region_t region; \
74-
user_t user; \
75-
} ar_chan_t;
76-
`define AXI_TYPEDEF_R_CHAN_T(r_chan_t, data_t, id_t, user_t) \
77-
typedef struct packed { \
78-
id_t id; \
79-
data_t data; \
80-
axi_pkg::resp_t resp; \
81-
logic last; \
82-
user_t user; \
83-
} r_chan_t;
84+
typedef `AXI_DECL_AR_CHAN_T(addr_t, id_t, user_t) ar_chan_t;
85+
`define AXI_DECL_R_CHAN_T(data_t, id_t, user_t) \
86+
struct packed { \
87+
id_t id; \
88+
data_t data; \
89+
axi_pkg::resp_t resp; \
90+
logic last; \
91+
user_t user; \
92+
}
93+
`define AXI_TYPEDEF_R_CHAN_T(r_chan_t, data_t, id_t, user_t) \
94+
typedef `AXI_DECL_R_CHAN_T(data_t, id_t, user_t) r_chan_t;
95+
`define AXI_DECL_REQ_T(aw_chan_t, w_chan_t, ar_chan_t) \
96+
struct packed { \
97+
aw_chan_t aw; \
98+
logic aw_valid; \
99+
w_chan_t w; \
100+
logic w_valid; \
101+
logic b_ready; \
102+
ar_chan_t ar; \
103+
logic ar_valid; \
104+
logic r_ready; \
105+
}
84106
`define AXI_TYPEDEF_REQ_T(req_t, aw_chan_t, w_chan_t, ar_chan_t) \
85-
typedef struct packed { \
86-
aw_chan_t aw; \
87-
logic aw_valid; \
88-
w_chan_t w; \
89-
logic w_valid; \
90-
logic b_ready; \
91-
ar_chan_t ar; \
92-
logic ar_valid; \
93-
logic r_ready; \
94-
} req_t;
107+
typedef `AXI_DECL_REQ_T(aw_chan_t, w_chan_t, ar_chan_t) req_t;
108+
`define AXI_DECL_RESP_T(b_chan_t, r_chan_t) \
109+
struct packed { \
110+
logic aw_ready; \
111+
logic ar_ready; \
112+
logic w_ready; \
113+
logic b_valid; \
114+
b_chan_t b; \
115+
logic r_valid; \
116+
r_chan_t r; \
117+
}
95118
`define AXI_TYPEDEF_RESP_T(resp_t, b_chan_t, r_chan_t) \
96-
typedef struct packed { \
97-
logic aw_ready; \
98-
logic ar_ready; \
99-
logic w_ready; \
100-
logic b_valid; \
101-
b_chan_t b; \
102-
logic r_valid; \
103-
r_chan_t r; \
104-
} resp_t;
119+
typedef `AXI_DECL_RESP_T(b_chan_t, r_chan_t) resp_t;
105120
////////////////////////////////////////////////////////////////////////////////////////////////////
106121

107122

@@ -154,51 +169,65 @@
154169
// `AXI_LITE_TYPEDEF_R_CHAN_T(axi_lite_r_t, axi_lite_data_t)
155170
// `AXI_LITE_TYPEDEF_REQ_T(axi_lite_req_t, axi_lite_aw_t, axi_lite_w_t, axi_lite_ar_t)
156171
// `AXI_LITE_TYPEDEF_RESP_T(axi_lite_resp_t, axi_lite_b_t, axi_lite_r_t)
172+
`define AXI_LITE_DECL_AW_CHAN_T(addr_t) \
173+
struct packed { \
174+
addr_t addr; \
175+
axi_pkg::prot_t prot; \
176+
}
157177
`define AXI_LITE_TYPEDEF_AW_CHAN_T(aw_chan_lite_t, addr_t) \
158-
typedef struct packed { \
159-
addr_t addr; \
160-
axi_pkg::prot_t prot; \
161-
} aw_chan_lite_t;
178+
typedef `AXI_LITE_DECL_AW_CHAN_T(addr_t) aw_chan_lite_t;
179+
`define AXI_LITE_DECL_W_CHAN_T(data_t, strb_t) \
180+
struct packed { \
181+
data_t data; \
182+
strb_t strb; \
183+
}
162184
`define AXI_LITE_TYPEDEF_W_CHAN_T(w_chan_lite_t, data_t, strb_t) \
163-
typedef struct packed { \
164-
data_t data; \
165-
strb_t strb; \
166-
} w_chan_lite_t;
185+
typedef `AXI_LITE_DECL_W_CHAN_T(data_t, strb_t) w_chan_lite_t;
186+
`define AXI_LITE_DECL_B_CHAN_T \
187+
struct packed { \
188+
axi_pkg::resp_t resp; \
189+
}
167190
`define AXI_LITE_TYPEDEF_B_CHAN_T(b_chan_lite_t) \
168-
typedef struct packed { \
169-
axi_pkg::resp_t resp; \
170-
} b_chan_lite_t;
191+
typedef `AXI_LITE_DECL_B_CHAN_T b_chan_lite_t;
192+
`define AXI_LITE_DECL_AR_CHAN_T(addr_t) \
193+
struct packed { \
194+
addr_t addr; \
195+
axi_pkg::prot_t prot; \
196+
}
171197
`define AXI_LITE_TYPEDEF_AR_CHAN_T(ar_chan_lite_t, addr_t) \
172-
typedef struct packed { \
173-
addr_t addr; \
174-
axi_pkg::prot_t prot; \
175-
} ar_chan_lite_t;
198+
typedef `AXI_LITE_DECL_AR_CHAN_T(addr_t) ar_chan_lite_t;
199+
`define AXI_LITE_DECL_R_CHAN_T(data_t) \
200+
struct packed { \
201+
data_t data; \
202+
axi_pkg::resp_t resp; \
203+
}
176204
`define AXI_LITE_TYPEDEF_R_CHAN_T(r_chan_lite_t, data_t) \
177-
typedef struct packed { \
178-
data_t data; \
179-
axi_pkg::resp_t resp; \
180-
} r_chan_lite_t;
205+
typedef `AXI_LITE_DECL_R_CHAN_T(data_t) r_chan_lite_t;
206+
`define AXI_LITE_DECL_REQ_T(aw_chan_lite_t, w_chan_lite_t, ar_chan_lite_t) \
207+
struct packed { \
208+
aw_chan_lite_t aw; \
209+
logic aw_valid; \
210+
w_chan_lite_t w; \
211+
logic w_valid; \
212+
logic b_ready; \
213+
ar_chan_lite_t ar; \
214+
logic ar_valid; \
215+
logic r_ready; \
216+
}
181217
`define AXI_LITE_TYPEDEF_REQ_T(req_lite_t, aw_chan_lite_t, w_chan_lite_t, ar_chan_lite_t) \
182-
typedef struct packed { \
183-
aw_chan_lite_t aw; \
184-
logic aw_valid; \
185-
w_chan_lite_t w; \
186-
logic w_valid; \
187-
logic b_ready; \
188-
ar_chan_lite_t ar; \
189-
logic ar_valid; \
190-
logic r_ready; \
191-
} req_lite_t;
218+
typedef `AXI_LITE_DECL_REQ_T(aw_chan_lite_t, w_chan_lite_t, ar_chan_lite_t) req_lite_t;
219+
`define AXI_LITE_DECL_RESP_T(b_chan_lite_t, r_chan_lite_t) \
220+
struct packed { \
221+
logic aw_ready; \
222+
logic w_ready; \
223+
b_chan_lite_t b; \
224+
logic b_valid; \
225+
logic ar_ready; \
226+
r_chan_lite_t r; \
227+
logic r_valid; \
228+
}
192229
`define AXI_LITE_TYPEDEF_RESP_T(resp_lite_t, b_chan_lite_t, r_chan_lite_t) \
193-
typedef struct packed { \
194-
logic aw_ready; \
195-
logic w_ready; \
196-
b_chan_lite_t b; \
197-
logic b_valid; \
198-
logic ar_ready; \
199-
r_chan_lite_t r; \
200-
logic r_valid; \
201-
} resp_lite_t;
230+
typedef `AXI_LITE_DECL_RESP_T(b_chan_lite_t, r_chan_lite_t) resp_lite_t;
202231
////////////////////////////////////////////////////////////////////////////////////////////////////
203232

204233

@@ -241,5 +270,4 @@
241270
`AXI_LITE_TYPEDEF_ALL_CT(__name, __name``_req_t, __name``_resp_t, __addr_t, __data_t, __strb_t)
242271
////////////////////////////////////////////////////////////////////////////////////////////////////
243272

244-
245273
`endif

0 commit comments

Comments
 (0)