www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Dezimale Zahl auf 7-Segment


Autor: Lucky Luck (rantanplan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich bin noch ziemlicher Anfänger in sachen VHDL.
Ich hab mal einen CODE geschrieben um Dezimale Werte, die ich über einen 
std_logic_vector bekomme, auf ein 7-Segment aus zu geben.
Könnte das so funktionieren?
LIBRARY ieee;
USE iee.std_logic_1164.all

ENTITY sec_einer_to_DIG0 IS

  PORT
  (  sec_einer  :  IN std_logic_vector (9 DOWNTO 0);

    DIG0_SEG0  :  OUT std_logic;
    DIG0_SEG1  :  OUT std_logic;
    DIG0_SEG2  :  OUT std_logic;
    DIG0_SEG3  :  OUT std_logic;
    DIG0_SEG4  :  OUT std_logic;
    DIG0_SEG5  :  OUT std_logic;
    DIG0_SEG6  :  OUT std_logic;
    DIG0_SEG7  :  OUT std_logic;

    
  )

END sec_einer_to_DIG0

ARCHITECTURE looks_like OF dec_to_7SEG IS

BEGIN
  PROCESS  (sec_einer)
  BEGIN
    CASE sec_einer IS
      
      WHEN "0" => (DIG0_SEG0 <= "1" AND DIG0_SEG1 <= "1" AND DIG0_SEG2 <= "1" AND DIG0_SEG3 <= "1" AND
             DIG0_SEG4 <= "1" AND DIG0_SEG5 <= "1" AND DIG0_SEG6 <= "0" AND DIG0_SEG7 <= "0");

      WHEN "1" => (DIG0_SEG0 <= "1" AND DIG0_SEG1 <= "1" AND DIG0_SEG2 <= "1" AND DIG0_SEG3 <= "1" AND
             DIG0_SEG4 <= "1" AND DIG0_SEG5 <= "1" AND DIG0_SEG6 <= "0" AND DIG0_SEG7 <= "0");

      WHEN "2" => (DIG0_SEG0 <= "1" AND DIG0_SEG1 <= "1" AND DIG0_SEG2 <= "1" AND DIG0_SEG3 <= "1" AND
             DIG0_SEG4 <= "1" AND DIG0_SEG5 <= "1" AND DIG0_SEG6 <= "0" AND DIG0_SEG7 <= "0");

      WHEN "3" => (DIG0_SEG0 <= "1" AND DIG0_SEG1 <= "1" AND DIG0_SEG2 <= "1" AND DIG0_SEG3 <= "1" AND
             DIG0_SEG4 <= "1" AND DIG0_SEG5 <= "1" AND DIG0_SEG6 <= "0" AND DIG0_SEG7 <= "0");

      WHEN "4" => (DIG0_SEG0 <= "1" AND DIG0_SEG1 <= "1" AND DIG0_SEG2 <= "1" AND DIG0_SEG3 <= "1" AND
             DIG0_SEG4 <= "1" AND DIG0_SEG5 <= "1" AND DIG0_SEG6 <= "0" AND DIG0_SEG7 <= "0");

      WHEN "5" => (DIG0_SEG0 <= "1" AND DIG0_SEG1 <= "1" AND DIG0_SEG2 <= "1" AND DIG0_SEG3 <= "1" AND
             DIG0_SEG4 <= "1" AND DIG0_SEG5 <= "1" AND DIG0_SEG6 <= "0" AND DIG0_SEG7 <= "0");
      
      WHEN "6" => (DIG0_SEG0 <= "1" AND DIG0_SEG1 <= "1" AND DIG0_SEG2 <= "1" AND DIG0_SEG3 <= "1" AND
             DIG0_SEG4 <= "1" AND DIG0_SEG5 <= "1" AND DIG0_SEG6 <= "0" AND DIG0_SEG7 <= "0");

      WHEN "7" => (DIG0_SEG0 <= "1" AND DIG0_SEG1 <= "1" AND DIG0_SEG2 <= "1" AND DIG0_SEG3 <= "1" AND
             DIG0_SEG4 <= "1" AND DIG0_SEG5 <= "1" AND DIG0_SEG6 <= "0" AND DIG0_SEG7 <= "0");

      WHEN "8" => (DIG0_SEG0 <= "1" AND DIG0_SEG1 <= "1" AND DIG0_SEG2 <= "1" AND DIG0_SEG3 <= "1" AND
             DIG0_SEG4 <= "1" AND DIG0_SEG5 <= "1" AND DIG0_SEG6 <= "0" AND DIG0_SEG7 <= "0");

      WHEN "9" => (DIG0_SEG0 <= "1" AND DIG0_SEG1 <= "1" AND DIG0_SEG2 <= "1" AND DIG0_SEG3 <= "1" AND
             DIG0_SEG4 <= "1" AND DIG0_SEG5 <= "1" AND DIG0_SEG6 <= "0" AND DIG0_SEG7 <= "0");
    
    END CASE;

  END PROCESS;
END looks_like;


Autor: Lucky Luck (rantanplan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, hatte vergessen die bits an die Zahlen anzupassen.
Hab das natürlich nachgeholt.

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kann so nicht funzen. Es fehlen einige Kommas. Deine architecture 
bezieht sich nicht auf Deine Entity.
Muss so sein:
ARCHITECTURE looks_like OF sec_einer_to_DIG0 IS 

Ich weiß gerade auch nicht ob das mit den AND's funktioniert. 
Prinzipiell kannst Du die einfach sequentiell hinschreiben:
WHEN "0" => DIG0_SEG0 <= "1";
            DIG0_SEG1 <= "1";
            DIG0_SEG2 <= "1";
            DIG0_SEG3 <= "1";
            DIG0_SEG4 <= "1";
            DIG0_SEG5 <= "1";
            DIG0_SEG6 <= "0"; 
            DIG0_SEG7 <= "0");

Schöner wäre es allerdings wenn Du dir nen Ausgangsvektor in der entity 
definierst und der Werte zuweist.
ENTITY sec_einer_to_DIG0 IS
  PORT
  (  sec_einer  :  IN std_logic_vector (9 DOWNTO 0);

    DIG_SEC : OUT std_logic_vector(7 downto 0);
  );
END sec_einer_to_DIG0;

architecture 
...
...

WHEN "0" => DIG0_SEG <= "11111100"

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ne... Keine Kommas, sondern Semikolons. ;)

Autor: Lucky Luck (rantanplan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke das sich die entity nicht auf die architecture bezieht wäre mir 
nicht aufgefallen.
Einen Ausgangsvektor wollte ich am Anfang auch schon machen, hab mir 
dann aber gedacht das ich es ohne Vektor übersichtlicher ist.

Das ganze soll mal eine Uhr werden. Ist es da möglich die dezimal zu 
7-Segment "Codewanlder" in einer Art "Funktion" zu realisieren. Damit 
ich nicht für jede der sechs Ziffer der Uhr so einen Block schreiben 
muss.

Hab mir da auch schon gedanken darüber gemacht aber es heißt ja immer 
VHDL ist keine "echte Programmiersprache". Deshlab bin ich zu dem Schluß 
gekommen das es nicht funktionieren wird.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Andreas G........ (rantanplan)

>Könnte das so funktionieren?

Prinzipiell ja, aber die Umsetzung ist alles andere als lesbar.
Besser so.
LIBRARY ieee;
USE iee.std_logic_1164.all

ENTITY sec_einer_to_DIG0 IS

  PORT
  (  sec_einer  :  IN std_logic_vector (9 DOWNTO 0);
     DIG0_SEG  :  OUT std_logic_vector (7 DOWNTO 0)
  )

END sec_einer_to_DIG0

ARCHITECTURE looks_like OF dec_to_7SEG IS

BEGIN
  PROCESS  (sec_einer)
  BEGIN
    CASE sec_einer IS
      when "000000000" => "10101010101";
      when "000000001" => "11111111111";
      -- weitere Codierungen einfügen
      when others => "10101010101";      
    END CASE;

  END PROCESS;
END looks_like;

MFG
Falk

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar kann man das auch in eine Funktion schreiben. Aber Du hast ja auch 
schon den dekoder. Den kannst Du auch für jede Ziffer im Toplevel 
instanziieren.

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.