Skip to content

Commit add4f8f

Browse files
integrate pzcorebus_if_*_position_list into pzcorebus_config to reduce compile time
1 parent 6b8404c commit add4f8f

9 files changed

+313
-460
lines changed

pzcorebus_common/pzcorebus_common.list.rb

-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
[
1010
'pzcorebus_macros.svh',
1111
'pzcorebus_pkg.sv',
12-
'pzcorebus_if_pkg.sv',
1312
'pzcorebus_if_internal_macros.svh',
1413
'pzcorebus_if.sv',
1514
'pzcorebus_request_if.sv',

pzcorebus_common/pzcorebus_if.sv

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
//
66
//========================================
77
interface pzcorebus_if
8-
import pzcorebus_pkg::*,
9-
pzcorebus_if_pkg::*;
8+
import pzcorebus_pkg::*;
109
#(
1110
parameter pzcorebus_config BUS_CONFIG = '0
1211
);

pzcorebus_common/pzcorebus_if_internal_macros.svh

+65-69
Original file line numberDiff line numberDiff line change
@@ -58,62 +58,60 @@ pzcorebus_response_last sresp_last;
5858
packer[info.lsb+:((info.width>0)?info.width:1)]
5959

6060
`define pzcorebus_if_define_request_api(BUS_CONFIG) \
61-
localparam pzcorebus_if_command_position_list COMMAND_POSITION_LIST = build_command_position_list(BUS_CONFIG); \
62-
localparam int COMMAND_PACKER_WIDTH = get_command_packer_width(COMMAND_POSITION_LIST); \
63-
localparam pzcorebus_if_write_data_position_list WRITE_DATA_POSITION_LIST = build_write_data_position_list(BUS_CONFIG); \
64-
localparam int WRITE_DATA_PACKER_WIDTH = get_write_data_packer_width(WRITE_DATA_POSITION_LIST); \
61+
localparam shortint COMMAND_PACKER_WIDTH = BUS_CONFIG.mcmd_info.mcmd_packed_width + 1; \
62+
localparam shortint WRITE_DATA_PACKER_WIDTH = BUS_CONFIG.mdata_info.mdata_packed_width + 1; \
6563
\
6664
function automatic pzcorebus_packed_command get_packed_command(); \
6765
logic [COMMAND_PACKER_WIDTH-1:0] packer; \
68-
`pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.mcmd) = mcmd; \
69-
`pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.mid) = mid; \
70-
`pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.maddr) = maddr; \
71-
if (COMMAND_POSITION_LIST.mlength.width > 0) begin \
72-
`pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.mlength) = mlength; \
66+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.mcmd) = mcmd; \
67+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.mid) = mid; \
68+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.maddr) = maddr; \
69+
if (BUS_CONFIG.mcmd_info.mlength.width > 0) begin \
70+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.mlength) = mlength; \
7371
end \
74-
if (COMMAND_POSITION_LIST.mparam.width > 0) begin \
75-
`pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.mparam) = mparam; \
72+
if (BUS_CONFIG.mcmd_info.mparam.width > 0) begin \
73+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.mparam) = mparam; \
7674
end \
77-
if (COMMAND_POSITION_LIST.minfo.width > 0) begin \
78-
`pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.minfo) = minfo; \
75+
if (BUS_CONFIG.mcmd_info.minfo.width > 0) begin \
76+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.minfo) = minfo; \
7977
end \
80-
if (COMMAND_POSITION_LIST.mdata.width > 0) begin \
81-
`pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.mdata) = mdata; \
78+
if (BUS_CONFIG.mcmd_info.mdata.width > 0) begin \
79+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.mdata) = mdata; \
8280
end \
83-
if (COMMAND_POSITION_LIST.mdata_byteen.width > 0) begin \
84-
`pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.mdata_byteen) = mdata_byteen; \
81+
if (BUS_CONFIG.mcmd_info.mdata_byteen.width > 0) begin \
82+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.mdata_byteen) = mdata_byteen; \
8583
end \
8684
return pzcorebus_packed_command'(packer); \
8785
endfunction \
8886
\
8987
function automatic void put_packed_command(pzcorebus_packed_command command); \
9088
logic [COMMAND_PACKER_WIDTH-1:0] packer; \
9189
packer = COMMAND_PACKER_WIDTH'(command); \
92-
mcmd = pzcorebus_command_type'(`pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.mcmd)); \
93-
mid = `pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.mid); \
94-
maddr = `pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.maddr); \
90+
mcmd = pzcorebus_command_type'(`pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.mcmd)); \
91+
mid = `pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.mid); \
92+
maddr = `pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.maddr); \
9593
if (`pzcorebus_memoy_profile(BUS_CONFIG)) begin \
96-
mlength = `pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.mlength); \
94+
mlength = `pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.mlength); \
9795
end \
9896
else begin \
9997
mlength = '0; \
10098
end \
101-
if (COMMAND_POSITION_LIST.mparam.width > 0) begin \
102-
mparam = `pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.mparam); \
99+
if (BUS_CONFIG.mcmd_info.mparam.width > 0) begin \
100+
mparam = `pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.mparam); \
103101
end \
104102
else begin \
105103
mparam = '0; \
106104
end \
107-
if (COMMAND_POSITION_LIST.minfo.width > 0) begin \
108-
minfo = `pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.minfo); \
105+
if (BUS_CONFIG.mcmd_info.minfo.width > 0) begin \
106+
minfo = `pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.minfo); \
109107
end \
110108
else begin \
111109
minfo = '0; \
112110
end \
113111
if (`pzcorebus_csr_profile(BUS_CONFIG)) begin \
114-
mdata = `pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.mdata); \
112+
mdata = `pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.mdata); \
115113
if (BUS_CONFIG.use_byte_enable) begin \
116-
mdata_byteen = `pzcorebus_if_get_packer(packer, COMMAND_POSITION_LIST.mdata_byteen); \
114+
mdata_byteen = `pzcorebus_if_get_packer(packer, BUS_CONFIG.mcmd_info.mdata_byteen); \
117115
end \
118116
else begin \
119117
mdata_byteen = '0; \
@@ -123,22 +121,22 @@ endfunction \
123121
\
124122
function automatic pzcorebus_command get_command(); \
125123
pzcorebus_command command; \
126-
command.command = mcmd; \
127-
command.id = mid; \
128-
command.address = maddr; \
124+
command.command = mcmd; \
125+
command.id = mid; \
126+
command.address = maddr; \
129127
if (`pzcorebus_memoy_profile(BUS_CONFIG)) begin \
130128
command.length = mlength; \
131129
end \
132130
else begin \
133131
command.length = '0; \
134132
end \
135-
if (COMMAND_POSITION_LIST.mparam.width > 0) begin \
133+
if (BUS_CONFIG.mcmd_info.mparam.width > 0) begin \
136134
command.param = mparam; \
137135
end \
138136
else begin \
139137
command.param = '0; \
140138
end \
141-
if (COMMAND_POSITION_LIST.minfo.width > 0) begin \
139+
if (BUS_CONFIG.mcmd_info.minfo.width > 0) begin \
142140
command.info = minfo; \
143141
end \
144142
else begin \
@@ -169,13 +167,13 @@ function automatic void put_command(pzcorebus_command command); \
169167
else begin \
170168
mlength = '0; \
171169
end \
172-
if (COMMAND_POSITION_LIST.mparam.width > 0) begin \
170+
if (BUS_CONFIG.mcmd_info.mparam.width > 0) begin \
173171
mparam = command.param; \
174172
end \
175173
else begin \
176174
mparam = '0; \
177175
end \
178-
if (COMMAND_POSITION_LIST.minfo.width > 0) begin \
176+
if (BUS_CONFIG.mcmd_info.minfo.width > 0) begin \
179177
minfo = command.info; \
180178
end \
181179
else begin \
@@ -195,10 +193,10 @@ endfunction \
195193
function automatic pzcorebus_packed_write_data get_packed_write_data(); \
196194
if (`pzcorebus_memoy_profile(BUS_CONFIG)) begin \
197195
logic [WRITE_DATA_PACKER_WIDTH-1:0] packer; \
198-
`pzcorebus_if_get_packer(packer, WRITE_DATA_POSITION_LIST.mdata_last) = mdata_last; \
199-
`pzcorebus_if_get_packer(packer, WRITE_DATA_POSITION_LIST.mdata) = mdata; \
196+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.mdata_info.mdata_last) = mdata_last; \
197+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.mdata_info.mdata) = mdata; \
200198
if (BUS_CONFIG.use_byte_enable) begin \
201-
`pzcorebus_if_get_packer(packer, WRITE_DATA_POSITION_LIST.mdata_byteen) = mdata_byteen; \
199+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.mdata_info.mdata_byteen) = mdata_byteen; \
202200
end \
203201
return pzcorebus_packed_write_data'(packer); \
204202
end \
@@ -211,10 +209,10 @@ function automatic void put_packed_write_data(pzcorebus_packed_write_data write_
211209
if (`pzcorebus_memoy_profile(BUS_CONFIG)) begin \
212210
logic [WRITE_DATA_PACKER_WIDTH-1:0] packer; \
213211
packer = WRITE_DATA_PACKER_WIDTH'(write_data); \
214-
mdata_last = `pzcorebus_if_get_packer(packer, WRITE_DATA_POSITION_LIST.mdata_last); \
215-
mdata = `pzcorebus_if_get_packer(packer, WRITE_DATA_POSITION_LIST.mdata); \
212+
mdata_last = `pzcorebus_if_get_packer(packer, BUS_CONFIG.mdata_info.mdata_last); \
213+
mdata = `pzcorebus_if_get_packer(packer, BUS_CONFIG.mdata_info.mdata); \
216214
if (BUS_CONFIG.use_byte_enable) begin \
217-
mdata_byteen = `pzcorebus_if_get_packer(packer, WRITE_DATA_POSITION_LIST.mdata_byteen); \
215+
mdata_byteen = `pzcorebus_if_get_packer(packer, BUS_CONFIG.mdata_info.mdata_byteen); \
218216
end \
219217
else begin \
220218
mdata_byteen = '0; \
@@ -247,8 +245,8 @@ endfunction \
247245
\
248246
function automatic void put_write_data(pzcorebus_write_data write_data); \
249247
if (`pzcorebus_memoy_profile(BUS_CONFIG)) begin \
250-
mdata_last = write_data.last; \
251-
mdata = write_data.data; \
248+
mdata_last = write_data.last; \
249+
mdata = write_data.data; \
252250
if (BUS_CONFIG.use_byte_enable) begin \
253251
mdata_byteen = write_data.byte_enable; \
254252
end \
@@ -412,9 +410,8 @@ function automatic pzcorebus_unpacked_length unpack_length(); \
412410
end \
413411
endfunction \
414412
\
415-
localparam int DATA_SIZE = BUS_CONFIG.data_width / BUS_CONFIG.unit_data_width; \
416413
localparam int LENGTH_OFFSET_LSB = $clog2(BUS_CONFIG.unit_data_width / 8); \
417-
localparam int LENGTH_OFFSET_WIDTH = (DATA_SIZE > 1) ? $clog2(DATA_SIZE) : 1; \
414+
localparam int LENGTH_OFFSET_WIDTH = (BUS_CONFIG.data_size > 1) ? $clog2(BUS_CONFIG.data_size) : 1; \
418415
\
419416
function automatic pzcorebus_unpacked_length get_length(); \
420417
case (1'b1) \
@@ -426,7 +423,7 @@ endfunction \
426423
\
427424
function automatic pzcorebus_unpacked_length get_aligned_length(); \
428425
pzcorebus_unpacked_length offset; \
429-
if ((DATA_SIZE == 1) || is_atomic_command() || is_message_command()) begin \
426+
if ((BUS_CONFIG.data_size == 1) || is_atomic_command() || is_message_command()) begin \
430427
offset = pzcorebus_unpacked_length'(0); \
431428
end \
432429
else begin \
@@ -436,13 +433,13 @@ function automatic pzcorebus_unpacked_length get_aligned_length(); \
436433
endfunction \
437434
\
438435
function automatic pzcorebus_burst_length get_burst_length(); \
439-
if ((DATA_SIZE == 1) || `pzcorebus_csr_profile(BUS_CONFIG)) begin \
436+
if ((BUS_CONFIG.data_size == 1) || `pzcorebus_csr_profile(BUS_CONFIG)) begin \
440437
return pzcorebus_burst_length'(get_length()); \
441438
end \
442439
else begin \
443440
pzcorebus_unpacked_length length; \
444-
length = get_aligned_length() + pzcorebus_unpacked_length'(DATA_SIZE - 1); \
445-
return pzcorebus_burst_length'(length / DATA_SIZE); \
441+
length = get_aligned_length() + pzcorebus_unpacked_length'(BUS_CONFIG.data_size - 1); \
442+
return pzcorebus_burst_length'(length / BUS_CONFIG.data_size); \
446443
end \
447444
endfunction \
448445
\
@@ -451,53 +448,52 @@ function automatic pzcorebus_unpacked_length get_response_length(); \
451448
is_posted_command(): return pzcorebus_unpacked_length'(0); \
452449
is_read_command(), \
453450
is_atomic_command(): return unpack_length(); \
454-
default: return pzcorebus_unpacked_length'(DATA_SIZE); \
451+
default: return pzcorebus_unpacked_length'(BUS_CONFIG.data_size); \
455452
endcase \
456453
endfunction
457454

458455
`define pzcorebus_if_define_response_api(BUS_CONFIG) \
459-
localparam pzcorebus_if_response_position_list RESPONSE_POSITION_LIST = build_response_position_list(BUS_CONFIG); \
460-
localparam int RESPONSE_PACKER_WIDTH = get_response_packer_width(RESPONSE_POSITION_LIST); \
456+
localparam shortint RESPONSE_PACKER_WIDTH = BUS_CONFIG.sresp_info.sresp_packed_width + 1; \
461457
\
462458
function automatic pzcorebus_packed_response get_packed_response(); \
463459
logic [RESPONSE_PACKER_WIDTH-1:0] packer; \
464-
`pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.sresp) = sresp; \
465-
`pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.sid) = sid; \
466-
`pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.serror) = serror; \
467-
`pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.sdata) = sdata; \
468-
if (RESPONSE_POSITION_LIST.sinfo.width > 0) begin \
469-
`pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.sinfo) = sinfo; \
460+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.sresp) = sresp; \
461+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.sid) = sid; \
462+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.serror) = serror; \
463+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.sdata) = sdata; \
464+
if (BUS_CONFIG.sresp_info.sinfo.width > 0) begin \
465+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.sinfo) = sinfo; \
470466
end \
471467
if (`pzcorebus_memoy_h_profile(BUS_CONFIG)) begin \
472-
`pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.sresp_uniten) = sresp_uniten; \
468+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.sresp_uniten) = sresp_uniten; \
473469
end \
474470
if (`pzcorebus_memoy_profile(BUS_CONFIG)) begin \
475-
`pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.sresp_last) = sresp_last; \
471+
`pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.sresp_last) = sresp_last; \
476472
end \
477473
return pzcorebus_packed_response'(packer); \
478474
endfunction \
479475
\
480476
function automatic void put_packed_response(pzcorebus_packed_response response); \
481477
logic [RESPONSE_PACKER_WIDTH-1:0] packer; \
482478
packer = RESPONSE_PACKER_WIDTH'(response); \
483-
sresp = pzcorebus_response_type'(`pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.sresp)); \
484-
sid = `pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.sid); \
485-
serror = `pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.serror); \
486-
sdata = `pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.sdata); \
487-
if (RESPONSE_POSITION_LIST.sinfo.width > 0) begin \
488-
sinfo = `pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.sinfo); \
479+
sresp = pzcorebus_response_type'(`pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.sresp)); \
480+
sid = `pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.sid); \
481+
serror = `pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.serror); \
482+
sdata = `pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.sdata); \
483+
if (BUS_CONFIG.sresp_info.sinfo.width > 0) begin \
484+
sinfo = `pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.sinfo); \
489485
end \
490486
else begin \
491487
sinfo = '0; \
492488
end \
493489
if (`pzcorebus_memoy_h_profile(BUS_CONFIG)) begin \
494-
sresp_uniten = `pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.sresp_uniten); \
490+
sresp_uniten = `pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.sresp_uniten); \
495491
end \
496492
else begin \
497493
sresp_uniten = '0; \
498494
end \
499495
if (`pzcorebus_memoy_profile(BUS_CONFIG)) begin \
500-
sresp_last = `pzcorebus_if_get_packer(packer, RESPONSE_POSITION_LIST.sresp_last); \
496+
sresp_last = `pzcorebus_if_get_packer(packer, BUS_CONFIG.sresp_info.sresp_last); \
501497
end \
502498
else begin \
503499
sresp_last = '0; \
@@ -510,7 +506,7 @@ function automatic pzcorebus_response get_response(); \
510506
response.id = sid; \
511507
response.error = serror; \
512508
response.data = sdata; \
513-
response.info = (RESPONSE_POSITION_LIST.sinfo.width > 0) ? sinfo : '0; \
509+
response.info = (BUS_CONFIG.sresp_info.sinfo.width > 0 ) ? sinfo : '0; \
514510
response.unit_enable = (`pzcorebus_memoy_h_profile(BUS_CONFIG)) ? sresp_uniten : '0; \
515511
response.last = (`pzcorebus_memoy_profile(BUS_CONFIG) ) ? sresp_last : '0; \
516512
return response; \
@@ -521,7 +517,7 @@ function automatic void put_response(pzcorebus_response response); \
521517
sid = response.id; \
522518
serror = response.error; \
523519
sdata = response.data; \
524-
if (RESPONSE_POSITION_LIST.sinfo.width > 0) begin \
520+
if (BUS_CONFIG.sresp_info.sinfo.width > 0) begin \
525521
sinfo = response.info; \
526522
end \
527523
else begin \

0 commit comments

Comments
 (0)