Hallo Strangelet,
ich bin zwar auch kein Abel-Experte, aber ich denke dein Grundproblem
besteht darin, dass du zwei voneinander abhängige Statemachines mit
unterschiedlichen Taktsignalen versorgst. (Den Counter mit Resetlogik
kann man schon als Statemachine betrachten.)
Jede dieser beiden Statemachines macht nur dann etwas, wenn auf ihrem
Takt eine positive Flanke kommt. Die Flanken deiner beiden Taktsignale
haben aber keine feste Beziehung zueinander. Deshalb kann es mal dazu
kommen, dass count richtig zurückgesetzt wird, wenn zufällig gerade eine
Flanke auf clk kommt, während count2 den richtigen Wert hat. Aber wenn
diese Flanke nicht zufällig im richtigen Zeitbereich kommt, wird count
eben nicht zurückgesetzt. Zuverlässig funktionieren wird das leider nie.
Es könnte vielleicht etwas besser funktionieren, wenn du rsetbit als
asynchrones Resetsignal für count benutzt. (Gibt es in Abel so etwas wie
count.ar = rsetbit ?) Allerdings ist auch das keine schöne Lösung und
wird ab und zu falsch funktionieren.
Wirklich sauber wäre, wenn du die ganze Logik nur mit einem einzigen
Taktsignal clk_master schalten lässt, das deutlich schneller als clk und
clk2 ist. Die beiden Eingänge clk und clk2 dürftest du dann nicht mehr
als Takte verwenden, sondern als "normale Logiksignale". Dann musst du
für beide eine Flankendetektion einbauen (wenn im letzten Takt von
clk_master der Wert clk = 0 war, und im aktuellen Takt von clk_master
ist clk = 1, dann wird count um 1 inkrementiert...). Damit arbeiten
beide Statemachines mit dem gleichen Takt clk_master, und count kann
nicht "verpassen", dass count2 gerade seinen Überlauf hatte.
viele Grüße
Achim