libtrellis: Store and re-use ctrl0 when unpacking/repacking

Signed-off-by: Jens Andersen <jens.andersen@gmail.com>
diff --git a/libtrellis/include/Chip.hpp b/libtrellis/include/Chip.hpp
index 6d2e800..1c12c3b 100644
--- a/libtrellis/include/Chip.hpp
+++ b/libtrellis/include/Chip.hpp
@@ -132,6 +132,7 @@
 
     // Miscellaneous information
     uint32_t usercode = 0x0;
+    uint32_t ctrl0 = 0x40000000;
     vector<string> metadata;
 
     // Get max row and column
diff --git a/libtrellis/src/Bitstream.cpp b/libtrellis/src/Bitstream.cpp
index 0bc5bcf..f8100ab 100644
--- a/libtrellis/src/Bitstream.cpp
+++ b/libtrellis/src/Bitstream.cpp
@@ -269,6 +269,7 @@
             case BitstreamCommand::LSC_PROG_CNTRL0: {
                 rd.skip_bytes(3);
                 uint32_t cfg = rd.get_uint32();
+                chip->ctrl0 = cfg;
                 BITSTREAM_DEBUG("set control reg 0 to 0x" << hex << setw(8) << setfill('0') << cfg);
             }
                 break;
@@ -423,7 +424,7 @@
     // Set control reg 0 to 0x40000000
     wr.write_byte(uint8_t(BitstreamCommand::LSC_PROG_CNTRL0));
     wr.insert_zeros(3);
-    uint32_t ctrl0  = 0x40000000;
+    uint32_t ctrl0  = chip.ctrl0;
     if (options.count("freq")) {
         auto freq = find_if(frequencies.begin(), frequencies.end(), [&](const pair<string, uint8_t> &fp){
             return fp.first == options.at("freq");