Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[SRC] Change the SPM Side interconnection for merging the double-BW S…
Browse files Browse the repository at this point in the history
…patz.
DiyouS committed Jan 30, 2025
1 parent 941b402 commit 8315f86
Showing 2 changed files with 46 additions and 22 deletions.
2 changes: 1 addition & 1 deletion hw/system/spatz_cluster/cfg/flamingo.hjson
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@
axi_isolate_enable: false,
tcdm: {
size: 128,
banks: 8,
banks: 16,
},
cluster_periph_size: 64, // kB
dma_data_width: 512,
66 changes: 45 additions & 21 deletions hw/system/spatz_cluster/src/spatz_cluster.sv
Original file line number Diff line number Diff line change
@@ -239,20 +239,33 @@ module spatz_cluster
};

// L1 Cache
// Address width of cache
localparam int unsigned L1AddrWidth = 32;
// Cache lane width
localparam int unsigned L1LineWidth = 512;
// Cache ways
localparam int unsigned L1Associativity = 4;
// Pesudo dual bank
localparam int unsigned L1BankFactor = 2;
// Coalecser window
localparam int unsigned L1CoalFactor = 2;
// 8 * 1024 * 64 / 512 = 1024)
// Number of entrys of L1 Cache
localparam int unsigned L1NumEntry = NrBanks * TCDMDepth * DataWidth / L1LineWidth;
localparam int unsigned L1NumWrapper = L1LineWidth / DataWidth;
localparam int unsigned L1BankPerWP = L1BankFactor * L1Associativity;
localparam int unsigned L1BankPerWay = L1BankFactor * L1NumWrapper;
// Number of bank wraps SPM can see
localparam int unsigned L1NumWrapper = L1LineWidth / DataWidth * L1BankFactor;
// Number of banks in each bank wrap
localparam int unsigned L1BankPerWP = L1Associativity;
// Number of banks in each cache way
localparam int unsigned L1BankPerWay = L1NumWrapper;
// Number of cache entries each cache way has
localparam int unsigned L1CacheWayEntry = L1NumEntry / L1Associativity;
// Number of cache sets each cache way has
localparam int unsigned L1NumSet = L1CacheWayEntry / L1BankFactor;
// Number of Tag banks
localparam int unsigned L1NumTagBank = L1BankFactor * L1Associativity;
localparam int unsigned L1NumDataBank = L1BankFactor * L1NumWrapper * L1Associativity;
// Number of Data banks
localparam int unsigned L1NumDataBank = L1NumWrapper * L1Associativity;

// --------
// Typedefs
@@ -738,13 +751,13 @@ module spatz_cluster
.rst_ni (rst_ni ),
.spm_size_i (cfg_spm_size ),
/// Cache Side TODO: Connect cache
.cache_req_i (l1_cache_wp_req [j] ),
.cache_we_i (l1_cache_wp_we [j] ),
.cache_addr_i (l1_cache_wp_addr [j] ),
.cache_wdata_i(l1_cache_wp_wdata[j] ),
.cache_be_i (l1_cache_wp_be [j] ),
.cache_rdata_o(l1_cache_wp_rdata[j] ),
.cache_ready_o(l1_cache_wp_gnt [j] ),
.cache_req_i (l1_cache_wp_req [i*BanksPerSuperBank+j] ),
.cache_we_i (l1_cache_wp_we [i*BanksPerSuperBank+j] ),
.cache_addr_i (l1_cache_wp_addr [i*BanksPerSuperBank+j] ),
.cache_wdata_i(l1_cache_wp_wdata[i*BanksPerSuperBank+j] ),
.cache_be_i (l1_cache_wp_be [i*BanksPerSuperBank+j] ),
.cache_rdata_o(l1_cache_wp_rdata[i*BanksPerSuperBank+j] ),
.cache_ready_o(l1_cache_wp_gnt [i*BanksPerSuperBank+j] ),
/// SPM Side
.spm_req_i (mem_cs ),
.spm_we_i (mem_wen ),
@@ -959,16 +972,27 @@ module spatz_cluster
);
end

for (genvar i = 0; i < L1NumWrapper; i++) begin
for (genvar j = 0; j < L1Associativity*L1BankFactor; j++) begin
assign l1_cache_wp_req [i][j] = l1_data_bank_req [i + j*L1NumWrapper];
assign l1_cache_wp_we [i][j] = l1_data_bank_we [i + j*L1NumWrapper];
assign l1_cache_wp_addr [i][j] = l1_data_bank_addr [i + j*L1NumWrapper];
assign l1_cache_wp_wdata[i][j] = l1_data_bank_wdata[i + j*L1NumWrapper];
assign l1_cache_wp_be [i][j] = (l1_data_bank_be [i + j*L1NumWrapper]) ? {(NarrowDataWidth/8){1'b1}} : '0;

assign l1_data_bank_rdata[i + j*L1NumWrapper] = l1_cache_wp_rdata[i][j];
assign l1_data_bank_gnt [i + j*L1NumWrapper] = l1_cache_wp_gnt [i][j];
// Connect the cache requests to the banks
// Reorganize it to meet the bank arrangement
// 2 Superbanks
for (genvar i = 0; i < NrSuperBanks; i++) begin

Check warning on line 978 in hw/system/spatz_cluster/src/spatz_cluster.sv

GitHub Actions / verible-verilog-lint

[verible-verilog-lint] hw/system/spatz_cluster/src/spatz_cluster.sv#L978

All generate block statements must have a label [Style: generate-statements] [generate-label]
Raw output
message:"All generate block statements must have a label [Style: generate-statements] [generate-label]"  location:{path:"hw/system/spatz_cluster/src/spatz_cluster.sv"  range:{start:{line:978  column:45}}}  severity:WARNING  source:{name:"verible-verilog-lint"  url:"https://github.com/chipsalliance/verible"}
// 8 Bank Wraps per SuperBank
for (genvar j = 0; j < BanksPerSuperBank; j++) begin

Check warning on line 980 in hw/system/spatz_cluster/src/spatz_cluster.sv

GitHub Actions / verible-verilog-lint

[verible-verilog-lint] hw/system/spatz_cluster/src/spatz_cluster.sv#L980

All generate block statements must have a label [Style: generate-statements] [generate-label]
Raw output
message:"All generate block statements must have a label [Style: generate-statements] [generate-label]"  location:{path:"hw/system/spatz_cluster/src/spatz_cluster.sv"  range:{start:{line:980  column:52}}}  severity:WARNING  source:{name:"verible-verilog-lint"  url:"https://github.com/chipsalliance/verible"}
// 4 Banks per Bank Wrap
for (genvar k = 0; k < L1BankPerWP; k++) begin

Check warning on line 982 in hw/system/spatz_cluster/src/spatz_cluster.sv

GitHub Actions / verible-verilog-lint

[verible-verilog-lint] hw/system/spatz_cluster/src/spatz_cluster.sv#L982

All generate block statements must have a label [Style: generate-statements] [generate-label]
Raw output
message:"All generate block statements must have a label [Style: generate-statements] [generate-label]"  location:{path:"hw/system/spatz_cluster/src/spatz_cluster.sv"  range:{start:{line:982  column:48}}}  severity:WARNING  source:{name:"verible-verilog-lint"  url:"https://github.com/chipsalliance/verible"}
// [i*8+j][k] => [0][0], [0][1], [0][2]....
// [i*8*4 + j*4 + k] => [0], [1] , [2], ...
assign l1_cache_wp_req [i*BanksPerSuperBank+j][k] = l1_data_bank_req [i*BanksPerSuperBank*L1BankPerWP+j*L1BankPerWP+k];

Check warning on line 985 in hw/system/spatz_cluster/src/spatz_cluster.sv

GitHub Actions / verible-verilog-lint

[verible-verilog-lint] hw/system/spatz_cluster/src/spatz_cluster.sv#L985

Line length exceeds max: 100; is: 130 [Style: line-length] [line-length]
Raw output
message:"Line length exceeds max: 100; is: 130 [Style: line-length] [line-length]"  location:{path:"hw/system/spatz_cluster/src/spatz_cluster.sv"  range:{start:{line:985  column:101}}}  severity:WARNING  source:{name:"verible-verilog-lint"  url:"https://github.com/chipsalliance/verible"}
assign l1_cache_wp_we [i*BanksPerSuperBank+j][k] = l1_data_bank_we [i*BanksPerSuperBank*L1BankPerWP+j*L1BankPerWP+k];

Check warning on line 986 in hw/system/spatz_cluster/src/spatz_cluster.sv

GitHub Actions / verible-verilog-lint

[verible-verilog-lint] hw/system/spatz_cluster/src/spatz_cluster.sv#L986

Line length exceeds max: 100; is: 130 [Style: line-length] [line-length]
Raw output
message:"Line length exceeds max: 100; is: 130 [Style: line-length] [line-length]"  location:{path:"hw/system/spatz_cluster/src/spatz_cluster.sv"  range:{start:{line:986  column:101}}}  severity:WARNING  source:{name:"verible-verilog-lint"  url:"https://github.com/chipsalliance/verible"}
assign l1_cache_wp_addr [i*BanksPerSuperBank+j][k] = l1_data_bank_addr [i*BanksPerSuperBank*L1BankPerWP+j*L1BankPerWP+k];

Check warning on line 987 in hw/system/spatz_cluster/src/spatz_cluster.sv

GitHub Actions / verible-verilog-lint

[verible-verilog-lint] hw/system/spatz_cluster/src/spatz_cluster.sv#L987

Line length exceeds max: 100; is: 130 [Style: line-length] [line-length]
Raw output
message:"Line length exceeds max: 100; is: 130 [Style: line-length] [line-length]"  location:{path:"hw/system/spatz_cluster/src/spatz_cluster.sv"  range:{start:{line:987  column:101}}}  severity:WARNING  source:{name:"verible-verilog-lint"  url:"https://github.com/chipsalliance/verible"}
assign l1_cache_wp_wdata [i*BanksPerSuperBank+j][k] = l1_data_bank_wdata[i*BanksPerSuperBank*L1BankPerWP+j*L1BankPerWP+k];

Check warning on line 988 in hw/system/spatz_cluster/src/spatz_cluster.sv

GitHub Actions / verible-verilog-lint

[verible-verilog-lint] hw/system/spatz_cluster/src/spatz_cluster.sv#L988

Line length exceeds max: 100; is: 130 [Style: line-length] [line-length]
Raw output
message:"Line length exceeds max: 100; is: 130 [Style: line-length] [line-length]"  location:{path:"hw/system/spatz_cluster/src/spatz_cluster.sv"  range:{start:{line:988  column:101}}}  severity:WARNING  source:{name:"verible-verilog-lint"  url:"https://github.com/chipsalliance/verible"}
// L1 Cache has a write granularity of an entire cache line
assign l1_cache_wp_be [i*BanksPerSuperBank+j][k] =
(l1_data_bank_be [i*BanksPerSuperBank*L1BankPerWP+j*L1BankPerWP+k]) ? {(NarrowDataWidth/8){1'b1}} : '0;

Check warning on line 991 in hw/system/spatz_cluster/src/spatz_cluster.sv

GitHub Actions / verible-verilog-lint

[verible-verilog-lint] hw/system/spatz_cluster/src/spatz_cluster.sv#L991

Line length exceeds max: 100; is: 119 [Style: line-length] [line-length]
Raw output
message:"Line length exceeds max: 100; is: 119 [Style: line-length] [line-length]"  location:{path:"hw/system/spatz_cluster/src/spatz_cluster.sv"  range:{start:{line:991  column:101}}}  severity:WARNING  source:{name:"verible-verilog-lint"  url:"https://github.com/chipsalliance/verible"}

assign l1_data_bank_rdata[i*BanksPerSuperBank*L1BankPerWP+j*L1BankPerWP+k] = l1_cache_wp_rdata[i*BanksPerSuperBank+j][k];

Check warning on line 993 in hw/system/spatz_cluster/src/spatz_cluster.sv

GitHub Actions / verible-verilog-lint

[verible-verilog-lint] hw/system/spatz_cluster/src/spatz_cluster.sv#L993

Line length exceeds max: 100; is: 129 [Style: line-length] [line-length]
Raw output
message:"Line length exceeds max: 100; is: 129 [Style: line-length] [line-length]"  location:{path:"hw/system/spatz_cluster/src/spatz_cluster.sv"  range:{start:{line:993  column:101}}}  severity:WARNING  source:{name:"verible-verilog-lint"  url:"https://github.com/chipsalliance/verible"}
assign l1_data_bank_gnt [i*BanksPerSuperBank*L1BankPerWP+j*L1BankPerWP+k] = l1_cache_wp_gnt [i*BanksPerSuperBank+j][k];

Check warning on line 994 in hw/system/spatz_cluster/src/spatz_cluster.sv

GitHub Actions / verible-verilog-lint

[verible-verilog-lint] hw/system/spatz_cluster/src/spatz_cluster.sv#L994

Line length exceeds max: 100; is: 129 [Style: line-length] [line-length]
Raw output
message:"Line length exceeds max: 100; is: 129 [Style: line-length] [line-length]"  location:{path:"hw/system/spatz_cluster/src/spatz_cluster.sv"  range:{start:{line:994  column:101}}}  severity:WARNING  source:{name:"verible-verilog-lint"  url:"https://github.com/chipsalliance/verible"}
end
end
end

0 comments on commit 8315f86

Please sign in to comment.