
The Hénon map is a discrete-time dynamical system that exhibits chaotic behaviour.
It is defined by two coupled equations — x = 1 - a·x² + y and y = b·x —
which, under the classical parameters a = 1.4 and b = 0.3, produce a bounded
strange attractor. This implementation computes the map in 10-bit signed fixed-point
(Q2.8) and serialises the resulting (x, y) samples as raw bit streams for off-chip readout.
The top module instantiates three sub-blocks:
x = 1 - a·x² + y and y = b·x using fixed-point arithmetic with constants a = 1.4 and b =.3. Asserts done_henon once the first valid sample is available.x[9:0] output and serialises it as a raw bit stream on Q_ser_x, with eos_ser_x flagging end-of-sequence.y[9:0] output, independently enabled via ena_ser_y.
All internal arithmetic uses Q2.8 (10-bit signed, scale = 256). The Hénon attractor is bounded to x ∈ [−1.5, 1.5] and y ∈ [−0.4, 0.4].
Set:
rst_n = 0 for a few clock cyclesrst_n = 1Initial state: x = 0, y = 0
Set:
ena_henon = 1Then:
done_henon indicates valid outputsWait until:
done_henon = 1At that moment:
x_out and y_out contain valid dataPulse: ena_ser_x = 1 (for 1 clock cycle)
Then: ena_ser_x = 0
Observe:
Q_ser_x: outputs 10 bits (LSB first)eos_x = 1Repeat the same process:
Pulse: ena_ser_y = 1
Read:
Q_ser_yeos_y = 1eos_* marks completion| Signal | Dir | Description |
|---|---|---|
clk |
in | System clock |
rst_n |
in | Active-low synchronous reset |
ena_henon |
in | Enable Hénon map iteration |
done_henon |
out | High when valid sample is ready |
ena_ser_x |
in | Start serialisation of x |
Q_ser_x |
out | Serial bit stream for x |
eos_ser_x |
out | End-of-sequence flag for x |
ena_ser_y |
in | Start serialisation of y |
Q_ser_y |
out | Serial bit stream for y |
eos_ser_y |
out | End-of-sequence flag for y |
To test this design on real hardware, the following is required:
Logic analyzer (recommended) to observe serial outputs:
Q_ser_xQ_ser_yAlternatively:
| # | Input | Output | Bidirectional |
|---|---|---|---|
| 0 | ena_henon | Q_ser_x | |
| 1 | ena_ser_x | eos_x | |
| 2 | ena_ser_y | Q_ser_y | |
| 3 | eos_y | ||
| 4 | done_henon | ||
| 5 | |||
| 6 | |||
| 7 |