Merkwürdiges Verhalten mit diesem VHDL-Programm.

OP #3620183
Lesenswert?

Hallo, guten Tag.
Ich habe ein merkwürdiges verhalten mit diesme Programm am DE1-Board.
Es funktioniert soweit. Es blinkt die LED0.
Aber beim DE1-Board gehen dann die RXD, die TXD und bei den 
4-Hex-Anzeigen sind alle Balken angeschaltet.

Was habe ich falsch gemacht?

Danke.
GRuss

-------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity blink1 is
    Port ( clk : in  STD_LOGIC;
           led : out  STD_LOGIC);
end blink1;

architecture Behavioral of blink1 is
signal c     : integer range 0 to 24999999 := 0; -- 0,5s bei 50MHz fosc
signal x     : std_logic:= '0';

begin
   process begin
      wait until rising_edge(clk); -- warten bis zum nächsten Takt
      if (c<24999999) then         -- 0…24999999 = 25000000 Takte = 1/2 
Sekunde bei 50MHz
          c <= c+1;                -- wenn kleiner: weiterzählen
      else                         -- wenn Zählerende erreicht:
          c <= 0;                  -- Zähler zurücksetzen
          x <= not x;              -- und Signal x togglen
      end if;
   end process;
   led <= x;                       -- Signal x an LED ausgeben
end Behavioral;
-------------------------------
Gast #3620200
Lesenswert?

Peter Bierbach schrieb:
> Aber beim DE1-Board gehen dann die RXD, die TXD
Was bedeutet das?

Peter Bierbach schrieb:
> Port ( clk : in  STD_LOGIC;
>            led : out  STD_LOGIC);

Clock als Eingang
Ein Signal als Ausgang.
Was soll dann deiner Meinung nach die 7 Segment Anzeige tun?

Je nach dem, was du am FPGA eingestellt hast, können die Leitungen mit 
einem Pull-up auf logisch '1' gezogen sein. Wie genau das bei Altera 
aussieht weiß ich nicht, ich bin von der Xilinx Welt.


Deinen weiteren Beiträgen zu Folge befindest du dich ganz, ganz am 
Anfang. Ich würde dir sehr Nahe legen ein Buch zur Hand zu nehmen. 
Meistens ist das gut und deutlich erklärt.

Btw. Bei VHDL handelt es sich um KEIN Programm, sondern um eine 
HARDWAREBESCHREIBUNG.
Diese Unterscheidung ist sehr wichtig, um das Verhalten eines FPGAs zu 
verstehen!

Grüße
OP #3620236
Lesenswert?

Noch eine Frage dazu:
Hier blinken die beiden LED0/1.

Warum sind da die Hexzahlen aus und die LED für TXD und RXD?
-------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity blink1 is
    Port ( clk : in  STD_LOGIC;
           led : out  std_logic);
end blink1;

architecture Behavioral of blink1 is
signal c     : integer range 0 to 24999999 := 0; -- 0,5s bei 50MHz fosc
signal x     : std_logic:= '0';

begin
   process begin
      wait until rising_edge(clk); -- warten bis zum nächsten Takt
      if (c<24999999) then         -- 0…24999999 = 25000000 Takte = 1/2 
Sekunde bei 50MHz
          c <= c+1;                -- wenn kleiner: weiterzählen
      else                         -- wenn Zählerende erreicht:
          c <= 0;                  -- Zähler zurücksetzen
          x <= not x;              -- und Signal x togglen
      end if;
   end process;
   led <= x;                       -- Signal x an LED ausgeben
end Behavioral;
--------------------------------

Danke.
Gruss
OP #3620239
Lesenswert?

Hmm.. ein falsches Programm oben drin 16.04.2014 21:19, dieses ist 
richtig
----------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity blink is
    port (
        clk : in  std_logic;
        led : out std_logic_vector (1 downto 0)
        );
end entity blink;

architecture blink_arch of blink is

    signal state          : std_logic_vector(1 downto 0);
    signal terminal_count : std_logic;
    signal count          : unsigned(24 downto 0) := (others => '0');

begin

    led <= state;

    process
    begin
        wait until rising_edge(clk);
        count <= count + 1;
        if count > 30000000 then
            terminal_count <= '1';
            count          <= (others => '0');
        else
            terminal_count <= '0';
        end if;
    end process;

    process
    begin
        wait until rising_edge(clk);

        if terminal_count = '1' then
            case state is
                when "01" =>
                    state <= "10";
                when "10" =>
                    state <= "01";
                when others =>
                    state <= "01";
            end case;
        end if;

    end process;

end architecture blink_arch;
------------------------------------------
Gast #3620466
Lesenswert?

Peter Bierbach schrieb:
> Danke.
> Aber wo finde ich die Zuordnung bei Quartus2 wenn ich ein Projekt
> erstelle?
>
> Gruss

Unter Assignments -> Pins. Dazu musst du aber in den Schaltplan schauen. 
Am Anfang ist es aber deutlich einfacher wenn du dir das UCF-File von 
einem der Beispielprojekte nimmst.

Noch sehr viel besser wäre es allerdings wenn du einfach einmal das "PDF 
Tutorial for VHDL Users" durcharbeiten würdest (findest du unter Help). 
Dort ist eigentlich alles erklärt.

Das mit den leuchtenden LEDs könnte auch an den Einstellungen für 
unbenutzte Pins liegen. Normalerweise ist sind die auf Eingang mit Weak 
Pullups konfiguriert. Das kann man bei den Einstellungen für das Device 
ändern. Hier einfach herumzuspielen könnte allerdings im schlimmsten 
Fall zu Beschädigungen auf dem Board führen, z.B. wenn Ram und FPGA 
unterschiedliche Pegel auf ein Pin geben (-> Buskonflikt). Besser wäre 
es die unbenutzte Peripherie im Toplevel zu deaktivieren.
#3620541
Lesenswert?

Peter Bierbach schrieb:
> Darum findet meine Programmlogik kein Ziel.
> Ich suche ein gebrauchtes Buch für Anfänger für VHDL.

Für Einsteiger ein recht gutes Buch ist "VHDL Synthese" von J. Reichardt 
und B Schwarz. Ist eines der wenigen deutschsprachigen Bücher und führt 
dich langsam an die Denkweise von Hardwarebeschreibungssprachen heran.

Für den Einstieg reicht eine eine der älteren Auflagen aus, die findet 
man auch gebraucht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren