Hi, ich habe seit paar Tage ein FPGA ED0 bekommen, ich möchte als Anfang ein LED blinken lassen. beim Kompileren kein Fehler, aber nach der Configuration bleibt der LED aus: LIBRARY ieee ; USE ieee.std_logic_1164.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY led1 IS PORT ( CLCK : in std_logic; LED : out std_logic ); END led1; ARCHITECTURE blinken OF led1 IS signal valeur : std_logic_vector(10 downto 0):="00000000000"; BEGIN CLOCKGEN: process (CLCK) variable cont : natural; begin if rising_edge (CLCK) then if cont<1000000 then cont := cont + 1; else cont:=0; valeur <=valeur +'1'; LED<= valeur(0); end if; end if; end process CLOCKGEN; END blinken;
Wie waehre es wenn du signal valeur : std_logic; machst und in deiner Routine statt >valeur <=valeur +'1'; >LED<= valeur(0); valeur <= not valeur; LED <= valeur; schreibst ?
Hm auf den ersten Blick kann ich keinen Fehler in deinem Code erkennen. Bin aber selbst noch recht neu in der Materie :-D. Ich bekam hier den Tip Variablen (erstmal) nicht zu nutzen... Für deinen Counter würde ich einen integer nehmen... Hab leider kein Board da zum Testen aber ich würde mal folgendes probieren... Hast du auch die Pins des FPGAs richtig verbunden? Kannst du die LED mit dem FPGA einfach nur einschalten.??? LIBRARY ieee ; USE ieee.std_logic_1164.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY led1 IS PORT ( CLCK : in std_logic; LED : out std_logic ); END led1; ARCHITECTURE blinken OF led1 IS begin LED <= '1'; end blinken; Gruß balou
Ich kenne dein Board nicht.... und den FPGA nicht..... Meist gibt es mehrere Takteingänge... Wenn ich raten müsste würde ich den CLK0 nehmen... Wieviel MHz hat der Quarz? Warte ich schreibe mal schnell ein paar Zeilen, wie ich meine, dass es funktionieren müsste.... (aber wie gesagt ungetestet, habe keine Hardware hier)
Was ich noch vergessen habe: Die Zuweisung "LED <= valeur;" sollte dann ausserhalb des Prozesses stehen. Fuer den Taktteiler wuerde ich eventuell eine FSM aufbauen, das ist dann allerdings etwas komplizierter. Mit den Variablen hab ich jetzt selbst noch nicht gross gearbeitet und kenn deshalb die Fallstricke dabei auch nicht so genau. Edit: Fuer meine Variante sollte valeur natuerlich auch erstmal mit 0 initialisiert werden. Ich wuerde dir auch raten dir einen Simulator wie z.B. Modelsim zuzulegen, der hilft bei solchen Problemen oft weiter.
-------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity test is Port ( LED : out STD_LOGIC; CLK : in STD_LOGIC); end test; architecture Behavioral of test is constant XTAL : integer := 50000000; --hier Frequenz des Quarzes eintragen signal COUNTER : integer := 0; --eventuell noch range 0 to xxx := 0; signal LED_STATE : std_logic := '0'; begin BLINKEN : process begin wait until rising_edge(CLK); if (COUNTER = XTAL -1) then COUNTER <= 0; LED_STATE <= not LED_STATE; else COUNTER <= COUNTER + 1; end if; end process BLINKEN; LED <= LED_STATE; end Behavioral;
hi, danke für deine Code, ich habe das getestet , aber es funktioniert nicht, LED bleibt aus. mein Board ist DE0 der CLCK habe ich mit PIN_G2 verbunden.
> mein Board ist DE0 der CLCK habe ich mit PIN_G2 verbunden.
Hast du das ausgewürfelt oder geraten oder wie?
G2 ist eine Strippe des VGA-Ausgangs.... :-/
Die Doku sagt, der 50MHz-Oszillator sei an G21 und B12 angeschlossen.
Hi, ich habe nicht geraten, das steht im Pin Planner das G2 Clock0 ist. muss ich das G21 anschließen?
Du mußt den Takteingang verwenden, an dem tatsächlich ein Takt anliegt. Und das sind bei deinem DE0-Board (lies mal die Doku dazu) nun mal G21 (CLK4) und B12 (CLK9).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.