aboutsummaryrefslogtreecommitdiffstats
path: root/ecp5/config.cc
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2018-10-09 13:13:16 +0100
committerDavid Shah <dave@ds0.me>2018-10-09 13:13:16 +0100
commitf7466110a522389c0ab94d464cc4f52d0f62d6f3 (patch)
tree7ac9c1717d9b7e426af1182ab60801afdbd59e52 /ecp5/config.cc
parentd716292e3d3f1aa4ab11238fe8cdf67f584226ec (diff)
downloadnextpnr-f7466110a522389c0ab94d464cc4f52d0f62d6f3.tar.gz
nextpnr-f7466110a522389c0ab94d464cc4f52d0f62d6f3.tar.bz2
nextpnr-f7466110a522389c0ab94d464cc4f52d0f62d6f3.zip
ecp5: Working on BRAM initialisation
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'ecp5/config.cc')
-rw-r--r--ecp5/config.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/ecp5/config.cc b/ecp5/config.cc
index 2d4f8b1e..c8f94857 100644
--- a/ecp5/config.cc
+++ b/ecp5/config.cc
@@ -19,6 +19,7 @@
#include "config.h"
#include <boost/range/adaptor/reversed.hpp>
+#include <iomanip>
#include "log.h"
NEXTPNR_NAMESPACE_BEGIN
@@ -274,6 +275,19 @@ std::ostream &operator<<(std::ostream &out, const ChipConfig &cc)
out << std::endl;
}
}
+ for (const auto &bram : cc.bram_data) {
+ out << ".bram_init " << bram.first << std::endl;
+ std::ios_base::fmtflags f(out.flags());
+ for (size_t i = 0; i < bram.second.size(); i++) {
+ out << std::setw(3) << std::setfill('0') << std::hex << bram.second.at(i);
+ if (i % 8 == 7)
+ out << std::endl;
+ else
+ out << " ";
+ }
+ out.flags(f);
+ out << std::endl;
+ }
for (const auto &tg : cc.tilegroups) {
out << ".tile_group";
for (const auto &tile : tg.tiles) {
@@ -316,6 +330,16 @@ std::istream &operator>>(std::istream &in, ChipConfig &cc)
}
in >> tg.config;
cc.tilegroups.push_back(tg);
+ } else if (verb == ".bram_init") {
+ uint16_t bram;
+ in >> bram;
+ std::ios_base::fmtflags f(in.flags());
+ while (!skip_check_eor(in)) {
+ uint16_t value;
+ in >> std::hex >> value;
+ cc.bram_data[bram].push_back(value);
+ }
+ in.flags(f);
} else {
log_error("unrecognised config entry %s\n", verb.c_str());
}