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


von alex (Gast)


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:
1
LED_O: out std_logic;
2
SW1: in std_logic;
3
SW2: in std_logic;
4
...
5
signal LED_REG: std_logic;
6
signal SW_EVENT: std_logic;
7
...
8
SW_EVENT <= SW1 or SW2;
9
LED_O <= LED_REG;
10
process(RST, SW_EVENT, LED_REG)
11
begin
12
  if RST = '1' then
13
    LED_REG <= '0';
14
  elsif SW_EVENT = '1' then
15
    LED_REG <= '1';
16
  else
17
    LED_REG <= LED_REG;
18
  end if;
19
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

von noname (Gast)


Lesenswert?

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

von Johnsn (Gast)


Lesenswert?

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

von alex (Gast)


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).

von Falk B. (falk)


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


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.