Seite 1 von 1

Flankenerkennung ohne Process

BeitragVerfasst: Di 17. Jun 2014, 07:19
von Arne
Moin zusammen,

Habe folgende Problemstellung:
mein CPLD (XC9536) erhält 2 /RAS und 4 /CAS Signale von einer MemoryControlUnit, die damit asynchrones DRAM ansteuert. Leider habe ich kein Taktsignal zur Auswertung an meinem CPLD. Nun möchte ich mir die obersten vier Bit der demultiplexten Adresse im CPLD abgreifen, d.h. ich muss zwei Adressbits bei der fallenden Flanke eines /RAS Signals merken (2 im Bild) und dito zwei Bits bei einer fallenden /CAS Flanke (4 im Bild).
Bild
Mit einem Clocksignal wäre das mittels Prozess sicher leicht zu lösen.
Wie mache ich sowas aber ohne process und clock?

Thanx, Arne

Re: Flankenerkennung ohne Process

BeitragVerfasst: Di 17. Jun 2014, 10:28
von Tobias
Hallo Arne,

ich würde das trotzdem mit einem getakteten Process machen. Du hast doch bestimmt einen Systemtakt mit dem du den Rest deines Systems betreibst. Mit diesem (sollte i.d.R. schneller sein als der kürzeste zu erfassende Impuls den das DRAM liefert) kannst du dir eine Flankenerkennung nach der Vorlage für z.b. RAS

Code: Alles auswählen
signal flanke : std_logic_vector(1 downto 0):="00";


und

Code: Alles auswählen
flanke <= flanke(0) & RAS;


Ich würde keine ungetakteten Process verwenden. Solltest du dein Design mal auf einen anderen Baustein oder ne andere Familie mappen wollen kannst du dir schnell Probleme einhandeln bzgl. der Signallaufzeiten und dein Design wird mit hoher Wahrscheinlichkeit nicht mehr genau das machen was du für den jetzigen Baustein entworfen hast.

Daher

Code: Alles auswählen
process(Systemtakt)

begin

if rising_edge (Systemtakt) then
 
 flanke <= flanke(0) & RAS;
 
  -- Deine Designbeschreibung
  if flanke = "01" then  --steigende Flanke abfragen
  ....
  end if;

  if flanke = "10" then --fallende Falnke abfragen
  ....
  end if;
         
end if;

end process;


Meintest du sowetwas? Ich hoffe das hilft dir etwas weiter?

Viele Grüße

Tobias

Re: Flankenerkennung ohne Process

BeitragVerfasst: Di 17. Jun 2014, 10:39
von Arne
Tobias hat geschrieben:Du hast doch bestimmt einen Systemtakt mit dem du den Rest deines Systems betreibst.

Nochmal: ich habe keinen Takt.

Re: Flankenerkennung ohne Process

BeitragVerfasst: Di 17. Jun 2014, 10:52
von Tobias
Hallo,

dann trotzdem in einen Prozess einbinden. Genauer gesagt in zwei Prozesse. Einen für RAs und einen für CAS. In die Sensitivity-List dann RAS und CAS schreiben. Dann solltes doch der Prozess nur angestoßen werden wenn ein Wechsel des Signals aus der Sensitivity-List stattfindet. Ob eine Abfrage rising_ bzw. falling_edge vom Synthesetool akzeptiert wird weiß ich nicht genau. Müsste man ausprobieren.

Code: Alles auswählen
process(RAS)

begin

if RAS = 1 then
else

end if;

end process;


Bei so einer Processbeschreibung musst du dann aber mit einem Flag arbeiten, welches du dir sofort bei RAS = 1 setzt und bei RAS = 0 zurücksetzt. Sonst kann evtl. folgendes passieren. Ein Counter oder Schieberegister zählt/schiebt nicht nur einmal bei Signaländerung sondern solange RAS = 1 ist. Das müsste aber geprüft werden. Leider sind Simulationen hier nicht immer das Optimale bei ungetakteten Processen.

Tobias

Re: Flankenerkennung ohne Process

BeitragVerfasst: Di 17. Jun 2014, 12:11
von Arne
Sowas in der Art hatte ich gestern probiert: wurde nicht synthetisiert.
Nehme ich zwei Processe kriege ich ein Problem mit dem Flag. Im RAS Prozess muss es deaktiviert werden, im CAS Prozess hingegen aktiviert werden (Flag soll anzeigen, dass alle vier Adressbit gelesen wurden).

Re: Flankenerkennung ohne Process

BeitragVerfasst: Di 17. Jun 2014, 13:04
von Tobias
Hallo Arne,

und wenn du 2 Flags nimmst und diese außerhalb der Prozesse UND-Verknüpfst oder mit ner XOR-Verknüpfung in ein drittes Signal überführst?

Ist der CPLD nicht mit einem externen Quarz oder Oszillator beschalten? Dann geht ja alles nur asynchron. Mmmhhh das macht die Sache nicht grad schöner...

Tobias

Re: Flankenerkennung ohne Process

BeitragVerfasst: Di 17. Jun 2014, 13:18
von Tobias
Hallo ich nochmal,

poste mal den Prozesscode der nicht synthetisierbar war.

Grüße

Tobias

Re: Flankenerkennung ohne Process

BeitragVerfasst: Fr 20. Jun 2014, 06:46
von eilert
Hallo,
in einem CPLD (XC9500) können die FFs in den Makrozellen aus einem Produktterm getaktet werden.

Somit sollte es möglich sein einen Prozess wie folgt zu synthetisieren:

if falling_edge(RAS) then
stored_signal <= incoming_signal;
end if;

Falls das nicht direkt so geht müsste aber z.B. in den ISE Language templates beschrieben sein wie ein Takt aus einem Produktterm abgeleitet werden kann.

Die Abfrage auf das CAS Signal müsste natürlich in einem eigenen Prozess stehen.
Es dürfen ja keine zwei Clock signale in einem Prozess verwendet werden.

In DRAM Controllern (auch DDR) werden aus Timinggründen, auch in FPGAs die RAS, CAS und Strobe Signale als Takte "Missbraucht" um die Daten zu speichern, bevor sie zum Systemtakt aufsynchronisiert werden.
Das ist die berühmete Ausnahme von der Regel.

Have a nice synthesis
Eilert