xilinx: Add support for Spartan 3A DSP block RAMs.
authorMarcin Kościelnicki <mwk@0x04.net>
Mon, 3 Feb 2020 17:50:33 +0000 (18:50 +0100)
committerMarcelina Kościelnicka <mwk@0x04.net>
Fri, 7 Feb 2020 00:00:29 +0000 (01:00 +0100)
Part of #1550

techlibs/xilinx/Makefile.inc
techlibs/xilinx/synth_xilinx.cc
techlibs/xilinx/xc3sda_brams.txt [new file with mode: 0644]

index 3f2fbcc850d5c7c0a8d962bdb73df8af4dd57f76..60b4ace1c4ad237eb90e019f50f4c394b8386aa9 100644 (file)
@@ -27,6 +27,7 @@ techlibs/xilinx/brams_init_8.vh: techlibs/xilinx/brams_init.mk
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/cells_map.v))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/cells_sim.v))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/cells_xtra.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc3sda_brams.txt))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc6s_brams.txt))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc6s_brams_map.v))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc7_xcu_brams.txt))
index 5a28bb13940a9696e931d1e0286e1e01de66c681..705591cf7f88f2f526729512c23aa83a38d657d4 100644 (file)
@@ -438,7 +438,12 @@ struct SynthXilinxPass : public ScriptPass
                                run("memory_bram -rules +/xilinx/{family}_brams.txt");
                                run("techmap -map +/xilinx/{family}_brams_map.v");
                        } else if (!nobram) {
-                               if (family == "xc6s") {
+                               if (family == "xc3sda") {
+                                       // Supported block RAMs for Spartan 3A DSP are
+                                       // a subset of Spartan 6's ones.
+                                       run("memory_bram -rules +/xilinx/xc3sda_brams.txt");
+                                       run("techmap -map +/xilinx/xc6s_brams_map.v");
+                               } else if (family == "xc6s") {
                                        run("memory_bram -rules +/xilinx/xc6s_brams.txt");
                                        run("techmap -map +/xilinx/xc6s_brams_map.v");
                                } else if (family == "xc6v" || family == "xc7") {
diff --git a/techlibs/xilinx/xc3sda_brams.txt b/techlibs/xilinx/xc3sda_brams.txt
new file mode 100644 (file)
index 0000000..fd53a94
--- /dev/null
@@ -0,0 +1,32 @@
+
+bram $__XILINX_RAMB16BWER_TDP
+  init 1
+  abits  9     @a9d36
+  dbits 36     @a9d36
+  abits 10     @a10d18
+  dbits 18     @a10d18
+  abits 11     @a11d9
+  dbits  9     @a11d9
+  abits 12     @a12d4
+  dbits  4     @a12d4
+  abits 13     @a13d2
+  dbits  2     @a13d2
+  abits 14     @a14d1
+  dbits  1     @a14d1
+  groups 2
+  ports  1 1
+  wrmode 0 1
+  enable 1 4   @a9d36
+  enable 1 2   @a10d18
+  enable 1 1   @a11d9 @a12d4 @a13d2 @a14d1
+  transp 0 0
+  clocks 2 3
+  clkpol 2 3
+endbram
+
+match $__XILINX_RAMB16BWER_TDP
+  min bits 4096
+  min efficiency 5
+  shuffle_enable B
+  make_transp
+endmatch