aboutsummaryrefslogtreecommitdiffstats
path: root/icepack
diff options
context:
space:
mode:
authorhermitsoft <hermisu@mail.com>2017-03-06 16:56:32 +0100
committerhermitsoft <hermisu@mail.com>2017-03-06 16:56:32 +0100
commit4d4738beea12f3f0e9e6fbf7cc433a42c8ea51e6 (patch)
tree99a1ed51a6e5e108513afc992fcbe9fd1b954f51 /icepack
parente207307c74430d544dd33e43ebbeccf910827e1a (diff)
downloadicestorm-4d4738beea12f3f0e9e6fbf7cc433a42c8ea51e6.tar.gz
icestorm-4d4738beea12f3f0e9e6fbf7cc433a42c8ea51e6.tar.bz2
icestorm-4d4738beea12f3f0e9e6fbf7cc433a42c8ea51e6.zip
Disabling BRAM commands in bitsream for LP384
Diffstat (limited to 'icepack')
-rw-r--r--icepack/icepack.cc75
1 files changed, 39 insertions, 36 deletions
diff --git a/icepack/icepack.cc b/icepack/icepack.cc
index 5b6cb3b..a077e92 100644
--- a/icepack/icepack.cc
+++ b/icepack/icepack.cc
@@ -487,46 +487,49 @@ void FpgaConfig::write_bits(std::ostream &ofs) const
int bram_chunk_size = 128;
- debug("BRAM: Setting bank width to %d.\n", this->bram_width);
- write_byte(ofs, crc_value, file_offset, 0x62);
- write_byte(ofs, crc_value, file_offset, (this->bram_width-1) >> 8);
- write_byte(ofs, crc_value, file_offset, (this->bram_width-1));
-
- debug("BRAM: Setting bank height to %d.\n", this->bram_height);
- write_byte(ofs, crc_value, file_offset, 0x72);
- write_byte(ofs, crc_value, file_offset, bram_chunk_size >> 8);
- write_byte(ofs, crc_value, file_offset, bram_chunk_size);
-
- for (int bram_bank = 0; bram_bank < 4; bram_bank++)
+ if (this->bram_width && this->bram_height)
{
- debug("BRAM: Setting bank %d.\n", bram_bank);
- write_byte(ofs, crc_value, file_offset, 0x11);
- write_byte(ofs, crc_value, file_offset, bram_bank);
+ debug("BRAM: Setting bank width to %d.\n", this->bram_width);
+ write_byte(ofs, crc_value, file_offset, 0x62);
+ write_byte(ofs, crc_value, file_offset, (this->bram_width-1) >> 8);
+ write_byte(ofs, crc_value, file_offset, (this->bram_width-1));
+
+ debug("BRAM: Setting bank height to %d.\n", this->bram_height);
+ write_byte(ofs, crc_value, file_offset, 0x72);
+ write_byte(ofs, crc_value, file_offset, bram_chunk_size >> 8);
+ write_byte(ofs, crc_value, file_offset, bram_chunk_size);
- for (int offset = 0; offset < this->bram_height; offset += bram_chunk_size)
+ for (int bram_bank = 0; bram_bank < 4; bram_bank++)
{
- vector<bool> bram_bits;
- for (int bram_y = 0; bram_y < bram_chunk_size; bram_y++)
- for (int bram_x = 0; bram_x < this->bram_width; bram_x++)
- bram_bits.push_back(this->bram[bram_bank][bram_x][bram_y+offset]);
-
- debug("BRAM: Setting bank offset to %d.\n", offset);
- write_byte(ofs, crc_value, file_offset, 0x82);
- write_byte(ofs, crc_value, file_offset, offset >> 8);
- write_byte(ofs, crc_value, file_offset, offset);
-
- debug("BRAM: Writing bank %d data.\n", bram_bank);
- write_byte(ofs, crc_value, file_offset, 0x01);
- write_byte(ofs, crc_value, file_offset, 0x03);
- for (int i = 0; i < int(bram_bits.size()); i += 8) {
- uint8_t byte = 0;
- for (int j = 0; j < 8; j++)
- byte = (byte << 1) | (bram_bits[i+j] ? 1 : 0);
- write_byte(ofs, crc_value, file_offset, byte);
- }
+ debug("BRAM: Setting bank %d.\n", bram_bank);
+ write_byte(ofs, crc_value, file_offset, 0x11);
+ write_byte(ofs, crc_value, file_offset, bram_bank);
- write_byte(ofs, crc_value, file_offset, 0x00);
- write_byte(ofs, crc_value, file_offset, 0x00);
+ for (int offset = 0; offset < this->bram_height; offset += bram_chunk_size)
+ {
+ vector<bool> bram_bits;
+ for (int bram_y = 0; bram_y < bram_chunk_size; bram_y++)
+ for (int bram_x = 0; bram_x < this->bram_width; bram_x++)
+ bram_bits.push_back(this->bram[bram_bank][bram_x][bram_y+offset]);
+
+ debug("BRAM: Setting bank offset to %d.\n", offset);
+ write_byte(ofs, crc_value, file_offset, 0x82);
+ write_byte(ofs, crc_value, file_offset, offset >> 8);
+ write_byte(ofs, crc_value, file_offset, offset);
+
+ debug("BRAM: Writing bank %d data.\n", bram_bank);
+ write_byte(ofs, crc_value, file_offset, 0x01);
+ write_byte(ofs, crc_value, file_offset, 0x03);
+ for (int i = 0; i < int(bram_bits.size()); i += 8) {
+ uint8_t byte = 0;
+ for (int j = 0; j < 8; j++)
+ byte = (byte << 1) | (bram_bits[i+j] ? 1 : 0);
+ write_byte(ofs, crc_value, file_offset, byte);
+ }
+
+ write_byte(ofs, crc_value, file_offset, 0x00);
+ write_byte(ofs, crc_value, file_offset, 0x00);
+ }
}
}