mikrocontroller.net

Forum: FPGA, VHDL & Co. Cyclone II Stromverbrauch steigt drastisch an


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Marko ⚠. (mos6502) Benutzerseite Flattr this
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Ich hab mir eins dieser EP2C5 Mini Boards aus China gekauft:

http://land-boards.com/blwiki/index.php?title=Cyclone_II_EP2C5_Mini_Dev_Board

Darauf ist ab Werk ein Demoprojekt installiert: die drei LEDs blinken im 
Takt von ca. 0,5Hz. Der Stromverbrauch liegt dabei zwischen 30mA (LEDs 
aus) und 34mA (LEDs an). Das Board wird von einem Labornetzteil mit 5V 
versorgt.

Jetzt habe ich in Quartus ein kleines Testprojekt erstellt:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity testboardProj is
  Port (PB : in STD_LOGIC;
      LED0 : out STD_LOGIC;
      LED1 : out STD_LOGIC;
      LED2 : out STD_LOGIC);
end testboardProj;

architecture Behavioral of testboardProj is
begin
  LED0 <= PB;
  LED1 <= PB;
  LED2 <= PB;
end Behavioral;

Dieses funktioniert auch einwandfrei. Solange ich den Taster drücke 
leuchten die LEDs. Das Problem ist aber: sobald ich das Projekt auf den 
FPGA lade steigt die Stromaufnahme auf über 200mA! Genauer gesagt: 205mA 
wenn die LEDs aus sind, 209mA wenn der Taster gedrückt ist und die LEDs 
leuchten.

Wenn ich den Strom aus- und wieder einschalte, also der Werks-Democode 
aus dem Flash-ROM wieder geladen wird, ist die Stromaufnahme wieder bei 
30-34mA. Es liegt also offensichtlich an meinem Code.

Ich habe im Assignment Editor schon einige Einstellungen probiert (siehe 
Screenshot), brachte jedoch keinerlei Veränderung.

Hat jemand eine Idee?

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Sind alle Pins auf definierten Pegeln und nicht floatend, also z.B. 
auf Input mit Pull-Up/Down?

Autor: Markus F. (mfro)
Datum:

Bewertung
3 lesenswert
nicht lesenswert
Was hast Du mit den ungenutzen Pins gemacht?

Assignments->Device->Device and Pin Options...->Unused Pins

Zu jedem Altera-Chip gibt's eine "Pin Connection Guideline", die man 
befolgen sollte. Für ungenutzte Pins steht für den Cyclone II da:

6) Make sure that unused pins are set to input tristated in the Quartus 
II software. For instructions on how to set this, refer to the Quartus 
II Handbook

gemacht?

Beitrag #5406353 wurde vom Autor gelöscht.
Autor: Marko ⚠. (mos6502) Benutzerseite Flattr this
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Markus F. schrieb:
> Was hast Du mit den ungenutzen Pins gemacht?
>
> Assignments->Device->Device and Pin Options...->Unused Pins
>
> Zu jedem Altera-Chip gibt's eine "Pin Connection Guideline", die man
> befolgen sollte. Für ungenutzte Pins steht für den Cyclone II da:
>
> 6) Make sure that unused pins are set to input tristated in the Quartus
> II software. For instructions on how to set this, refer to the Quartus
> II Handbook
>
> gemacht?

Das wars, Danke. Jetzt zieht er nur noch 29mA :-)

Ich hab gerade mal 1 Stunde Erfahrung mit FPGAs. Ich hab mich an dem 
Video hier orientiert:

Youtube-Video "Getting Started with VHDL and the Cyclone II EP2C5 Mini Dev Board"

Immerhin hab ich sofort gemerkt, dass er den Pull-Up nicht aktiviert hat 
und dass deswegen bei ihm der Taster nicht funktioniert ...

Die andere Frage ist, warum Quartus das nicht automatisch macht, wenn 
man man ein neues Projekt erstellt. "As output driving GND" ist IMHO 
eine wenig sinnvolle Defaulteinstellung.

: Bearbeitet durch User
Autor: Win DJ Ammer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Default auf was ?

Wenn's so einfach waere haetten die Hersteller das schon lange gemacht. 
Mir persoenlich waere am Liebsten gewesen : input mit internem pullup. 
Gibt's aber nicht.

Autor: FPGAschlumpf (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
> "As output driving GND" ist IMHO eine wenig sinnvolle Defaulteinstellung.

Bei einem so sparsam bestuecktem Board, sollte man es ja auch
schaffen die wenigen mit Peripherie belegten Pins im Toplevel
als Inputs oder Outputs zu belegen.

> Ich hab mich an dem Video hier orientiert:

Tja, das Datenblatt und die Schaltung waeren eine bessere Orientierung
gewesen.

Und die Pullups sind ausserdem so schwach, dass durch kapazitives
Uebersprechen durchaus noch nennenswerte Reste bei den Pins
ankommen koennen. "As output driving Ground" schafft da
deutlich uebersichtlichere Verhaeltnisse.

So wird das nix mit FPGAs.

Autor: Marko ⚠. (mos6502) Benutzerseite Flattr this
Datum:
Angehängte Dateien:

Bewertung
3 lesenswert
nicht lesenswert
FPGAschlumpf schrieb:
> So wird das nix mit FPGAs.

Leider falsch geraten, es läuft bereits ein 6502-Computer mit BASIC und 
serieller Schnittstelle drauf.

http://searle.hostei.com/grant/Multicomp/

Autor: M. W. (elektrowagi78) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das schaut interessant aus! Ist das ein selbst entwickeltes Projekt? 
Wenn Ich je mehr Zeit hätte, täte Ich das auch machen. Der C64 war mein 
erster Computer :-)

Andere Frage: Wie hast Du die Sondersymbole in Deinen Namen 
reinbekommen?

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus W. schrieb:
> Andere Frage: Wie hast Du die Sondersymbole in Deinen Namen
> reinbekommen?
Unicode.
ZB von dort:
https://www.weblog-deluxe.de/sonderzeichen-und-symbole-ascii-art-fur-second-life/
Herauskopiert:
Kartensymbole: ♠ ♥ ♦ ♣

Autor: M. W. (elektrowagi78) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nette Spielerei :-)

Autor: FPGAschlumpf (Gast)
Datum:

Bewertung
-4 lesenswert
nicht lesenswert
Grant Searle:
"ALL other diagrams, text, software and VHDL are MY OWN WORK"

Ja, der Grant hat auch Plan von sowas.

Autor: Markus F. (mfro)
Datum:
Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
selber ätsch ;)

Autor: Marko ⚠. (mos6502) Benutzerseite Flattr this
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Cool.

Ich hab mal einen I/O Port gestrickt. Noch nicht getestet, wird aber 
korrekt synthetisiert (zumindest sieht der resultierende Schaltplan für 
mich gut aus, s. Anhang):
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity ioport is
  Port (n_reset : in STD_LOGIC;
    n_wr    : in  std_logic;
    n_rd    : in  std_logic;
    regSel  : in  std_logic;    -- 0=ddr, 1=output register
    dataIn  : in  std_logic_vector(7 downto 0);
    dataOut  : out  std_logic_vector(7 downto 0);
    portA    : inout std_logic_vector(7 downto 0)
); 
end ioport;

architecture rtl of ioport is

signal dd_reg : std_logic_vector(7 downto 0) := (others => '0');
signal out_reg : std_logic_vector(7 downto 0) := (others => '0');

begin

  portA(0) <= out_reg(0) when (dd_reg(0) = '1') else 'Z';
  portA(1) <= out_reg(1) when (dd_reg(1) = '1') else 'Z';
  portA(2) <= out_reg(2) when (dd_reg(2) = '1') else 'Z';
  portA(3) <= out_reg(3) when (dd_reg(3) = '1') else 'Z';
  portA(4) <= out_reg(4) when (dd_reg(4) = '1') else 'Z';
  portA(5) <= out_reg(5) when (dd_reg(5) = '1') else 'Z';
  portA(6) <= out_reg(6) when (dd_reg(6) = '1') else 'Z';
  portA(7) <= out_reg(7) when (dd_reg(7) = '1') else 'Z';

  process(n_rd, n_reset)
  begin
    if falling_edge(n_rd) then -- Standard CPU - present data on leading edge of rd
      if regSel = '1' then
        dataOut <= dd_reg;
      else
        dataOut <= portA;
      end if;
    end if;
    if n_reset = '0' then
      dataOut <= (others => '0');
    end if;
  end process;

  process(n_wr, n_reset)
  begin
    if rising_edge(n_wr) then -- Standard CPU - capture data on trailing edge of wr
      if regSel='1' then
        out_reg <= dataIn;
      else
        dd_reg <= dataIn;
      end if;
    end if;
    if n_reset = '0' then
      out_reg <= (others => '0');
      dd_reg <= (others => '0');
    end if;
  end process;
end rtl;

Ein SRAM müsste ich auch noch dranbasteln. Und einen VGA und PS/2 Port. 
Dann gehts erst richtig los :-)

: Bearbeitet durch User
Autor: Markus F. (mfro)
Datum:

Bewertung
3 lesenswert
nicht lesenswert
Marko ⚠. schrieb:
portA(0) <= out_reg(0) when (dd_reg(0) = '1') else 'Z';
portA(1) <= out_reg(1) when (dd_reg(1) = '1') else 'Z';
portA(2) <= out_reg(2) when (dd_reg(2) = '1') else 'Z';
portA(3) <= out_reg(3) when (dd_reg(3) = '1') else 'Z';
portA(4) <= out_reg(4) when (dd_reg(4) = '1') else 'Z';
portA(5) <= out_reg(5) when (dd_reg(5) = '1') else 'Z';
portA(6) <= out_reg(6) when (dd_reg(6) = '1') else 'Z';
portA(7) <= out_reg(7) when (dd_reg(7) = '1') else 'Z';

Tipp: um solche Code-Wüsten zu vermeiden, hat man "generate" erfunden:
    gen: for i in 0 to 7 generate
        portA(i) <= out_reg(i) when (dd_reg(i) = '1') else 'Z';
    end generate;

Noch 'n Tipp: um VHDL hübsch zu formatieren, hat man hier das 'VHDL'-Tag 
erfunden ;)

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.