Hi Jungs!
Hab mir in der Sommeraktion das FPGA Board vom Elektor ergattert. War
gar nicht so teuer und konnte endlich wieder mal daheim was
FPGA-mässiges zusammenschustern, nach 2 Jahren Pause.
Da ich schon mehrere Jahre Erfahrung bei der Embedded und FGPA
Entwicklung habe, dachte ich mir das geht ruck-zuck, aber naja, das war
also doch nicht so einfach. Hab schnell von Anfang an die Artikel
gelesen, und brav alles so gemacht wie darin beschrieben war.
Und jetzt kommts. Z.B. die Pinbeschriftung auf dem Board ist total
irreführend, und stimmt überhaupt nicht mit dem überein, was man im UCF
angeben muß. Pin P28 auf dem Board ist z.B. P95 am Chip, und folglich
auch für das UCF.
Ich hab mal im Anhang die richtigen Pin P-Nummern dazugeschrieben, die
laut Schematik des Board als Resultat entstehen.
Ich wollte das 7-Segment BCD Zählerbeispiel ausführen, und da hatte ich
brav alles schön mit dem Schematic Editor fertig gezeichnet.
Hatte ein paar 7 Segment Displays noch aus was altem ausgeschlachtet,
und versucht zu benutzen, stellt sich raus, die sind Common Anode. Naja.
Passt schon. Schnell Inverter zu den 7-Segment-Dekodern geklatscht, und
eigene UCF erstellt.
Belegung der Segmente:
1 | a
|
2 | f b
|
3 | g
|
4 | e c
|
5 | d
|
6 | p
|
Pins am 7-segment:
Relevanter Teil im UCF:
1 | NET "Display2_D" LOC = P24;
|
2 | NET "Display2_E" LOC = P23;
|
3 | NET "Display2_A" LOC = P22;
|
4 | NET "Display2_B" LOC = P18;
|
5 | NET "Display2_F" LOC = P17;
|
6 | NET "Display2_G" LOC = P16;
|
7 | NET "Display2_C" LOC = P15;
|
8 | NET "Display1_D" LOC = P12;
|
9 | NET "Display1_E" LOC = P11;
|
10 | NET "Display1_A" LOC = P10;
|
11 | NET "Display1_B" LOC = P9;
|
12 | NET "Display1_F" LOC = P5;
|
13 | NET "Display1_G" LOC = P4;
|
14 | NET "Display1_C" LOC = P3;
|
IO-standards sind natürlich alle
IOSTANDARD = LVCMOS33;
Ich hab lange gebraucht, bis ich die obigen zuweisungen festgestellt
habe und die Zähleranzeige jetzt funktioniert.
Anbei hab ich ein Foto meines Aufbaus gemacht.
Hier meine Frage:
Warum geht das nur so? Warum musste ich Segmente E mit F und G mit D
vertauschen? Das ist doch total unlogisch!
Logisch wäre für meinen Aufbau gewesen:
1 | NET "Display2_G" LOC = P24;
|
2 | NET "Display2_F" LOC = P23;
|
3 | NET "Display2_A" LOC = P22;
|
4 | NET "Display2_B" LOC = P18;
|
5 | NET "Display2_E" LOC = P17;
|
6 | NET "Display2_D" LOC = P16;
|
7 | NET "Display2_C" LOC = P15;
|
8 | NET "Display1_G" LOC = P12;
|
9 | NET "Display1_F" LOC = P11;
|
10 | NET "Display1_A" LOC = P10;
|
11 | NET "Display1_B" LOC = P9;
|
12 | NET "Display1_E" LOC = P5;
|
13 | NET "Display1_D" LOC = P4;
|
14 | NET "Display1_C" LOC = P3;
|
Also warum ???