Hallo,
meine ersten Schritte auf einem FPGA + Vivado.
Ziel des Projektes ist ein Roboterarm in der Art:
http://letsmakerobots.com/robot/project/micro-servo-robot
Mein persönliches Ziel, VHDL-2008 verstehen.
Meine Bitte an die Profis sind vor allem Tips wie es besser geht.
Codemäßig und Stilmäßig.
Ein PWM Signal habe ich schon mal generiert, das war nicht so schwer,
als nächstes kam dann das auslesen eines ADCs mittels i2c (PmodAD2 - 4
channel 12-bit A/D converter)
Den i2c habe ich hinbekommen, zumindest dass ich den ADC adressiere und
der mir dann jeweils nach Acks die Kanäle nacheinander ausgibt.
ich habe vier LEDs auf dem Board da versuche ich im Moment die ersten
4-Bits des 1.Kanals auf die LEDs zu legen um zu verstehen wie ich Daten
grundsätzlich abgreife. Funktioniert leider nicht wirklich.
Als Bild füge ich mal den Stand der Dinge als Schematics ein und den
Code als zip.
Zum programmieren nehme ich notepad++ das erleichtert mir die Arbeit
finde ich.
Im Moment sind pwm und i2c noch in zwei Projekten getrennt.
Hier ist auch mal mein PWM signal
top_modul
tjah warum machst du dir leben soo kompliziert ??
1) PS7 I2C auf EMIO
2) I2C als external bus
3) C code schreiben, prüfen das all OK
und DANACH weiter.
0 lines of VHDL nix zu prüfen nichts was nicht gehen kann.
nur C code..
na für VHDL brauchst du ja aber kein ZYNQ :)
Am besten ist leider SIMULATION, da brauchst du überhaupt keine
hardware. Ist aber langweilig, ich weiss. Aber für lernen ist simulation
gut. muss nur gut verstehen was ist synthisierbar, was nicht.
Du wirst nicht darum herumkommen, Deinen Entwurf zu simulieren und die
Funktion der einzelnen Module zu verifizieren.
Ausserdem solltest Du Dich mit VHDL-Coding-Guidelines vertraut machen.
Z.B. verwendest Du ein Konstrukt namens "positional association" in
Deinen Port Mappings - eine wunderbare Möglichkeit sich ins eigene Bein
zu schiessen (bei "named association" hilft Dir der Parser, fehlerhafte
Mappings zu finden - bei positional tappst Du einfach im Dunkeln).
Dann fällt mir auf, dass Dein Code keine FSMs beschreibt.
[vhdl]wait until rising_edge(Clk_48kHz);[/vdhl]
mag synthetisierbar sein, aber bist Du sicher welche Schaltung die
Synthese tatsächlich daraus macht.
Und du wirst die Arbeitsweise des ADCs verifizieren müssen:
- liegt tatsächlich die vorgesehene SCL Frequenz an?
- Wird ACK richtig erkannt?
- Werden die Bits an die richtige Position im Datenvektor übertragen
usw.
- Welche Datenwerte erhälst Du für Vdd bzw. GND am ADC Eingang?
BTW: Du hast die LEDs mit den LSBs Deines Datenwortes verbunden,
abhängig von der Wandlungsgeschwindigkeit dürfte das für das Flackern
veranwortlich sein.