Problem bei Addition auf std_logic_vector

Gast #1309305
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;
Angehängte Dateien:
Gast #1309318
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;
Moderator (Firma: Titel) Persönliche Seite #1309393
> der fehler war beim else..
Aber die Sensitiv-Liste könnte auch kürzer ausfallen. Statt
1
process(p_col,p_row, takt)
wäre besser
1
process(takt)
denn das Ergebnis des Prozesses hängt nur vom Takt ab.

Und du könntest etwas abkürzen. Statt
1
      
2
  gruen <= gruen + "0001";
3
  rot   <= rot   + "0010";
4
  blau  <= blau  + "0011";
so:
1
  gruen <= gruen + 1;
2
  rot   <= rot   + 2;
3
  blau  <= blau  + 3;
Gast #1309643
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.