mikrocontroller.net

Forum: FPGA, VHDL & Co. Bit setzen ohne Takt


Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Schaltung mit einem CoolrunnerII-CPLD XC2C64A, ein Paar 
Tastern und einer LED und möchte, dass die LED beim Betätigen der einen 
oder anderen Taste leuchtet und nach einem Reset-Signal wieder ausgeht. 
Leider habe ich keinen Takt in der Schaltung und ungefähr so versuche 
ich es zu machen:
LED_O: out std_logic;
SW1: in std_logic;
SW2: in std_logic;
...
signal LED_REG: std_logic;
signal SW_EVENT: std_logic;
...
SW_EVENT <= SW1 or SW2;
LED_O <= LED_REG;
process(RST, SW_EVENT, LED_REG)
begin
  if RST = '1' then
    LED_REG <= '0';
  elsif SW_EVENT = '1' then
    LED_REG <= '1';
  else
    LED_REG <= LED_REG;
  end if;
end process;
Nach der Synthese kommen zwei Warnungen, dass ein Latch entsteht und 
wahrscheinlich asynchroner Taktsignal verwendet wird.
Gibt es für so was vielleicht andere Möglichkeiten, ohne dass Latches 
entstehen? Es muss ja bloss ein Bit gesetzt werden, aber ohne Takt...

Gruß,
alex

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso taktest du nicht einfach auf die steigende Flanke von RST?

Autor: Johnsn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du Zustände ohne Taktsignal speichern willst, dann wirst du nicht 
um ein Latch herumkommen.

Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wieso taktest du nicht einfach auf die steigende Flanke von RST?

du meinst wahrscheinlich auf die steigende Flanke von SW_EVENT?
Nein, ich finde, es wäre noch schlimmer als ein Latch, weil SW_EVENT aus 
kombinatorischer Logik kommt (SW1 or SW2).

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ alex

>du meinst wahrscheinlich auf die steigende Flanke von SW_EVENT?
>Nein, ich finde, es wäre noch schlimmer als ein Latch, weil SW_EVENT aus
>kombinatorischer Logik kommt (SW1 or SW2).

Für solchen LED Spielkram kann man auch krude Logik konstruieren. So 
what.
Ein RS-Flip-Flop wäre sogar akademisch OK.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity RS_FF is
    Port ( sw1 : in std_logic;
           sw2 : in std_logic;
           rst : in std_logic;
           led : out std_logic);
end RS_FF;

architecture Behavioral of RS_FF is

signal led_int: std_logic;

begin

led <= led_int;

process(sw1, sw2, rst)
begin
  if rst='0' then
    led_int <= '0';
  elsif sw1='0' or sw2='0' then
    led_int <= '1';
  end if;
end process;

end Behavioral;

MfG
Falk


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.