Hallo, Ich habe in VHDL einen Frequenzteiler programmiert, der auf der Hardware (Design Kit CoolRunnerII) eine LED blinken lassen sollte. Nur leuchtet die LED durchgehend. 1.8432MHz auf 1Hz ==> 2^n = 1.8432MHz / 1Hz ==> n ca. 21 Zählt bis auf 2097152 und gibt Übertrag VHDL-Code process(clk) -- Vorteiler begin if rising_edge(clk) then rco <= '0'; counter <= counter + 1; if counter = 2097152 then rco <= '1'; counter <= 0; end if; led <= rco; end if; end process; UCF - File NET "clk" LOC = "P38"; NET "led" LOC = "P92" ; Bitte um Hilfe. julian
@Julian Tja, die LED wird nur für einen Takt (1.8432 MHz) auf '1' gesetzt, sonst auf '0'. Ausserdem brauchst du bei ein 2^n Zähler keinen Overflow explizit programmieren, das machen die alleine. Probier mal das. process(clk) -- Vorteiler begin if rising_edge(clk) then counter <= counter + 1; if counter = 0 then rco <= not rco; end if; led <= rco; end if; end process; MFG Falk
Hallo, Die LED leuchtet immer noch durchgehend trotz der Änderung. signal counter : integer range 0 to 2097152; signal rco : std_logic; begin process(clk) -- Vorteiler begin if rising_edge(clk) then counter <= counter + 1; if counter = 0 then rco <= not rco; end if; led <= rco; end if; end process;
Probier mal:
1 | signal counter : integer range 0 to 2097152; |
2 | signal rco : std_logic; |
3 | begin
|
4 | process(clk) -- Vorteiler |
5 | begin
|
6 | if rising_edge(clk) then |
7 | counter <= counter - 1; -- minus statt plus |
8 | if counter = 0 then |
9 | counter <= 2097152; -- neuer Startwert |
10 | rco <= not rco; |
11 | end if; |
12 | led <= rco; |
13 | end if; |
14 | end process; |
Bei 50MHz Systemclock sollten 50Mhz/2/2097152 = 12Hz rauskommen. Das sollte man flimmern sehen. Rick
@Julian >Hallo, >Die LED leuchtet immer noch durchgehend trotz der Änderung. Hast du wirklich das neue Design compiliert und geladen? Sind die Pins richtig zugeordnet? Der Code unten sollte laufen, das Einzige was noch dazwischenfunken kann ist deine counter Definition. Nimm mal lieber signal counter : std_logic_vector(21 downto 0); MFG Falk
Danke für die Antworten, jetzt funktioniert's. Komischerweise hab ich auf das Board ein paar mal das selbe Programm raufgeladen und auf einmal hats geklappt. Vielleicht liegt das an der JTAG USB Schnitstelle. julian
@Julian >Komischerweise hab ich auf das Board ein paar mal das selbe Programm >raufgeladen und auf einmal hats geklappt. >Vielleicht liegt das an der JTAG USB Schnitstelle. Nö, der CPLD braucht einen Reset, denn die Coolrunner II sind eigentlich FPGAs + FLASH in einem IC. Die laden beim Power-Up ganz schnell und heimlich ihre Konfiguration. Wenn die duch die Programmierung per JTAG geändert wird, muss sie aber wieder in den "FPGA im CPLD-Pelz" geladen werden. Sollte die Software eigentlich machen, da gibts glaub ich ein paar Häckchen in den Optionen. MFG Falk
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.