Add GF22 Compiled Memories to Design
Add GF22 compiled memories. Make Sram .v files more generic to
accomodate different technologies.
Change-Id: Ibf994fc361247494d62e88f0c331fb13e69f846e
diff --git a/hdl/chisel/src/kelvin/BUILD b/hdl/chisel/src/kelvin/BUILD
index 6fe855e..88fa0b3 100644
--- a/hdl/chisel/src/kelvin/BUILD
+++ b/hdl/chisel/src/kelvin/BUILD
@@ -338,13 +338,13 @@
srcs = [
"SramNx128.scala",
"Sram_12ffcp_128x128.scala",
- "Sram_12ffcp_2048x128.scala",
- "Sram_12ffcp_512x128.scala",
+ "Sram_2048x128.scala",
+ "Sram_512x128.scala",
],
resources = [
"//hdl/verilog:Sram_12ffcp_128x128.v",
- "//hdl/verilog:Sram_12ffcp_2048x128.v",
- "//hdl/verilog:Sram_12ffcp_512x128.v",
+ "//hdl/verilog:Sram_2048x128.v",
+ "//hdl/verilog:Sram_512x128.v",
],
deps = [
":kelvin_base",
@@ -521,6 +521,8 @@
"CKLNQD10BWP6T20P96CPDLVT",
"TS1N12FFCLLMBLVTD2048X128M4SWBSHO",
"TS1N12FFCLLSBLVTD512X128M4SWBSHO",
+ "sasdulssd8LOW1p512x128m4b1w0c0p0d0l0rm3sdrw01",
+ "sasdulssd8LOW1p2048x128m4b2w0c0p0d0l0rm3sdrw01",
]
CORE_MINI_AXI_LINT_TAGS = [
diff --git a/hdl/chisel/src/kelvin/SramNx128.scala b/hdl/chisel/src/kelvin/SramNx128.scala
index f8434d4..979a213 100644
--- a/hdl/chisel/src/kelvin/SramNx128.scala
+++ b/hdl/chisel/src/kelvin/SramNx128.scala
@@ -51,8 +51,8 @@
val sramModules = (0 until nSramModules).map(x =>
(mod2048, mod512) match {
- case (true, _) => Module(new Sram_12ffcp_2048x128)
- case (_, true) => Module(new Sram_12ffcp_512x128)
+ case (true, _) => Module(new Sram_2048x128)
+ case (_, true) => Module(new Sram_512x128)
case (false, false) => Module(new Sram_12ffcp_128x128)
}
)
diff --git a/hdl/chisel/src/kelvin/Sram_12ffcp_512x128.scala b/hdl/chisel/src/kelvin/Sram_12ffcp_512x128.scala
deleted file mode 100644
index 8f24386..0000000
--- a/hdl/chisel/src/kelvin/Sram_12ffcp_512x128.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2024 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package kelvin
-
-import chisel3.util.HasBlackBoxResource
-
-class Sram_12ffcp_512x128 extends SRAM128(9) with HasBlackBoxResource {
- addResource("hdl/verilog/Sram_12ffcp_512x128.v")
-}
diff --git a/hdl/chisel/src/kelvin/Sram_12ffcp_2048x128.scala b/hdl/chisel/src/kelvin/Sram_2048x128.scala
similarity index 83%
copy from hdl/chisel/src/kelvin/Sram_12ffcp_2048x128.scala
copy to hdl/chisel/src/kelvin/Sram_2048x128.scala
index bdf1623..c1601cc 100644
--- a/hdl/chisel/src/kelvin/Sram_12ffcp_2048x128.scala
+++ b/hdl/chisel/src/kelvin/Sram_2048x128.scala
@@ -16,6 +16,6 @@
import chisel3.util.HasBlackBoxResource
-class Sram_12ffcp_2048x128 extends SRAM128(11) with HasBlackBoxResource {
- addResource("hdl/verilog/Sram_12ffcp_2048x128.v")
+class Sram_2048x128 extends SRAM128(11) with HasBlackBoxResource {
+ addResource("hdl/verilog/Sram_2048x128.v")
}
diff --git a/hdl/chisel/src/kelvin/Sram_12ffcp_2048x128.scala b/hdl/chisel/src/kelvin/Sram_512x128.scala
similarity index 83%
rename from hdl/chisel/src/kelvin/Sram_12ffcp_2048x128.scala
rename to hdl/chisel/src/kelvin/Sram_512x128.scala
index bdf1623..5c56c6e 100644
--- a/hdl/chisel/src/kelvin/Sram_12ffcp_2048x128.scala
+++ b/hdl/chisel/src/kelvin/Sram_512x128.scala
@@ -16,6 +16,6 @@
import chisel3.util.HasBlackBoxResource
-class Sram_12ffcp_2048x128 extends SRAM128(11) with HasBlackBoxResource {
- addResource("hdl/verilog/Sram_12ffcp_2048x128.v")
+class Sram_512x128 extends SRAM128(9) with HasBlackBoxResource {
+ addResource("hdl/verilog/Sram_512x128.v")
}
diff --git a/hdl/verilog/BUILD b/hdl/verilog/BUILD
index 7df6c6a..270aac5 100644
--- a/hdl/verilog/BUILD
+++ b/hdl/verilog/BUILD
@@ -18,8 +18,8 @@
srcs = [
"ClockGate.sv",
"Sram_12ffcp_128x128.v",
- "Sram_12ffcp_512x128.v",
- "Sram_12ffcp_2048x128.v",
+ "Sram_512x128.v",
+ "Sram_2048x128.v",
"Sram_1rw_256x256.v",
"Sram_1rwm_256x288.v",
"RstSync.sv",
diff --git a/hdl/verilog/Sram_12ffcp_2048x128.v b/hdl/verilog/Sram_2048x128.v
similarity index 71%
rename from hdl/verilog/Sram_12ffcp_2048x128.v
rename to hdl/verilog/Sram_2048x128.v
index feecf89..4fb84e1 100644
--- a/hdl/verilog/Sram_12ffcp_2048x128.v
+++ b/hdl/verilog/Sram_2048x128.v
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-module Sram_12ffcp_2048x128(
+module Sram_2048x128(
input clock,
input enable,
input write,
@@ -22,7 +22,13 @@
output [127:0] rdata
);
-`ifndef USE_GENERIC
+///////////////////////////
+///// SRAM Selection //////
+///////////////////////////
+`ifdef USE_TSMC12FFC
+///////////////////////////
+///// TSMC12FFC SRAM //////
+///////////////////////////
wire [127:0] nwmask;
genvar i;
generate
@@ -66,8 +72,44 @@
.WTSEL(2'b1) // Write Test Select (input [1:0])
`endif
);
+`elsif USE_GF22
+///////////////////////////
+//////// GF22 SRAM ////////
+///////////////////////////
+ wire [127:0] nwmask;
+ genvar i;
+ generate
+ for (i = 0; i < 16; i++) begin
+ assign nwmask[8*i +: 8] = {8{wmask[i]}};
+ end
+ endgenerate
+ sasdulssd8LOW1p2048x128m4b2w0c0p0d0l0rm3sdrw01 u_gf22_sram (
+ // Data Output
+ .Q(rdata), // Data Output [127:0]
+ // Data Input
+ .ADR(addr), // Address [10:0]
+ .D(wdata), // Data Input [127:0]
+ .WEM(nwmask), // Write Enable Mask [127:0] (active high)
+ .WE(write), // Write Enable (active high)
+ .ME(enable), // Memory Enable (active high)
+ .CLK(clock), // Clock
+ // Test and Power-saving pins - tied off
+ .TEST1(1'b0),
+ .TEST_RNM(1'b0),
+ .RME(1'b0),
+ .RM(4'b0),
+ .WA(2'b0),
+ .WPULSE(3'b0),
+ .LS(1'b0),
+ .BC0(1'b0),
+ .BC1(1'b0),
+ .BC2(1'b0)
+ );
`else
+///////////////////////////
+////// Generic SRAM ///////
+///////////////////////////
reg [127:0] mem [0:2047];
reg [10:0] raddr;
diff --git a/hdl/verilog/Sram_12ffcp_512x128.v b/hdl/verilog/Sram_512x128.v
similarity index 76%
rename from hdl/verilog/Sram_12ffcp_512x128.v
rename to hdl/verilog/Sram_512x128.v
index 4b849ff..63033b0 100644
--- a/hdl/verilog/Sram_12ffcp_512x128.v
+++ b/hdl/verilog/Sram_512x128.v
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-module Sram_12ffcp_512x128(
+module Sram_512x128(
input clock,
input enable,
input write,
@@ -22,7 +22,13 @@
output [127:0] rdata
);
-`ifndef USE_GENERIC
+///////////////////////////
+///// SRAM Selection //////
+///////////////////////////
+`ifdef USE_TSMC12FFC
+///////////////////////////
+///// TSMC12FFC SRAM //////
+///////////////////////////
wire [127:0] nwmask;
genvar i;
generate
@@ -66,8 +72,41 @@
.WTSEL(2'b0) // Write Test Select (input [1:0])
`endif
);
+`elsif USE_GF22
+///////////////////////////
+//////// GF22 SRAM ////////
+///////////////////////////
+ wire [127:0] nwmask;
+ genvar i;
+ generate
+ for (i = 0; i < 16; i++) begin
+ assign nwmask[8*i +: 8] = {8{wmask[i]}};
+ end
+ endgenerate
+ sasdulssd8LOW1p512x128m4b1w0c0p0d0l0rm3sdrw01 u_gf22_sram (
+ .Q(rdata),
+ .ADR(addr),
+ .D(wdata),
+ .WEM(nwmask),
+ .WE(write),
+ .ME(enable),
+ .CLK(clock),
+ .TEST1(1'b0),
+ .TEST_RNM(1'b0),
+ .RME(1'b0),
+ .RM(4'b0),
+ .WA(2'b0),
+ .WPULSE(3'b0),
+ .LS(1'b0),
+ .BC0(1'b0),
+ .BC1(1'b0),
+ .BC2(1'b0)
+ );
`else
+///////////////////////////
+////// Generic SRAM ///////
+///////////////////////////
reg [127:0] mem [0:511];
reg [8:0] raddr;
@@ -98,6 +137,6 @@
raddr <= addr;
end
end
-`endif // FFCP12_SRAM
+`endif
endmodule