Spieleaufbewahrung

Inzwischen ist meine Brettspiele-Sammlung hier vor Ort auf ein gar nicht mal so kleines Maß gewachsen (lies: ein Billy-Fach reicht nicht mehr aus). Nun bin ja als Perfektionist bekannt, und das hat sich auch auf meine Spiele-Sammlung ausgeweitet: Früher (sic!) war das mit der Organisation des Spiel-Materials einfach: In der Box war ein Plastik-Einsatz, in dem jedes Teil seinen mehr oder weniger festen Platz hatte. Heute sieht das anders aus: Üblicherweise ist die Box randvoll mit Material, was in Plastiktüten geliefert wird. Meistens liegen gleich noch ein paar leere Tüten bei, damit man ein bisschen sortieren kann. Gut, vielleicht liegt das nicht nur daran, dass Plastikeinsätze teurer sind, sondern auch daran, dass ich inzwischen komplexere Spiele mit mehr Material bevorzuge…

Als Perfektionist gefällt mir diese Art der Aufbewahrung aber gar nicht: Alles fliegt nach dem Auspacken mehr oder weniger lose auf dem Tisch rum, und beim Zusammenpacken landet alles wahllos in einer Tüte die viel zu klein dafür ist. Zumindest, wenn nicht ich zusammenpacke 🙂 Dafür muss eine Lösung her! Hier schon mal ein kleiner Vorgriff, wie es jetzt aussieht:

Weiterlesen

Masterarbeit: Done

So, nach meiner Bachelorarbeit ist nun auch meine Masterarbeit abgehakt. Ich muss gestehen, ich bin ziemlich froh, das ich die letzten 6 Monate hinter mir habe, das ganze war doch eine ziemliche anstrenge Sache mit vielen neuen Erfahrungen für mich.

Was habe ich denn überhaupt gemacht? Meine Arbeit trägt den schönen Titel „Konzeptionierung und Implementierung einer hybriden MAC-Layer-Architektur für Paket-basierte Powerline Kommunikation auf einem FPGA“ 🙂 Powerline-Kommunikation ist dem einen oder anderen vermutlich ein Begriff, auch unter dem Begriff „dLan“: Weiterleitung einer LAN-Verbindung über das bestehende Stromnetz. Der passende Standard dazu heißt „HomePlug“ und sieht eine Aufteilung von Geräten in eine MAC- und eine PHY-Schicht vor, ähnlich wie im OSI-Modell. Ich habe jetzt in meiner Arbeit einen MAC-Layer auf einem FPGA implementiert. Der MAC-Layer macht vor allem so Sachen wie das Erzeugen von Headern und Prüfsummen, Segmentierung von zu langen Frames und Ackknowlegdments. Nicht ganz einfach, aber eine interessante Sache 🙂

Weiterlesen

RPi im Radio: Hardware

Ich bin der glückliche Besitzer einer Sharp XL-560 Mini-Stereoanlage, die ich vor einiger Zeit relativ günstig über ebay-Kleinanzeigen bekommen habe. Ein schönes Gerät, besonders die Tatsache das es einen Drehknopf hat, mit dem man die Lautstärke einstellen kann ist super. Mein Radio vorher hatte nur zwei Knöpfe, das war ein bisschen nervig, wenn es plötzlich zu laut war 🙂

Das Gerät ist schon aus einer bisschen älteren Generation, und hat die für die Zeit übliche Kombination: (UKW-)Radio, CD, Kassette, AUX-Eingang. Nun, irgendwie war meine Anwendung für das Kassettedeck ein bisschen limitiert (ich weiß bis heute nicht, ob es überhaupt funktioniert…). Daher nun also meine Idee: Modernisieren wir das Ding ein bisschen, und ersetzen das Kassettendeck durch einen Rasperry Pi Zero, mit Internetradio und Airplay. Gesagt getan 🙂 In diesem Post schreibe ich ein bisschen war zum Hardware-Umbau, zur Software kommt später noch mal was.

Eine weitere schöne Eigenschaft dieses Radios ist, das man im Internet ein Service-Manual findet, komplett mit Demontageintruktionen, Fehlersuchhilfe, Blockschaltbild und vollständigem Schaltplan (!) inklusive Bestückungsplan (!!). Ganz ehrlich, ohne dieses Dokument hätte ich das auch nicht hinbekommen… Zeit, mal wieder den Schreibtisch ins Chaos zu stürzen 🙂

Weiterlesen

Softcore CPU NEO430 mit GHDL simulieren

Für meine Masterarbeit beschäftige ich mich gerade mit Softcore-Prozessoren auf FPGAs. Dabei kommt für meine Arbeit der NEO430 zum Einsatz, ein sehr kleiner aber feiner Prozessor der an meinem Institut entwickelt wurde (von Stephan Nolting). Da ich aktuell noch nicht in einem Stadium bin, wo ich den Prozessor wirklich auf einem FPGA implementiere (auch wenn das der nächste Schritt ist) arbeite ich aktuell sehr viel mit Simulation, und da vor allem mit ModelSim. Ein bisschen was dazu hatte ich ja hier im Blog schon mal da zu geschrieben.

Nun hatte ich heute Abend die Idee, man könnte ja mal einen anderen Simulator ausprobieren. Mir hat es dabei GHDL angetan, vor allem, da er OpenSource ist, aber auch weil er einen interessanten Ansatz verfolgt: Der VHDL-Code wird mit einem umgebauten Compiler (GCC oder LLVM) direkt in Maschinencode kompiliert, und dieser Code dann ausgeführt. Dadurch soll der Simulator extrem schnell sein. Auf Windows ist das ganze etwas eingeschränkt, hier wird ein interner Codegenerator verwendet. Weiterlesen

Netze in Eagle in Schaltplan und Board verbinden

Zwei kleine Tipps zum Platinenentwurf mit EAGLE, die zwar irgendwie das gleiche Thema haben, eigentlich aber nichts miteinander zu haben 🙂

Signale im Schaltplan kreuzungsfrei verbinden

Stellen wir uns vor, wir haben die unglaubliche Schaltung aus vier Widerständen, die auf genau diese Weise verbunden werden müssen:

Mal abgesehen davon, dass man das Problem hier natürlich leicht durch Umpositionieren der  Widerstände lösen könnte, ist das doch ein häufiges Problem: Leitungen kreuzen sich nun mal. Das dabei ein Hakenkreuz entsteht ist nur eines der Probleme… Weiterlesen

Schöne Debugausgaben mit VHDL

Aktuell arbeite ich fleißig an meiner Masterabeit (einer der Gründe, warum es hier auf dem Blog so still ist…), und entwickele dafür auch ein paar Sachen in VHDL (ich entwickele also Hardware 🙂 ). Am Ende soll das ganze natürlich auf einem FPGA laufen (vielleicht sogar mal in einem echtem Chip, einem ASIC!), aber aktuell wird das ganze nur simuliert. Das ist zwar ziemlich langsam (aktuell etwa um den Faktor 1000), aber dafür kann man sich jedes Signal in seiner Schaltung ganz genau ansehen und bei Bedarf auch Debug-Ausgaben tätigen. Besonders das hat sich aktuell als sehr hilfreich dargestellt.

VHDL unterstützt das im Prinzip mit assert und report, allerdings finde ich die Ausgaben recht unübersichtlich, vor allem weil sie über mehr als eine Zeile gehen. Zudem ist alles einfarbig, so dass man schnell die Übersicht verliert. Ich habe mir als etwas überlegt, was etwas schöner aussieht (siehe Screenshot)

Weiterlesen

Kombinatorik zu Ostern

Frohe Ostern!

Am Ostersamstag waren in in der Familie fleißig und haben Eier gefärbt. Meine Aufgabe war es danach, die Eier auf unsere zwei Osternester „hübsch“ zu verteilen. Nach einer kleinen Diskussion darüber, wie man das am besten macht, kam dann die Frage auf, wie viele Möglichkeiten es dazu eigentlich gibt.

Wir färben unsere Eier immer in fünf verschiedenen Farben (zumindest wenn ich nicht wieder die Farbtabletten mit blau und grün vertausche und wir daher zwei mal blaugrün haben 🙂 ) und haben dieses Jahr zwanzig Eier gefärbt. Es gibt also vier Eier in jeder Farbe. Wir haben zwei Osternester, in jedes kommen also 10 Eier. (Das Bild oben ist nur Demo 🙂 )

Wie viele Möglichkeiten gibt es also 20 Eier, von denen jeweils 4 identisch sind, in 2 Nestern à 10 Stück anzuordnen? Dabei zählen natürlich keine Möglichkeiten, bei denen zwei gleichfarbige Eier vertausch wurden, und auch keine, die man durch Drehen der Nestern ausgleichen kann. (Die Eier liegen in jedem Nest in einem Kreis). Ein klassisches Problem der Kombinatorik also 🙂

Weiterlesen

Null coalescing in PHP

Heute habe ein neuen Feature von PHP kennengelernt, das wirklich praktisch ist: Null coalesing mit dem tenären Operator. (Ok, das klingt für ungeübte Ohren vielleicht ein bisschen seltsam :))

Null coalescing ist ein Feature dass viele Programmiersprachen haben, meistens mit Hilfe des Operators „??“ (Zwei Fragezeichen). Der Ausdruck gibt den linken Wert zurück, wenn dieser nicht null ist, ansonsten den rechten. Also z.B. so:


action = getAction() ?? 'save';

Weiterlesen

Einfache Sättigungsarithmetik in VHDL

Für ein Projekt an der Uni habe ich mit zwei Kommilitonen ein Malprogram („FPGArt“) auf einem FPGA implementiert. Dabei wird eine Maus per PS/2-Schnittstelle angebunden und das Bild schließlich per VGA ausgegeben. Zu dem Projekt selber später vielleicht mehr, hier jetzt nur ein kleines VHDL-Snippet das man vielleicht man gebrauchen kann.

In dem Projekt wird regelmäßig die relative Bewegung der Maus abgefragt und zu dem alten Wert addiert. Natürlich hat das Bild eine begrenze Größe und der Mauszeiger muss in diesen Grenzen von 800×600 gehalten werden. Es wird also eine sog. Sättigungsarithmetik benötigt: Sollte das Ergebnis der Addition größer als 800 (bzw. 600) sein, oder kleiner als 0 wird es auf den Grenzwert gesetzt. Das ganze ist gar nicht so einfach in Hardware zu implementieren (zumindest ist uns nichts intelligentes eingefallen…).

In jedem Fall muss es ein Zwischenergebnis geben das ausreichend groß ist, um Überläufe überhaupt zu erkennen. Die Maus kann pro Intervall Maximal um 256 bewegt werden, entsprechend muss als ein Wert von 800+256 = 1056 gespeichert werden können. Mit 11 bit kommt man auf 2048, das reicht. Hiermit kann man auch Unterläufe erkennen: 0-256 = -256 was dann 1792 entspricht. Dieser Bereich überlappt auch nicht mit den 1056 nach oben. Es ist also immer einwandfrei erkennbar, dass ein Über/Unterlauf stattgefunden hat.

Weiterlesen