www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Problem bei Addition auf std_logic_vector


Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab hier ein Problem, will hier die Vektoren hochzählen. Jedoch kommt 
dann bei der Simulation das angehängte Bild. Ich danke schon mal im 
Voraus. :)


library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;

entity pixel_generator is
  port(  p_col: in integer;
    p_row: in integer;
    takt: in bit;
    p_gruen: out std_logic_vector(3 downto 0);
    p_blau: out std_logic_vector(3 downto 0);
    p_rot: out std_logic_vector(3 downto 0)
  );
end pixel_generator;

architecture behaviour of pixel_generator is
signal gruen, rot, blau: unsigned(3 downto 0):="0000";
begin
  process(p_col,p_row, takt)
    begin
      if(takt'event and takt='1') then
        if(p_col<=640 and p_col>=1) then
          if(p_row<=479) then
            gruen<=gruen+"0001";
            rot<=rot+"0010";
            blau<=blau+"0011";
          end if;
        else
          p_gruen<="0000";
          p_rot<="0000";
          p_blau<="0000";
        end if;
      end if;
  end process;
p_gruen<=std_logic_vector(gruen);
p_rot<=std_logic_vector(rot);
p_blau<=std_logic_vector(blau);
end behaviour;

Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier ein besserer dateianhang nun aber mit signed statt unsigned

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab das problem gefunden. es muss so aussehen, der fehler war beim 
else..

library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;

entity pixel_generator is
  port(  p_col: in integer;
    p_row: in integer;
    takt: in bit;
    p_gruen: out std_logic_vector(3 downto 0);
    p_blau: out std_logic_vector(3 downto 0);
    p_rot: out std_logic_vector(3 downto 0)
  );
end pixel_generator;

architecture behaviour of pixel_generator is
signal gruen, rot, blau: unsigned(3 downto 0):="0000";
begin
  process(p_col,p_row, takt)
    begin
      if(takt'event and takt='1') then
        if(p_col<=640 and p_col>=1) then
          if(p_row<=479) then
            gruen<=gruen+"0001";
            rot<=rot+"0010";
            blau<=blau+"0011";
          end if;
        else
          gruen<="0000";
          rot<="0000";
          blau<="0000";
        end if;
      end if;
  end process;
p_gruen<=std_logic_vector(gruen);
p_rot<=std_logic_vector(rot);
p_blau<=std_logic_vector(blau);
end behaviour;

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

Bewertung
0 lesenswert
nicht lesenswert
> der fehler war beim else..
Aber die Sensitiv-Liste könnte auch kürzer ausfallen. Statt
process(p_col,p_row, takt)
wäre besser
process(takt)
denn das Ergebnis des Prozesses hängt nur vom Takt ab.

Und du könntest etwas abkürzen. Statt
      
  gruen <= gruen + "0001";
  rot   <= rot   + "0010";
  blau  <= blau  + "0011";
so:
  gruen <= gruen + 1;
  rot   <= rot   + 2;
  blau  <= blau  + 3;

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja danke. ich hatte das erst so
  gruen <= gruen + 1;
  rot   <= rot   + 2;
  blau  <= blau  + 3;
habs aber dann geändert, weil ich mir nicht sicher war, wo der Fehler 
war

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.