www.mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL: Aufsteigende Adresse an Port ausgeben


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Miteinander!

Ich habe folgendes Problem:
Ich möchte an 4 Ports eine aufsteigende Adresse ausgeben.
Dafür hab ich folgendes Programm mit einem Zähler, der Zählerstand soll 
an dann an den Ports ausgegeben werden.
Bei der Simulation wird folgende Fehlermeldung ausgegeben:

WARNING:Simulator:29 - at 0 ns: Warning: There is an 'U'|'X'|'W'|'Z'|'-' 
in an arithmetic operand, the result will be 'X'(es).

Code:

ENTITY MAIN IS
   PORT (CLK:      IN std_logic;
  Output:   OUT STD_LOGIC_VECTOR(3 downto 0) := "0000");
END;


ARCHITECTURE BEHAVIOR OF M200_MASTER IS
   signal Count : std_logic_vector (3 downto 0);

BEGIN

   PROCESS (CLK)
   BEGIN
      IF CLK='1' AND CLK'event THEN
      Output <= Count;
      END IF;
   END PROCESS;

   PROCESS
   BEGIN
      Count <= Count + 1;
   END PROCESS;

END BEHAVIOR;




Entwicklungsumgebung: Xilinx ISE 9.1i

Bin für Hilfe wirklich dankbar!

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach mal
   signal Count : std_logic_vector (3 downto 0) := "0000";
Und übersetze mal die Fehlermeldung.

Rick

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich gemacht!
bekomm keine Fehlermeldung...

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das  Count <= Count + 1  gehört in den getakteten Prozess, Count darf 
sich nur an jeder Flanke ändern!

   PROCESS (CLK)
   BEGIN
      IF CLK='1' AND CLK'event THEN
      Output <= Count;
      Count <= Count + 1;
      END IF;
   END PROCESS;

Autor: rrascher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, ich würde es so machen:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

ENTITY MAIN IS
  PORT (
    clk   : in  std_logic;
    Output: out std_logic_vector(3 downto 0)
  );
END;


ARCHITECTURE BEHAVIOR OF M200_MASTER IS

  signal Count : unsigned(3 downto 0) := "0000";

begin
  process (clk)
  begin
    if rising_edge(clk) then
      Count <= Count + 1;
    end if;

    Output <= std_logic_vector(Count);
  end process;
end behavior;


Die Syntax habe ich nicht überprüft. Hoffe trotzdem dass
es richtig ist. Zähler sind bei mir immer unsigned.

Gruß

Ralf

Autor: Schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausserdem würd ich nen Reset durchführen, wo beim anlegen eines Reset- 
Signals Count auf Null gesetzt wird.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habs mit eurer Hilfe hinbekommen...

Vielen Dank!!!

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.