Hallo zusammen,
ich habe einen Dual-Port-RAM.
Jeweils ein Port des RAM wird von zwei an sich getrennten Modulen
bedient. Jedes Modul hat seinen eigenen Takt.
Leider gehen von einem Modul zum anderen Modul ein paar Steuer- und
Datenleitungen, die ich nun entsprechend behandeln muss.
Alle Kombinationen sind zulässig, also 10MHz/10MHz, 10MHz/5MHz,
5MHz/10MHz und 5MHz/5MHz. Beide Takte CLK1 und CLK2 sind an sich
synchron, nur eben auch mal doppelt so hoch.
Modul 1 taktet also z.B. mit 10MHz und bekommt von Modul 2 mit 5MHz die
Daten- und Steuersignale.
__________ __________
| | | |
| Modul 2 |----Steuersignal--->| Modul 1 |
| CLK=5MHz | | CLK=10MHz|
|__________| |__________|
Hier habe ich mir ein CLK-enable in Modul 1 gebaut
1 | PROCESS (CLK, NRES)
|
2 | BEGIN
|
3 | IF NRES = '0' THEN
|
4 | clk_toggle <= '0';
|
5 | ELSIF rising_edge(CLK) THEN
|
6 | clk_toggle <= NOT(clk_toggle);
|
7 | END IF;
|
8 | END PROCESS;
|
Die von Modul 2 mit 5MHz kommenden Steuersignale verknüpfe ich AND mit
diesem Signal und so taste ich auch bei 10MHz die eigentlich doppelt so
langen Steuersignale nur einmal ab.
Nun habe ich aber ein Problem mit der anderen Richtung, also wenn Modul
2 10MHz hat und Modul 1 diese mit 5MHz abtasten soll.
Hier habe ich immer dann ein Problem, wenn das abzutastende Signal nicht
zufällig auf die steigende Flanke von Modul-Takt 1 kommt.
__________ __________
| | | |
| Modul 2 |----Steuersignal--->| Modul 1 |
| CLK=10MHz| | CLK=5MHz |
|__________| |__________|
Gibt es dort irgendwelche Methoden, wie man das sauber lösen kann, ohne
dass ich auch den 10MHz Takt aus Modul 2 an Modul 1 reichen muss?
__________ __________
| | | |
| Modul 2 |----Steuersignal--->| Modul 1 |
| CLK=10MHz|----Takt 10MHz----->| CLK=5MHz |
|__________| |__________|
Aber selbst dann muss ich an irgendeiner Stelle die Steuersignale an
Modul 1 übergeben, spätestens dann habe ich wieder das gleiche Problem,
dass ich immer doppelt so viele Informationen bekomme, wie ich
verarbeiten kann.
Vielen herzlichen Dank!