mikrocontroller.net

Forum: FPGA, VHDL & Co. combinational loop


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, kann mir vllt jemand mit meinem problem weiterhelfen? ich habe 
folgenden code, enable ist auf 1 gesetzt, clock ist er Takt und 
resultreal hat auuch eindeutige werte, aber als ergebnis krieg ich in 
der simulation für ausgang immer nur 'U'.
[vhdl]
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE IEEE.numeric_std.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


--  Entity Declaration

ENTITY aufsummierer IS
  -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
  PORT
  (  enable: IN STD_LOGIC;
    clock : IN STD_LOGIC;
    resultreal : IN STD_LOGIC_VECTOR(23 downto 0);
    resultim : IN STD_LOGIC_VECTOR(23 downto 0);
    ausgang : out std_logic_vector ( 27 downto 0 )
  );
  -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!

END aufsummierer;


--  Architecture Body

ARCHITECTURE aufsummierer_architecture OF aufsummierer IS
signal zaehler : natural range 0 to 3;
signal zaehler2 : natural range 0 to 3;
signal ausgang0: std_logic_vector (27 downto 0);
signal ausgang1: std_logic_vector (27 downto 0);
signal ausgang2: std_logic_vector (27 downto 0);
signal ausgang3: std_logic_vector (27 downto 0);



BEGIN
Process ( clock , enable, zaehler)
begin

If clock = '1' and clock'event and enable = '1' then
If zaehler = 3 then
zaehler <= 0;
else
zaehler <= zaehler +1;
end if;
end if;






Case zaehler2 is

WHEN 0 => ausgang0 <= ausgang0 + resultreal;

WHEN 1 => ausgang1 <= ausgang1 + resultreal;
WHEN 2 => ausgang2 <=ausgang2 + resultreal;
WHEN 3 => ausgang3 <=ausgang3 + resultreal;
end case;
Case zaehler is

WHEN 0 => ausgang <= ausgang0;

WHEN 1 => ausgang <= ausgang1 ;
WHEN 2 => ausgang <=ausgang2 ;
WHEN 3 => ausgang <=ausgang3 ;

end case;
end process;
end aufsummierer_architecture;
[\vhdl]

Bei der Implemtierung erschient zudem die Warnung :Warning: Found 
combinational loop of 1 nodes bezogen auf "WHEN 0 => ausgang0 <= 
ausgang0 + resultreal;"
MfG

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich es richtig sehe ist dein Signal zaehler2 unbestimmt.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und noch ein Rat:
In deinem eigenen Interesse solltest du bei deinem Code eine sinnvolle 
Formatierung haben (z.B. Einrückungen des Codes innerhalb von einem 
Process, Verwendung von Klammern...). Damit machst du den Code lesbarer 
für dich und die anderen, vor allem wenn du die anderen dir helfen 
lassen willst.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan schrieb:
> Warning: Found combinational loop of 1 nodes
> bezogen auf "WHEN 0 => ausgang0 <= ausgang0 + resultreal;"
Die Lösung: (besser spät als nie ;-)
Das ist ein kombinatorischer Zähler. Denn hier wird, solange zaehler=0 
ist, der ausgang0 immer schnellstmöglich um das resultreal 
hochgezählt...   :-o

Mehr zum Thema kombinatorische Schleifen:
http://www.lothar-miller.de/s9y/categories/36-Komb...

Autor: Segor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Konstrukt gehört einfach in einen getakteten Prozess.

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.