User Login


Sie sind noch nicht eingeloggt!

     anmelden |  registrieren

Termine


08. - 10.12.2014: Frankfurt |
PLC2 - Video Signal Processing

08. - 12.12.2014: Freiburg |
PLC2 - Expert FPGA Schaltungstechnik

08. - 10.12.2014: Mnchen |
PLC2 - Compact ZYNQ for HW Designers

Boards


Spartan 6 FPGA SP605 Evaluation Kit (XC6SLX45T-FGG484)
    

Links


FPGA Hersteller:  Altera
Xilinx
Lattice
FPGA Schulungen:  PLC2
El Camino
Trias
Weiteres:  VHDL ORG

Literatur


Dieter Wecker

Prozessorentwurf

Jahr: 2015
ISBN-10: 3110 4029 63

Flankenerkennung ohne Process

Grundlegende Probleme im Umgang mit VHDL

Flankenerkennung ohne Process

Beitragvon Arne » Di 17. Jun 2014, 07:19

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
Arne
 
Beiträge: 3
Registriert: Mi 14. Mai 2014, 08:00

Re: Flankenerkennung ohne Process

Beitragvon Tobias » Di 17. Jun 2014, 10:28

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
Benutzeravatar
Tobias
 
Beiträge: 312
Registriert: Do 10. Dez 2009, 09:49

Re: Flankenerkennung ohne Process

Beitragvon Arne » Di 17. Jun 2014, 10:39

Tobias hat geschrieben:Du hast doch bestimmt einen Systemtakt mit dem du den Rest deines Systems betreibst.

Nochmal: ich habe keinen Takt.
Arne
 
Beiträge: 3
Registriert: Mi 14. Mai 2014, 08:00

Re: Flankenerkennung ohne Process

Beitragvon Tobias » Di 17. Jun 2014, 10:52

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
Benutzeravatar
Tobias
 
Beiträge: 312
Registriert: Do 10. Dez 2009, 09:49

Re: Flankenerkennung ohne Process

Beitragvon Arne » Di 17. Jun 2014, 12:11

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).
Arne
 
Beiträge: 3
Registriert: Mi 14. Mai 2014, 08:00

Re: Flankenerkennung ohne Process

Beitragvon Tobias » Di 17. Jun 2014, 13:04

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
Benutzeravatar
Tobias
 
Beiträge: 312
Registriert: Do 10. Dez 2009, 09:49

Re: Flankenerkennung ohne Process

Beitragvon Tobias » Di 17. Jun 2014, 13:18

Hallo ich nochmal,

poste mal den Prozesscode der nicht synthetisierbar war.

Grüße

Tobias
Benutzeravatar
Tobias
 
Beiträge: 312
Registriert: Do 10. Dez 2009, 09:49

Re: Flankenerkennung ohne Process

Beitragvon eilert » Fr 20. Jun 2014, 06:46

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
eilert
 
Beiträge: 72
Registriert: Fr 15. Jun 2012, 09:22


Zurück zu VHDL Basics

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron