Falsche Hardwareausgabe mit XC2C256

Gast #496566
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


Gast
@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
Gast
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;
Gast
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
Gast
@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
Gast
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
Gast
@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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.