www.mikrocontroller.net

Forum: FPGA, VHDL & Co. LED-Multiplex aufm dem Spartan-3 von Digilent


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo Allseits,

bin gerade dabei mit dem Entwicklungsboard Spartan-3 von Digilent zu
experimentieren. Mein aktuelles Problem ist es, wie bekomme ich eine
10-bit Zahl auf des 4-stellige LED-Display?
Leider konnte ich auch kein Beispiel für das Board finden. Mein
einziger Ansatz ist im Code mitgeliefert, funktioniert so aber
natürlich nicht (Fehler ist im letzten Prozess, letzte if-anweiseung,
da wo "--tausender stelle ermitteln" steht). Ich weiß einfach nicht,
wie ich aus der 10-bit Zahl die einzelnen Stellen ermitteln kann, um
sie an die 7-segment anzeige übergeben zu können.

Hat da vielleicht jemand eine Idee zu meinem Problem oder auch ein
fertiges Beispiel des LED-Multiplexing für dieses Board?

Autor: Hilel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Harry.
Dies ist ein Ausschnitt aus einem Projekt (Digitaluhr) mit
gemultiplexter Ausgabe von Stunden und Minuten auf der 4-stelligen
7-Segment-Anzeige.
Ich hoffe, das hilft Dir weiter.


-- 7-Segment-Anzeige im Multiplex-Betrieb
-- anz7seg.vhdl

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

library UNISIM;
use UNISIM.VComponents.all;


entity anz7seg is
  port(
    clock : in std_logic;
    reset : in std_logic;
    data_in : in std_logic_vector(15 downto 0);
    led : out std_logic_vector(6 downto 0);
    seg : out std_logic_vector(3 downto 0)
    );
end anz7seg;

architecture Behavioral of anz7seg is

signal count : std_logic_vector(15 downto 0);
signal hex : std_logic_vector(3 downto 0);

begin


-- Counter provides delay for 7-segment display
process (clock, reset, count)
begin
  if (reset = '1') then
    count <= (others => '1');
  elsif rising_edge(clock) then
    count <= count + 1;
  end if;
end process;


-- Basic MUX for the 7-segment display
process (clock, reset, hex, data_in, count)
begin
  if (reset = '1') then
    led <= (others => '1');
    seg(0) <= '1';
    seg(1) <= '1';
    seg(2) <= '1';
    seg(3) <= '1';
  elsif rising_edge(clock) then
    case count(15) is
      when '0' =>
        if (count(14) = '0') then
        hex <= data_in(3 downto 0);
        seg(0) <= '0';
        seg(1) <= '1';
        seg(2) <= '1';
        seg(3) <= '1';
        elsif (count(14) = '1') then
          hex <= data_in(7 downto 4);
        seg(0) <= '1';
        seg(1) <= '0';
        seg(2) <= '1';
        seg(3) <= '1';
        end if;
      when '1' =>
        if (count(14) = '0') then
        hex <= data_in(11 downto 8);
        seg(0) <= '1';
        seg(1) <= '1';
        seg(2) <= '0';
        seg(3) <= '1';
        elsif (count(14) = '1') then
          hex <= data_in(15 downto 12);
        seg(0) <= '1';
        seg(1) <= '1';
        seg(2) <= '1';
        seg(3) <= '0';
        end if;
      when others =>
        null;
    end case;
  end if;

   case hex is
    when "0000" =>
      led <= "1000000";
    when "0001" =>
      led <= "1111001";
    when "0010" =>
      led <= "0100100";
    when "0011" =>
      led <= "0110000";
    when "0100" =>
      led <= "0011001";
    when "0101" =>
      led <= "0010010";
    when "0110" =>
      led <= "0000010";
    when "0111" =>
      led <= "1111000";
    when "1000" =>
      led <= "0000000";
    when "1001" =>
      led <= "0010000";

    when others =>
      led <= "1111111";
  end case;
end process;

end Behavioral;

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

Bewertung
0 lesenswert
nicht lesenswert
Nicht wirklich aber trotzdem danke. Ich stelle dieses Problem erstmal in
den Hintergrund.
Es ist nämlich ein noch dringenderes aufgetaucht.
Was heißt folgende Fehlermeldung: "Redeclaration of symbol UUT." ?
Die meldung taucht bei dem angehängten Code auf.

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

benenn mal deine beiden Instanzen um. Die können beide nicht UUT
heissen.

Gruss Jörn

Autor: Harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank, nun klappt es.

Autor: Tobias Danz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich hätte auch mal ne Frage zu einer Fehlermeldung.
beim Überspielen der Schaltung auf den FPGA bekomme ich bei der
Verifikation folgende Fehlermeldung:

ERROR:Bitstream:98 - There are 99 differences.
ERROR:iMPACT:395 - The number of difference is 99

Wie oder Wo kann ich mir das alles anschauen

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.