www.mikrocontroller.net

Forum: FPGA, VHDL & Co. mal wieder "bad synchronous description"


Autor: Sebastian H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frohe Ostern!

Ich hab da ein kleines Problem mit dem ACT_ADC-Signal. Wie bekomme ich
es hin, daß ich das Signal bei fallenden und steigenden Flanken
bearbeiten kann?
PIX_COUNTER: process (CCD_CLK)
begin
  if CCD_CLK = '1' and CCD_CLK'event then
    if PIX_COUNT = 1 then
      ACT_ROG <= '1';
      PIX_COUNT <= PIX_COUNT + 1;
    elsif (PIX_COUNT >= 34) and (PIX_COUNT <= 2082) then
      ACT_ADC <= '1';
      PIX_COUNT <= PIX_COUNT + 1;
    elsif PIX_COUNT = 2088 then
      PIX_COUNT <= 0;
    else
      PIX_COUNT <= PIX_COUNT + 1;
    end if;
  end if;
  if CCD_CLK = '0' and CCD_CLK'event then
    if PIX_COUNT = 1 then
      ACT_ROG <= '0';
    elsif (PIX_COUNT >= 34) and (PIX_COUNT <= 2082) then
      ACT_ADC <= '0';
    end if;
  end if;
end process PIX_COUNTER;

Danke!

Gruß,
Sebastian

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In einem Prozess darf man nur auf steigende ODER fallende Flanke
abfragen. Beides zusammen ergibt die Fehlermeldung. Musst also so
umschreiben, dass du das ganze in 2 Prozesse packen kannst.

Autor: Sebastian H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal Danke für den Tip! Ich hab nun zwei Prozesse daraus gemacht.
Jetzt hab ich aber zwei neue Probleme:
  Multi-source on signal <ACT_ROG>
  Multi-source on signal <ACT_ADC>
Wie kann ich denn die Multi-source umgehen?
PIX_COUNTER_1: process (CCD_CLK)
begin
  if CCD_CLK = '1' and CCD_CLK'event then
    if PIX_COUNT = 1 then
      ACT_ROG <= '1';
      PIX_COUNT <= PIX_COUNT + 1;
    elsif (PIX_COUNT >= 34) and (PIX_COUNT <= 2082) then
      ACT_ADC <= '1';
      PIX_COUNT <= PIX_COUNT + 1;
    elsif PIX_COUNT = 2088 then
      PIX_COUNT <= 0;
    else
      PIX_COUNT <= PIX_COUNT + 1;
    end if;
  end if;
end process PIX_COUNTER_1;

PIX_COUNTER_2: process (CCD_CLK)
begin
  if CCD_CLK = '0' and CCD_CLK'event then
    if PIX_COUNT = 1 then
      ACT_ROG <= '0';
    elsif (PIX_COUNT >= 34) and (PIX_COUNT <= 2082) then
      ACT_ADC <= '0';
    end if;
  end if;
end process PIX_COUNTER_2;

Gruß,
Sebastian

Autor: Sebastian H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es jetzt hinbekommen. Im Zwei Prozesse frage nur die Pegel ab
und nicht die Flanke.
PIX_COUNTER_2: process (PIX_COUNT)
begin
  if (PIX_COUNT >= 34) and (PIX_COUNT <= 2082) then
    if CCD_CLK = '1' then
      ACT_ADC <= '1';
    elsif CCD_CLK = '0' then
      ACT_ADC <= '0';
    end if;
  end if;
end process PIX_COUNTER_2;

Gruß,
Sebastian

Autor: Mockup (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man könnte die flanken abfragen indem man das so macht.
if rising_edge(clk) then
  signal1 <= signal;
  signal2 <= signal1;

  if signal2 = '0' and signal1 = '1' then -- steigende flanke
    blabla
  end if;

  if signal2 = '1' and signal1 = '0' then -- fallende flanke
    blabla
  end if;
end if;

mfg

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

die Flankenabfrage von Mockup ist eigentlich recht gängig.
Nur würde ich das abzufragende signal mindestens über 3 FF einsampeln,
und dann die FF2 und FF3 für die jeweilige Flankenabfrage (vom Typ
BOOLEAN) nutzen.
In etwa so:

IF rising_edge(clk) THEN
.
.
Signal1 <= Signal;
Signal2 <= Signal1;
Signal3 <= Signal2;
.
.
rising_edge_Signal  <= Signal2 = '1' AND Signal3 = '0';
falling_edge_Signal <= Signal2 = '0' AND Signal3 = '1';


Gruß
Tom

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.