Forum: FPGA, VHDL & Co. Probleme mit einfachem VHDL-Modul


von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Hallo Leute,

ISE gibt mir eine Fehlermeldung mit der ich absolut nichts anfangen 
kann.

Was habe ich getan?

Ich habe ein Modul mit folgender Entity erstellt:
1
entity mod27 is
2
    Port ( C : in  STD_LOGIC;
3
        testClock : in STD_LOGIC;
4
           Bits : out  STD_LOGIC_VECTOR (4 downto 0));
5
end mod27;

Das Modul soll lediglich die Clock hochzählen und ausgeben. Bei 27 soll 
der Ausgang wieder auf 0 gesetzt werden. Getaktet wird es mit dem 50MHz 
Boardtakt, dass das Modul auf 1Hz runterteilt.

In der Simulation funktioniert alles wunderbar.

Das zugehörige UCF-File sieht wie folgt aus:
1
NET "C" LOC = "B8";
2
NET "Bits<0>" LOC = "J14";
3
NET "Bits<1>" LOC = "J15";
4
NET "Bits<2>" LOC = "K15";
5
NET "Bits<3>" LOC = "K14";
6
NET "Bits<4>" LOC = "E16";

-------------------------
Nun ist der Fehler, während des Schreibens verschwunden. So kann ich 
leider die Fehlermeldung nicht reinschreiben.

Das macht die Sache aber nicht wirklich besser.

Wie Ihr sicherlich vermutet, reagiert das Board nicht.
Es müssten eigentlich LD0..LD4 die Bits ausgeben. Tun sie aber nicht.

Fehler gibt es sicher viele.

Was habe ich alles falsch gemacht?

Und warum gibt es eigentlich nirgends ein vernünftiges Tutorial zu 
diesem Thema? Das ist doch äußerst wichtig bei der Synthese.
http://www.mikrocontroller.net/articles/UCF-Dateien ist ja nicht gerade 
ausführlich. Es zeigt ja noch nicht mal, dass die Angaben in 
Anführungsstriche gesetzt werden müssen. Selbst Entwurf
digitaler Schaltungen und Systeme ISBN 3486589873 schweigt sich da 
gänzlich aus. Unverständlich.

Vielen Dank für eure Hilfe
Fabian

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Ach!
Wie kann ich Einglänge (testClock) hart auf GND oder VCC setzen???

von Haro (Gast)


Lesenswert?

>schweigt sich aus
Das liegt daran, dass die Bücherschreiber immer nur dasselbe schreiben 
und die Details gerne weglassen.  Was du prinzipiell alles machen musst, 
musst Du dir eben langsam erarbeiten.

Zum UCF: Du brauchts gfs ein clock constraint, die locs scheinen ok

Was bei Dir konkret nicht geht, kann hier aber keiner beantworten, weil 
du keinen code gepostet hast. Wo ist der Zähler?

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

@ Haro

Zähler???
Was meinen Sie damit?

Hier aber erstmal der Code:
1
----------------------------------------------------------------------------------
2
-- Company: 
3
-- Engineer: 
4
-- 
5
-- Create Date:    10:47:25 11/29/2011 
6
-- Design Name: 
7
-- Module Name:    mod27 - Behavioral 
8
-- Project Name: 
9
-- Target Devices: 
10
-- Tool versions: 
11
-- Description: 
12
--
13
-- Dependencies: 
14
--
15
-- Revision: 
16
-- Revision 0.01 - File Created
17
-- Additional Comments: 
18
--
19
----------------------------------------------------------------------------------
20
library IEEE;
21
use IEEE.STD_LOGIC_1164.ALL;
22
use IEEE.STD_LOGIC_ARITH.ALL;
23
24
-- Uncomment the following library declaration if using
25
-- arithmetic functions with Signed or Unsigned values
26
-- use IEEE.NUMERIC_STD.ALL;
27
28
-- Uncomment the following library declaration if instantiating
29
-- any Xilinx primitives in this code.
30
--library UNISIM;
31
--use UNISIM.VComponents.all;
32
33
entity mod27 is
34
    Port ( C : in  STD_LOGIC;
35
        testClock : in STD_LOGIC;
36
           Bits : out  STD_LOGIC_VECTOR (4 downto 0));
37
end mod27;
38
39
architecture Behavioral of mod27 is
40
41
  COMPONENT clkdiv1hz
42
   PORT ( Clk_in : in  STD_LOGIC;
43
          Clk_out : out  STD_LOGIC);
44
  END COMPONENT;
45
46
  -- SIGNAL BoardClock : STD_LOGIC;
47
  SIGNAL Clk1Hz : STD_LOGIC;
48
49
begin
50
  FrequDiv1Hz: clkdiv1hz PORT MAP (
51
    Clk_in  => C,
52
    Clk_out => Clk1Hz
53
  );
54
55
--Clk1Hz <= testClock;
56
57
  modulo27: process (Clk1Hz, testClock)
58
  VARIABLE Count: INTEGER RANGE 0 to 27 := 0;
59
  begin
60
    Count := Count + 1;
61
    if (Count > 26) then
62
      Count := 0;
63
    end if;
64
    Bits <= conv_std_logic_vector(Count, 5);
65
  end process modulo27;
66
  
67
end Behavioral;

Das Clock-Modul
1
----------------------------------------------------------------------------------
2
-- Company: 
3
-- Engineer: 
4
-- 
5
-- Create Date:    23:41:59 11/27/2011 
6
-- Design Name: 
7
-- Module Name:    clkdiv1hz - Behavioral 
8
-- Project Name: 
9
-- Target Devices: 
10
-- Tool versions: 
11
-- Description: 
12
--
13
-- Dependencies: 
14
--
15
-- Revision: 
16
-- Revision 0.01 - File Created
17
-- Additional Comments: 
18
--
19
----------------------------------------------------------------------------------
20
library IEEE;
21
use IEEE.STD_LOGIC_1164.ALL;
22
23
-- Uncomment the following library declaration if using
24
-- arithmetic functions with Signed or Unsigned values
25
--use IEEE.NUMERIC_STD.ALL;
26
27
-- Uncomment the following library declaration if instantiating
28
-- any Xilinx primitives in this code.
29
--library UNISIM;
30
--use UNISIM.VComponents.all;
31
32
entity clkdiv1hz is
33
    Port ( Clk_in : in  STD_LOGIC;
34
           Clk_out : out  STD_LOGIC);
35
end clkdiv1hz;
36
37
architecture Behavioral of clkdiv1hz is
38
  Signal Clk_out_tmp: STD_LOGIC := '0';  -- Vorinitialisierung und zum auslesen des Ausgangs
39
begin
40
41
Clock_1Hz: process (Clk_in)
42
  VARIABLE Counter: integer := 0;      -- Taktzähler
43
Begin
44
  if rising_edge(Clk_in) then        -- Bei steigender Taktflanke
45
    Counter := Counter + 1;          -- inkrementiere Taktzähler
46
    if(Counter = 25000000) then      -- nach einer halben Sekunde
47
      Clk_out <= not Clk_out_tmp;    -- Toggle den Ausgang
48
      Clk_out_tmp <= not Clk_out_tmp;  -- Toggle ebenso das temp.-Signal
49
      Counter := 0;              -- resette den Counter für die nächste halbe Sekunde
50
    end if;
51
  end if;
52
End Process Clock_1Hz;
53
54
end Behavioral;

Prügel sind erlaubt. Was mich nicht umbringt macht mich klüger! ^^

Danke
Fabian

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Haro schrieb:
>...
>
> Zum UCF: Du brauchts gfs ein clock constraint, die locs scheinen ok
>
> ...

Keine Ahnung wie das funktionieren soll.

Laut dem Tutorial:
__
Taktdefinition

NET CLOCK        LOC = AA12;
NET CLOCK        TNM_NET = "CLOCK_50";
TIMESPEC         TS_CLOCK_50 = PERIOD CLOCK_50 50 MHz HIGH 50 %;
__

habe ich alles richtig gemacht. NET <Busname für CLOCK> LOC = <Pin>.

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Ich kann ehrlich gesagt, mit keinen dieser Warnungen was anfangen.
1
WARNING:MapLib:701 - Signal Bits<4> connected to top level port Bits<4> has been
2
   removed.
3
WARNING:MapLib:701 - Signal Bits<3> connected to top level port Bits<3> has been
4
   removed.
5
WARNING:MapLib:701 - Signal Bits<2> connected to top level port Bits<2> has been
6
   removed.
7
WARNING:MapLib:701 - Signal Bits<1> connected to top level port Bits<1> has been
8
   removed.
9
WARNING:MapLib:701 - Signal Bits<0> connected to top level port Bits<0> has been
10
   removed.
Hat keiner gesagt, dass er das tun soll.
1
WARNING:PhysDesignRules:367 - The signal <C_IBUF> is incomplete. The signal does
2
   not drive any load pins in the design.
3
WARNING:Par:288 - The signal C_IBUF has no load.  PAR will not attempt to route this signal.
Doch! Das Clock-Signal B8!
1
WARNING:Par:283 - There are 1 loadless signals in this design. This design will cause Bitgen to issue DRC warnings.
Siehe oben!
1
WARNING:PhysDesignRules:367 - The signal <C_IBUF> is incomplete. The signal does
2
   not drive any load pins in the design.

Kann jemand von euch was damit anfangen?
Ich verzweifle langsam an diesem Wahnsinn.
Die Arbeit bleibt liegen, nur weil nicht mal klar ist, welche Fehler es 
gibt, geschweige denn Lösungen.

Wäre super wenn mich hier jemand erleuchten kann.

Muss man sich mal Vorstellen, wie einfach das Programm ist. Was wird das 
nur, wenn es ein richtiges Projekt gibt.

Vielen Dank
Fabian

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

1. du brauchst die erstden paar Monate garantiert KEIN Variablen.
Siehe den Beitrag "Variable vs Signal"

2. Was sollte denn das hier geben:
1
  modulo27: process (Clk1Hz, testClock)
2
  VARIABLE Count: INTEGER RANGE 0 to 27 := 0;
3
  begin
4
    Count := Count + 1;
5
    if (Count > 26) then
6
      Count := 0;
7
    end if;
8
    Bits <= conv_std_logic_vector(Count, 5);
9
  end process modulo27;
Alles, was irgendwie irgendwas speichert (z.B. ein Zähler einen 
Zählerstand), muss in Flipflops abgebildet werden. Ein Flipflop hat 
einen Takt. Das, was du da beschrieben hat, kennt man als 
"kombinatorische Schleife": ein Zähler ohne Takt. Nein, es reicht nicht 
aus, wenn der Takt in der Sensitivliste steht. Diese Liste wird 
aussschliesslich von der Simulation verwendet!

> Wie kann ich Einglänge (testClock) hart auf GND oder VCC setzen???
http://www.lothar-miller.de/s9y/archives/81-Xilinx-ISE-Step-by-Step.html
Du definierst ein Signal, weist ihm im UCF einen Pin zu und schreibst 
dann
 spare <= '0';
Wenns mehrere sind, dann ist ein Vektor angebracht, da kannst du gleich 
alle restlichen Pins zuordnen und auf 0 setzen...
 spare <= (others=>'0');

> Kann jemand von euch was damit anfangen?

> Wäre super wenn mich hier jemand erleuchten kann.
Lies mal das:
http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html
Und das:
http://www.lothar-miller.de/s9y/archives/61-Lauflicht.html

Und dann merk dir noch meine Postulate:
1
Ein Design (insbesondere ein Anfängerdesign) hat genau 1 Takt, 
2
der immer auf dieselbe Flanke aktiv ist. 
3
Es gibt keinen (und schon gar keinen asynchronen) Reset.
4
Externe Signale werden über 2 Flipflops einsynchronisiert.
5
Jede Abweichung von diesen Regeln muß fundiert begründet werden können.
Ein Takt ist alles, was mit   xxx_edge() oder 'event  zusammenhängt.

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Lothar Miller schrieb:
> 1. du brauchst die erstden paar Monate garantiert KEIN Variablen.
> Siehe den Beitrag "Variable vs Signal"

Das sehe ich anders. In Prozessen Variablen und in der Architecture 
Signale.
Signale haben auch nicht die arithmetischen Eigenschaften wie Variablen.
Wie bitte soll ich denn sonst hochzählen?
>
> 2. Was sollte denn das hier geben:
Was wird das wohl sein?
Ein Modulo 27 Counter. Wie es der Name schon sagt.
Er zählt den Eingang hoch und gibt ihn binärcodiert wieder aus. Bei 27 
wird zurückgesetzt.
Das einzige was ich falsch gemacht habe ist, dass ich nicht auf 
rising-edge reagiere, sondern auch auf die fallende Flanke.
Wird gleich ausgebessert.
>
1
>   modulo27: process (Clk1Hz, testClock)
2
>   VARIABLE Count: INTEGER RANGE 0 to 27 := 0;
3
>   begin
4
>     Count := Count + 1;
5
>     if (Count > 26) then
6
>       Count := 0;
7
>     end if;
8
>     Bits <= conv_std_logic_vector(Count, 5);
9
>   end process modulo27;
10
>
> Alles, was irgendwie irgendwas speichert (z.B. ein Zähler einen
> Zählerstand), muss in Flipflops abgebildet werden. Ein Flipflop hat
> einen Takt.

Ein RSFF hat zum Beispiel keinen Takt.

> Das, was du da beschrieben hat, kennt man als
> "kombinatorische Schleife": ein Zähler ohne Takt. Nein, es reicht nicht
> aus, wenn der Takt in der Sensitivliste steht. Diese Liste wird
> aussschliesslich von der Simulation verwendet!
Das war mir neu. Wird einem auch nicht gelehrt und steht auch in keinem 
der Bücher die ich bisher gelesen habe. Oder ich habe es überlesen.
Stammt wohl noch aus der Zeit als VHDL eine reine Simulationsprache war.

>
>> Wie kann ich Einglänge (testClock) hart auf GND oder VCC setzen???
> http://www.lothar-miller.de/s9y/archives/81-Xilinx-ISE-Step-by-Step.html
> Du definierst ein Signal, weist ihm im UCF einen Pin zu und schreibst
> dann
>  spare <= '0';
> Wenns mehrere sind, dann ist ein Vektor angebracht, da kannst du gleich
> alle restlichen Pins zuordnen und auf 0 setzen...
>  spare <= (others=>'0');
Danke. Werde ich mir gleich ansehen.
Aber schon traurig dass ich da einen GND-Ausgang erzeugen muss um dann 
einen weiteren Eingang auf GND setzten zu können. Das sieht dann 
bestimmt auch super aus, wenn ich von dem Modul ein Symbol erzeuge.
Warum sowas nicht geht, ist mir schleierhaft:
1
NET "PinToGND" LOC = "GND"
2
oder
3
... LOC = 0
Oder so ähnlich.

>
>> Kann jemand von euch was damit anfangen?
>
>> Wäre super wenn mich hier jemand erleuchten kann.
> Lies mal das:
> http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html
> Und das:
> http://www.lothar-miller.de/s9y/archives/61-Lauflicht.html
Kommst Du mir jetzt wirklich mit Hello World???

>
> Und dann merk dir noch meine Postulate:
>
1
> Ein Design (insbesondere ein Anfängerdesign) hat genau 1 Takt,
2
> der immer auf dieselbe Flanke aktiv ist.
3
Ja, und? Habe ich das nicht?
4
> Es gibt keinen (und schon gar keinen asynchronen) Reset.
5
Was bitte ist ein (a)synchroner Reset und warum nicht?
6
> Externe Signale werden über 2 Flipflops einsynchronisiert.
7
Wie sieht das aus? http://www.lothar-miller.de/s9y/categories/35-Einsynchronisieren ? Wie soll ich die FFs in ein VHDL-Modul packen? Ist das letzte Gatter ein XOR?
8
Warum denn nur das?
9
Warum wird das einem nicht gelehrt?
10
> Jede Abweichung von diesen Regeln muß fundiert begründet werden können.
11
>
> Ein Takt ist alles, was mit   xxx_edge() oder 'event  zusammenhängt.

Vielen Dank für deine Mühen.
Fabian

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Und schon wieder stoße ich auf zwei Probleme.

Erstens habe ich wieder einen Fehler gemacht und zweitens gibt ISE dazu 
nur einen dusseligen Kommentar:

Um auf die Clock zu reagieren habe ich ein if-Statement hinzugefügt:
1
modulo27: process (Clk1Hz, testClock)
2
  VARIABLE Count: INTEGER RANGE 0 to 27 := 0;
3
  begin
4
    if rising_edge(Clk1Hz) or rising_edge(testClock) then -- <- !!! Line 60
5
      Count := Count + 1;
6
      if (Count > 26) then
7
        Count := 0;
8
      end if;
9
      Bits <= conv_std_logic_vector(Count, 5);
10
    end if;
11
  end process modulo27;

Die Fehlermeldung dazu:
1
line 60: unsupported Clock statement.
Aussagekräftig ist das nicht. Was bitte stört ihn daran? Und warum sagt 
er es nicht?
Nagut. Durch's Ausschlussverfahren kann ich sagen, es stört wohl, dass 
ich zweimal auf rising edge prüfe. Denn einzeln funktionieren die 
Statements.
Aber dumm ist das schon. Die Funktionen geben doch nur einen boolschen 
Wert zurück, den man behandeln kann, wie jeden anderen auch.
Und wie sonst soll ich auf zwei Takte prüfen? Ich muss ja sonst zwei 
Prozesse machen mit redundantem Inhalt. Warum zwingt mich VHDL zu solch 
einem schlechten Programmierstil?

Ich weiß dass Du gesagt hattest, ich solle nur einen Takt nehmen.
Aber aus der Praxis und hier aus praktischen Gründen nimmt man für Tests 
einen separaten Eingang. Ich meine, wie sonst soll ich den Teiler 
umgehen?
Ich habe keine Lust bei einer Simulation 50 Millionen Iterationen 
abwarten zu müssen, bis eine Sekunde simuliert wurde und das ganze 30 
mal, bis einmal der ganze Spaß durchlaufen wurde.
Die Simulation würde auf meinem Atom (was anderes habe ich im Moment 
einfach nicht) einen Tag dauern.

Gruß
Fabian

von Duke Scarring (Gast)


Lesenswert?

Fabian Hoemcke schrieb:
> sondern auch auf die fallende Flanke.
Falsch. Bisher reagierst Du in Deinem module-Counter auf gar keine 
Flanke.

Fabian Hoemcke schrieb:
> Kommst Du mir jetzt wirklich mit Hello World???
http://de.wikipedia.org/wiki/Dunning-Kruger-Effekt

Duke

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

ABER! Und das muss man auch mal sagen, es funktioniert jetzt.
War ja auch dumm von mir, nicht auf rising edges zu prüfen. So ist der 
Prozess sicher ständig mit einem affen Tempo durchlaufen wurden und die 
LEDs hatten noch nicht mal Zeit zum leuchten gehabt. Zu mindest glaube 
ich, dass das der Effekt war.
Aber mal ehrlich, wie bitte hätte ich von den oben genannten 
Fehlermeldungen (Warnings) auf diesen Fehler schließen sollen?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Fabian Hoemcke schrieb:
> Das sehe ich anders. In Prozessen Variablen und in der Architecture
> Signale.
Du hast den verlinkten Beitrag nicht wirklich gelesen und verstanden, 
oder?

Ich für meine Wenigkeit brauche und verwende Variablen nur in sehr 
ausgesuchten Situationen. Ich frage mich, warum du sie öfter 
brauchst...

> Signale haben auch nicht die arithmetischen Eigenschaften wie Variablen.
JEDE Rechenoperation, die du auf eine Variable anwenden kannst, kannst 
du ABSOLUT OHNE Einschränkung auf Signale anwenden.
Allerdings ist das sequentielle Verhalten von Signalen und Variablen 
in Prozessen anders. Letztendlich muß aber alles auf Hardware abgebildet 
werden können. Schon deshalb können sich Variable und Signale nicht so 
sehr unterscheiden.

> Kommst Du mir jetzt wirklich mit Hello World???
Offenbar ist das nötig, denn dann erübrigt sich die Frage:
> Wie bitte soll ich denn sonst hochzählen?


>> Alles, was irgendwie irgendwas speichert (z.B. ein Zähler einen
>> Zählerstand), muss in Flipflops abgebildet werden. Ein Flipflop hat
>> einen Takt.
> Ein RSFF hat zum Beispiel keinen Takt.
Zeig mir in deinem FPGA ein RS-Flipflop. Und wenn du das getan hast, 
dann sag mir, warum man keine asynchronen Flipflops verwenden soll. 
Also quasi, warum die Timinganalyse mit solchen Konstrukten Probleme 
hat...

> Stammt wohl noch aus der Zeit als VHDL eine reine Simulationsprache war.
Das war VHDL eigentlich nie. Schon der Name sagt was anderes aus: 
Description Language, Beschreibungssprache. Nicht wie Verilog, wo 
Verifizieren ein Namensbestandteil ist...

Nachtrag:
Fabian Hoemcke schrieb:
> ABER! Und das muss man auch mal sagen, es funktioniert jetzt.
Glückwunsch. Nur: du weißt nicht warum....

Fabian Hoemcke schrieb:
> Die Fehlermeldung dazu:line 60: unsupported Clock statement.
> Aussagekräftig ist das nicht. Was bitte stört ihn daran?
> Und warum sagt er es nicht?
Er sagt, dass er so eine Komponente nicht zur Verfügung hat. Klar: es 
gibt auch keine Flipflops mit 2 Takteingängen... :-o

Fabian Hoemcke schrieb:
> Das einzige was ich falsch gemacht habe ist, dass ich nicht auf
> rising-edge reagiere, sondern auch auf die fallende Flanke.
LOL...  :-D
Der war echt gut. Sieh dir mal das Hello-World-Beispiel genauer an...

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Duke Scarring schrieb:
> Fabian Hoemcke schrieb:
>> sondern auch auf die fallende Flanke.
> Falsch. Bisher reagierst Du in Deinem module-Counter auf gar keine
> Flanke.

Danke. Ist mir dann auch aufgefallen. Hast aber mit deinem Post 
verhindert, dass ich meinen noch bearbeiten konnte. ^^

Naja, Egal! So habe ich es angefügt.



>
> Fabian Hoemcke schrieb:
>> Kommst Du mir jetzt wirklich mit Hello World???
> http://de.wikipedia.org/wiki/Dunning-Kruger-Effekt
>
> Duke

Ich glaube, Du verkennst hier die Situation.
Ich kann nur auf das Wissen (meinetwegen auf das falsche Wissen) zurück 
greifen, dass ich habe. Da ich von der eigenen Fehlbarkeit ausgehe, 
stelle ich ja meine Vermutungen, Annahmen und Schlussfolgerungen zur 
Diskussion.
Wie etwa die Annahme, der Prozess würde nur bei Änderungen der Signale 
in der Sensitivity-List durchlaufen.
Oder anders gefragt, wo bitte habe ich die Leistungen anderer 
unterschätzt?

Gruß
Fabian

von Uwe (Gast)


Lesenswert?

Man kann Programmiersprachen und "Hardwaresynthesesprachen" nicht 
miteinander Vergleichen. Du scheinst VHDL als Programmiersprache zu 
betrachten. Das sieht man an der art wie du Versuchst die Probleme zu 
lösen.
Du benötigst jedoch Digitaltechnik Kenntnisse FlipFlops, Logikgatter, 
Zustandsautomaten, Addierer, Multiplexer, Demultiplexer usw. was sind 
Setup und Hold Times usw. (halt die komplette Digitaltechnik bzw. 
Elektronik ). Ansonsten wird das nichts. Guck dir halt mal Datenblätter 
von alten CPUs, RAMS, SDRAMS an. Besonders die Timing Diagramme und 
versuche diese zu verstehen und bastel doch mal im Kopf (bzw. Papier) so 
ne CPU an nen SRAM mit Adresdecoder und allem.

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
Noch kein Account? Hier anmelden.