mal wieder "bad synchronous description"

Gast #388086
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?
1
PIX_COUNTER: process (CCD_CLK)
2
begin
3
  if CCD_CLK = '1' and CCD_CLK'event then
4
    if PIX_COUNT = 1 then
5
      ACT_ROG <= '1';
6
      PIX_COUNT <= PIX_COUNT + 1;
7
    elsif (PIX_COUNT >= 34) and (PIX_COUNT <= 2082) then
8
      ACT_ADC <= '1';
9
      PIX_COUNT <= PIX_COUNT + 1;
10
    elsif PIX_COUNT = 2088 then
11
      PIX_COUNT <= 0;
12
    else
13
      PIX_COUNT <= PIX_COUNT + 1;
14
    end if;
15
  end if;
16
  if CCD_CLK = '0' and CCD_CLK'event then
17
    if PIX_COUNT = 1 then
18
      ACT_ROG <= '0';
19
    elsif (PIX_COUNT >= 34) and (PIX_COUNT <= 2082) then
20
      ACT_ADC <= '0';
21
    end if;
22
  end if;
23
end process PIX_COUNTER;

Danke!

Gruß,
Sebastian
Gast #388088
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?
1
PIX_COUNTER_1: process (CCD_CLK)
2
begin
3
  if CCD_CLK = '1' and CCD_CLK'event then
4
    if PIX_COUNT = 1 then
5
      ACT_ROG <= '1';
6
      PIX_COUNT <= PIX_COUNT + 1;
7
    elsif (PIX_COUNT >= 34) and (PIX_COUNT <= 2082) then
8
      ACT_ADC <= '1';
9
      PIX_COUNT <= PIX_COUNT + 1;
10
    elsif PIX_COUNT = 2088 then
11
      PIX_COUNT <= 0;
12
    else
13
      PIX_COUNT <= PIX_COUNT + 1;
14
    end if;
15
  end if;
16
end process PIX_COUNTER_1;
17

18
PIX_COUNTER_2: process (CCD_CLK)
19
begin
20
  if CCD_CLK = '0' and CCD_CLK'event then
21
    if PIX_COUNT = 1 then
22
      ACT_ROG <= '0';
23
    elsif (PIX_COUNT >= 34) and (PIX_COUNT <= 2082) then
24
      ACT_ADC <= '0';
25
    end if;
26
  end if;
27
end process PIX_COUNTER_2;

Gruß,
Sebastian
Gast #388089
Lesenswert?

Ich habe es jetzt hinbekommen. Im Zwei Prozesse frage nur die Pegel ab
und nicht die Flanke.
1
PIX_COUNTER_2: process (PIX_COUNT)
2
begin
3
  if (PIX_COUNT >= 34) and (PIX_COUNT <= 2082) then
4
    if CCD_CLK = '1' then
5
      ACT_ADC <= '1';
6
    elsif CCD_CLK = '0' then
7
      ACT_ADC <= '0';
8
    end if;
9
  end if;
10
end process PIX_COUNTER_2;

Gruß,
Sebastian
Gast #388090
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
Gast #388091
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:
1
IF rising_edge(clk) THEN
2
.
3
.
4
Signal1 <= Signal;
5
Signal2 <= Signal1;
6
Signal3 <= Signal2;
7
.
8
.
9
rising_edge_Signal  <= Signal2 = '1' AND Signal3 = '0';
10
falling_edge_Signal <= Signal2 = '0' AND Signal3 = '1';

Gruß
Tom

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren