From 6a1327e3f62257cfb9abd4aa38b5f4b62aaa18b4 Mon Sep 17 00:00:00 2001 From: David Given Date: Sat, 23 Feb 2019 00:50:36 +0100 Subject: [PATCH] Attempt to translate the sequencer into Verilog and have it handle long intervals properly. --- FluxEngine.cydsn/FluxEngine.cyprj | 2 +- FluxEngine.cydsn/Sampler/Sampler.v | 6 +-- FluxEngine.cydsn/Sequencer/Sequencer.cysym | Bin 0 -> 77865 bytes FluxEngine.cydsn/Sequencer/Sequencer.v | 47 +++++++++++++++++++++ lib/fluxmap.cc | 27 +++++++++--- lib/fluxmap.h | 2 + lib/stream/stream.cc | 7 +-- src/fe-writetestpattern.cc | 4 +- 8 files changed, 76 insertions(+), 19 deletions(-) create mode 100644 FluxEngine.cydsn/Sequencer/Sequencer.cysym create mode 100644 FluxEngine.cydsn/Sequencer/Sequencer.v diff --git a/FluxEngine.cydsn/FluxEngine.cyprj b/FluxEngine.cydsn/FluxEngine.cyprj index 515562cd..0f73b95d 100644 --- a/FluxEngine.cydsn/FluxEngine.cyprj +++ b/FluxEngine.cydsn/FluxEngine.cyprj @@ -3379,6 +3379,6 @@ - + \ No newline at end of file diff --git a/FluxEngine.cydsn/Sampler/Sampler.v b/FluxEngine.cydsn/Sampler/Sampler.v index c604f6ab..8e418747 100644 --- a/FluxEngine.cydsn/Sampler/Sampler.v +++ b/FluxEngine.cydsn/Sampler/Sampler.v @@ -27,13 +27,11 @@ end always @(posedge interrupt) begin - result[0] <= interval[0] | interval_is_zero; - result[6:1] <= interval[6:1]; - result[7] <= ~sample; + result[6:0] <= interval[6:0]; + result[7] <= interval_is_zero; lastpulse <= counter; end - //`#end` -- edit above this line, do not edit this line endmodule //`#start footer` -- edit after this line, do not edit this line diff --git a/FluxEngine.cydsn/Sequencer/Sequencer.cysym b/FluxEngine.cydsn/Sequencer/Sequencer.cysym new file mode 100644 index 0000000000000000000000000000000000000000..9ce036e79e46e6334d35b8b684863d553c38e724 GIT binary patch literal 77865 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 0x80) + { + appendByte(0x80); + ticks -= 0x80; + } + appendByte((uint8_t)ticks); + return *this; +} void Fluxmap::precompensate(int threshold_ticks, int amount_ticks) { @@ -45,17 +55,24 @@ void Fluxmap::precompensate(int threshold_ticks, int amount_ticks) uint8_t& prev = (i == 0) ? junk : _bytes[i-1]; uint8_t& curr = _bytes[i]; + if (curr > (3*threshold_ticks)) + continue; + if ((prev <= threshold_ticks) && (curr > threshold_ticks)) { /* 01001; move the previous bit backwards. */ - prev -= amount_ticks; - curr += amount_ticks; + if (prev >= (1+amount_ticks)) + prev -= amount_ticks; + if (curr <= (0x7f-amount_ticks)) + curr += amount_ticks; } else if ((prev > threshold_ticks) && (curr <= threshold_ticks)) { /* 00101; move the current bit forwards. */ - prev += amount_ticks; - curr -= amount_ticks; + if (prev <= (0x7f-amount_ticks)) + prev += amount_ticks; + if (curr >= (1+amount_ticks)) + curr -= amount_ticks; } } } diff --git a/lib/fluxmap.h b/lib/fluxmap.h index c916e66e..6ab7eaab 100644 --- a/lib/fluxmap.h +++ b/lib/fluxmap.h @@ -17,6 +17,8 @@ public: return NULL; } + Fluxmap& appendInterval(uint32_t ticks); + Fluxmap& appendBytes(const std::vector& bytes); Fluxmap& appendBytes(const uint8_t* ptr, size_t len); diff --git a/lib/stream/stream.cc b/lib/stream/stream.cc index 3c0ac243..a6aef5c8 100644 --- a/lib/stream/stream.cc +++ b/lib/stream/stream.cc @@ -29,12 +29,7 @@ std::unique_ptr readStream(const std::string& path, unsigned track, uns auto writeFlux = [&](uint32_t sclk) { int ticks = (double)sclk * TICKS_PER_SCLK; - while (ticks >= 0x100) - { - fluxmap->appendByte(0); - ticks -= 0x100; - } - fluxmap->appendByte((uint8_t)ticks); + fluxmap->appendInterval(ticks); }; uint32_t extrasclks = 0; diff --git a/src/fe-writetestpattern.cc b/src/fe-writetestpattern.cc index 92e0a94d..d91374b3 100644 --- a/src/fe-writetestpattern.cc +++ b/src/fe-writetestpattern.cc @@ -24,8 +24,6 @@ int main(int argc, const char* argv[]) Flag::parseFlags(argc, argv); unsigned ticksPerInterval = (unsigned) (interval * TICKS_PER_US); - if (ticksPerInterval > 0xff) - Error() << "interval too long"; writeTracks( [&](int physicalTrack, int physicalSide) -> std::unique_ptr @@ -33,7 +31,7 @@ int main(int argc, const char* argv[]) std::unique_ptr fluxmap(new Fluxmap); while (fluxmap->duration() < (sequenceLength*1000000.0)) - fluxmap->appendByte(ticksPerInterval); + fluxmap->appendInterval(ticksPerInterval); return fluxmap; }