Signalerzeugung

Gast #388895
Lesenswert?
• ▲
▼
ich erhalte eine kontinuierliche Signalfolge -> 00, 01, 11, 00, ...

Jedes Signal liegt eine bestimmte Zeit(20-30 Taktperionden) an, bevor
es sofort von dem drauffolgenden Signal abgelöst wird.

Wie kann ich diese Signalfolge benützend einen "Takt" daraus
ableiten?
Als Ergebnis möchte ich, jedesmal wenn sich das anliegende Signal
ändert, einen Impuls von 1-Clk-Takt Länge erhalten.

so etwa:

   00               01              11             00      01
XXXXXXXXXXXXXyyyyyyyyyyyyyyyyyyZZZZZZZZZZZZZZZZXXXXXXXXXXyyyyyy
|-|__________|-|_______________|-|_____________|-|_______|-|___


Danke!


Die Signalfolge sind die Zustaände eines Automaten!
#388898
Lesenswert?
• ▲
▼
> Die Differenz ... bilden

Bzw. hier reicht ein einfacher Vergleich aus.

Sig1 ist Dein Input.
...
if Reset ...
elsif rising_edge (clock) .....
  Pulse <= '0';
  Sig2 <= Sig1;
  if Sig1 = Sig2 then
    Pulse <= '1'
  end if;
end if;
(Setzt voraus, dass Sich Sig1 nicht 2mal hintereinander
ändert, aber das hast Du oben ja geschrieben.)

Gruss,

Alex
#388901
Lesenswert?
• ▲
▼
Es geht auch ein "ungleich"-Vergleich, also
Pulse <= (To_unsigned(Sig1) /= To_unsigned(Sig2));
Hab die genaue Syntax gerade nicht im Kopf, weiss nicht
ob to_unsigned das auf std_logic oder bit_vector geht,
ggf. auch direkt als Type-cast, /= kann leider kein
std_logic_vector oder bit_vector.

Oder ein XOR auf den Vector und danach OR_REDUCE (wenn
man die entsprechenden Packages hat) oder so ... ;-)
Pulse <= OR_REDUCE(XOR(Sig1, Sig2));
(Weiss die Schreibweise gerade nicht auswendig.)

Viele Wege führen nach Rom.

Alex

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