aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--icefuzz/icecube.sh56
-rw-r--r--icepack/icepack.cc13
2 files changed, 68 insertions, 1 deletions
diff --git a/icefuzz/icecube.sh b/icefuzz/icecube.sh
index 5a1a7f2..832c15e 100644
--- a/icefuzz/icecube.sh
+++ b/icefuzz/icecube.sh
@@ -56,6 +56,11 @@ if [ "$1" == "-up5k" ]; then
shift
fi
+if [ "$1" == "-lm4k" ]; then
+ ICEDEV=lm4k-cm49
+ shift
+fi
+
set -ex
set -- ${1%.v}
icecubedir="${ICECUBEDIR:-/opt/lscc/iCEcube2.2015.08}"
@@ -187,6 +192,42 @@ case "${ICEDEV:-hx1k-tq144}" in
iCEPACKAGE="UWG30"
iCE40DEV="iCE40UP5K"
;;
+ lm4k-cm49)
+ iCEPACKAGE="CM49"
+ iCE40DEV="iCE40LM4K"
+ ;;
+ lm4k-cm36)
+ iCEPACKAGE="CM36"
+ iCE40DEV="iCE40LM4K"
+ ;;
+ lm4k-swg25tr)
+ iCEPACKAGE="SWG25TR"
+ iCE40DEV="iCE40LM4K"
+ ;;
+ lm2k-cm49)
+ iCEPACKAGE="CM49"
+ iCE40DEV="iCE40LM2K"
+ ;;
+ lm2k-cm36)
+ iCEPACKAGE="CM36"
+ iCE40DEV="iCE40LM2K"
+ ;;
+ lm2k-swg25tr)
+ iCEPACKAGE="SWG25TR"
+ iCE40DEV="iCE40LM2K"
+ ;;
+ lm1k-cm49)
+ iCEPACKAGE="CM49"
+ iCE40DEV="iCE40LM1K"
+ ;;
+ lm1k-cm36)
+ iCEPACKAGE="CM36"
+ iCE40DEV="iCE40LM1K"
+ ;;
+ lm1k-swg25tr)
+ iCEPACKAGE="SWG25TR"
+ iCE40DEV="iCE40LM1K"
+ ;;
*)
echo "ERROR: Invalid \$ICEDEV device config '$ICEDEV'."
exit 1
@@ -238,6 +279,21 @@ case "$iCE40DEV" in
libfile="ice40UP5K.lib"
devfile="ICE40T05.dev"
;;
+ iCE40LM1K)
+ icetech="SBTiCE40LM"
+ libfile="ice40LM4K.lib"
+ devfile="ICE40R04.dev"
+ ;;
+ iCE40LM2K)
+ icetech="SBTiCE40LM"
+ libfile="ice40LM4K.lib"
+ devfile="ICE40R04.dev"
+ ;;
+ iCE40LM4K)
+ icetech="SBTiCE40LM"
+ libfile="ice40LM4K.lib"
+ devfile="ICE40R04.dev"
+ ;;
esac
(
diff --git a/icepack/icepack.cc b/icepack/icepack.cc
index 3029c25..325c853 100644
--- a/icepack/icepack.cc
+++ b/icepack/icepack.cc
@@ -420,6 +420,8 @@ void FpgaConfig::read_bits(std::istream &ifs)
this->device = "5k";
else if (this->cram_width == 692 && this->cram_height == 176)
this->device = "u4k";
+ else if (this->cram_width == 656 && this->cram_height == 176)
+ this->device = "lm4k";
else
error("Failed to detect chip type.\n");
@@ -693,6 +695,12 @@ void FpgaConfig::read_ascii(std::istream &ifs, bool nosleep)
this->bram_width = 80;
this->bram_height = 2 * 128;
} else
+ if (this->device == "lm4k") {
+ this->cram_width = 656;
+ this->cram_height = 176;
+ this->bram_width = 80;
+ this->bram_height = 2 * 128;
+ } else
error("Unsupported chip type '%s'.\n", this->device.c_str());
this->cram.resize(4);
@@ -1048,6 +1056,7 @@ int FpgaConfig::chip_width() const
if (this->device == "1k") return 12;
if (this->device == "5k") return 24;
if (this->device == "u4k") return 24;
+ if (this->device == "lm4k") return 24;
if (this->device == "8k") return 32;
panic("Unknown chip type '%s'.\n", this->device.c_str());
}
@@ -1058,6 +1067,7 @@ int FpgaConfig::chip_height() const
if (this->device == "1k") return 16;
if (this->device == "5k") return 30;
if (this->device == "u4k") return 20;
+ if (this->device == "lm4k") return 20;
if (this->device == "8k") return 32;
panic("Unknown chip type '%s'.\n", this->device.c_str());
}
@@ -1067,6 +1077,7 @@ vector<int> FpgaConfig::chip_cols() const
if (this->device == "384") return vector<int>({18, 54, 54, 54, 54});
if (this->device == "1k") return vector<int>({18, 54, 54, 42, 54, 54, 54});
if (this->device == "u4k") return vector<int>({54, 54, 54, 54, 54, 54, 42, 54, 54, 54, 54, 54, 54});
+ if (this->device == "lm4k") return vector<int>({18, 54, 54, 54, 54, 54, 42, 54, 54, 54, 54, 54, 54});
// Its IPConnect or Mutiplier block, five logic, ram, six logic.
if (this->device == "5k") return vector<int>({54, 54, 54, 54, 54, 54, 42, 54, 54, 54, 54, 54, 54});
if (this->device == "8k") return vector<int>({18, 54, 54, 54, 54, 54, 54, 54, 42, 54, 54, 54, 54, 54, 54, 54, 54});
@@ -1110,7 +1121,7 @@ string FpgaConfig::tile_type(int x, int y) const
return "logic";
}
- if (this->device == "5k" || this->device == "u4k") {
+ if (this->device == "5k" || this->device == "u4k" || this->device == "lm4k") {
if (x == 6 || x == 19) return y % 2 == 1 ? "ramb" : "ramt";
return "logic";
}