Was mir auf den ersten Blick beim rasch rübergucken auffällt: Deine Resetbedingung wird nur ausgeführt, wenn (rising_edge(clk) and clken_4mhz = '1') erfüllt ist. Das ist (denke ich mal) nicht im Sinne des Erfinders.
Das zweite: Du kommst aus deinem "Idle" erst heraus, wenn dmx_in='0' ist. Ist das richtig?
Das dritte: Dein dmx_clk hat ein Duty-Cycle von 1/clk. (Das heißt du bekommst immer nur einen kurzen Highpegel und einen langen Low-Pegel auf dem dmx_clk). Stimmt das?
Einen genaueren Blick werfe ich jetzt nicht drauf. Ich habe Urlaub. ![]()
(Außerdem kapiere ich noch nicht ganz was das Ding machen soll.
)