mikrocontroller.net

Forum: FPGA, VHDL & Co. Signale ohne Clock-Leitung latchen


Autor: Artur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein recht Vorhaben mit fatalen Misserfolgen 8[
Es müßen vorerst 2 Bit gelatcht werden, die Ohne eine Taktflanke an 
Eingängen des FPGAs ankommen. Soweit sogut. Das Recht einfache Design, 
will komischerweise überhaupt nicht laufen und ich habe keine Idee, 
wieso das so ist.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity ALARM_LATCH is
port(
-- Steuesignale
  ena_alarms  : in  std_logic;
      
-- Alarm Signale
  sig_1  : in  std_logic;
  sig_2  : in  std_logic;
      
-- Alarm Vector Signale zum Top-Design
  alarm_vec_in  : in  std_logic_vector(7 downto 0);
  alarm_vec_out  : out  std_logic_vector(7 downto 0));
end ALARM_LATCH;

architecture Behavioral of ALARM_LATCH is
signal alarm_flag  : std_logic_vector(7 downto 0); 
begin

det_alarm: process(ena_alarms, sig_1, sig_2)
begin
if(ena_alarms='1') then
--//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- Auf die Alarme reagieren
--//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
    if (sig_1 ='1') then
      if(alarm_flag(0)  ='0') then
        alarm_flag(0)    <='1';
        alarm_vec_out(0)   <='0';
      end if;
    end if;
    
    if (sig_2 ='1') then
      if(alarm_flag(1)='0') then
        alarm_flag(1)    <='1';
        alarm_vec_out(1)   <='1';
      end if;
    end if;
  --//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
-- Alarme wieder ruecksetzen (durch den Benutzer)
--//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~      
  --// Abfrage ob  Alarm1 Latch rückgesetzt wurde
  if(alarm_vec_in(0)='0' and alarm_flag(0)='1') then
      alarm_flag(0)    <='0';
      alarm_vec_out(1)   <='0';
  end if;
  
  --// Abfrage ob  Alarm2 Latch rückgesetzt wurde
  if(alarm_vec_in(1)='0' and alarm_flag(1)='1') then
      alarm_flag(1)    <='0';
      alarm_vec_out(1)   <='0';
  end if;
end if;
  
end process;
end Behavioral;


Gedacht habe ich es so:
Wenn eine Änderung an den Pins passiert, sollen diese gelatcht und in 
einem Weiteren Design gespeichert werden, und wenn der User diese im 
Speicher überschreibt, sollte diese Entity das erkennen und Ausgänge auf 
null setzen. Nur habe ich gerade starke Hirnlaggs und weiß nicht, was an 
diesem Design faul ist. Habe Probiert, an die Pins 3,3V für kurze Zeit 
anzulegen, keine Reaktion.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Artur (Gast)

>Ich habe ein recht Vorhaben mit fatalen Misserfolgen 8[
>Es müßen vorerst 2 Bit gelatcht werden, die Ohne eine Taktflanke an
>Eingängen des FPGAs ankommen. Soweit sogut. Das Recht einfache Design,

Nix gut.
Wenn ich dir einen Rat geben darf. Lass den Quark mit wilden aynchronen 
Design, das geht schief. In deinem FPGA MUSS es einen Takt geben, der 
deine State Machines taktet. Nimm den zum Abtasten und speichern der 
Signale.

>diesem Design faul ist. Habe Probiert, an die Pins 3,3V für kurze Zeit
>anzulegen, keine Reaktion.

Und mit wildem Rumstochern an FPGA Pins testet man keine Schaltung. Da 
nimmt man wenigstens Taster.

MfG
Falk

Autor: FPGA Spezialist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grundsätzlich kann man in einem FPGA natürlich sehr wohl reine 
Kombinatorik bauen. Das Problme ist nur, daß es hier einen 
Zustandspeocher gibt, der so schnell gelatched wird, daß er innerhalb 
einer Taktperiode toggelt. Hier muss ein Taktübergang rein, um es sicher 
zu machen. Ansonsten wird die Synthese nur einen Zustand sehen und den 
bauen.
Eine Möglichkeit, das zu umgehen, ist, den Zustandspeicher nach aussen 
auch einen Pin zu legen, und den wieder reinzurouten. Dann kann die 
Synthese d en nicht wegoptimieren und es geht.

Es scheint daneben noch einen Weg zu geben, die Synthese zu betrügen und 
ihr ausserhalb von Reset und Clock schnell asynchron togglende Signale 
vprgeben zu können - das habe ich aber noch nicht voll durch.

Ich habe aber ein Xilinx Design, das genau os läuft. Wenn ich anfange, 
das betreffende Signal in einen clock zu verschieben geht die Schaltung 
nicht mehr.

Ich bin kurz davor das zu posten, wie man sowas macht. Muss es aber noch 
bei Altera gegenchecken.

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.