Forum: FPGA, VHDL & Co. Nexys 4 (Artix-7) - XADC Datenbusbreite


von Torben S. (torben_s)


Lesenswert?

Guten Morgen,

ich habe ein Problem bei der Erstellung eines Interfaces für den XADC 
des Artix-7 auf dem Nexys4-Board von Digilent in VHDL.

Um auf die Register des ADC zugreifen zu können, ist ein Dynamic 
Reconfiguration Port (DRP) vorhanden. Laut der Anleitung zum ADC (ug480 
- 
http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCEQFjAA&url=http%3A%2F%2Fwww.xilinx.com%2Fsupport%2Fdocumentation%2Fuser_guides%2Fug480_7Series_XADC.pdf&ei=ajOZVOq4M8vHPf6YgPAJ&usg=AFQjCNFjpx5MGPn2xDNXhzJH7JXF70AaCQ&sig2=VEirOQPo-LdD2fozOiXn5g&bvm=bv.82001339,d.ZWU&cad=rja) 
werden die Register über eine 8-Bit-Adresse adressiert, allerdings ist 
der Data_Addr Port am DRP nur 7-Bit breit...

Im Programmierbeispiel in der Anleitung (in Verilog) wird z.B. ein Wert 
so zugewiesen:
1
 daddr = 7'h40;

1) Wieso kann ich einen 8Bit-Wert (h40) mit 7Bit übergeben? Wird das MSB 
einfach abgeschnitten dann?

2) Wenn abgeschnitten, wie können dann die Register unterschieden 
werden, da entstehen doch dann Überlappungen...?

3) Wie kann ich das in VHDL umsetzen? Mein Code
1
 data_addr <= X"40";
 wird verständlicherweise angeprangert...

Ich hoffe man verstehe was ich meine und mir kann jemand weiterhelfen :)

Dies ist mein erster Versuch mit einem FPGA etwas zu programmieren

Danke!

von Antti L. (trioflex)


Lesenswert?

besser: XADC wizard, und auswählen was du willst. und den AXI stream 
freishalten, alle ausgelesenen werden kommen denn da zu dir ohne 
kopfschmerzen.

von Torben S. (torben_s)


Lesenswert?

Antti Lukats schrieb:
> besser: XADC wizard, und auswählen was du willst. und den AXI stream
> freishalten, alle ausgelesenen werden kommen denn da zu dir ohne
> kopfschmerzen.

Den Wizard habe ich beim ersten Versuch benutzt, um einfach mal die 
On-Chip-Temperature auszulesen. Das hat auch funktioniert. Mit dem 
Wizard erzeuge ich aber nur die eine Instanz vom ADC mit der gewünschten 
Konfiguration. Zum Auslesen der Werte muss ich ja trotzdem etwas 
drumherum haben.

Wenn ich das richtig verstehe, ist der AXI-Stream (bzw. AXI4-Lite) ein 
Bus, den ich nutzen kann, um den XADC anzusprechen?

Ich wollte es eig zur Übung mal selbst ansteuern, prinzipiell denke ich 
sollte mein Prozess auch funktionieren, aber ich weiß nicht, wie ich die 
8-Bit-Register mit 7-Bit breiten Adressen ansprechen soll...

von Antti L. (trioflex)


Lesenswert?

anders rum:

AXI Stream !

AXI wizard generated axi_stream PUSHES daten zu dir, wenn immer du 
bereit bist.

seehr einfach!

von Torben S. (torben_s)


Lesenswert?

Antti Lukats schrieb:
> anders rum:
>
> AXI Stream !
>
> AXI wizard generated axi_stream PUSHES daten zu dir, wenn immer du
> bereit bist.
>
> seehr einfach!

Du meinst dies hier: 
http://www.xilinx.com/products/intellectual-property/axi_xadc.html#overview 
?

Das scheint mir ein guter Tipp zu sein! Ich probiere das gleich mal aus 
:)

EDIT: Ist dies auch mit ISE 14.x möglich?

Trotzdem würde ich mich noch zu einer Antwort zu meiner eigentlichen 
Frage freuen, auch damit ich es selbst verstehe ;)

von Torben S. (torben_s)


Lesenswert?

Kann es sein, dass das MSB Bit abgeschnitten wird?

Ich habe nochmal überlegt und festgestellt, dass der ADC 128 Register 
besitzt, wodurch es also keine Überschneidung dann geben sollte.

von VHDL hotline (Gast)


Lesenswert?

Kannst du mal die Seite im verlinkten ug schreiben, wo du die 
8-Bit-Adresse gefunden hast? Ich hab nur kurz reingeschaut, auf S. 35 
steht was von 128 Registern. Dafür reichen ja 7 Bit.

von Antti L. (trioflex)


Lesenswert?

JA

Vivado IP Integrator verbindet buses immer die MSB die nicht da wirft 
der weg.

von Torben S. (torben_s)


Lesenswert?

VHDL hotline schrieb im Beitrag #3936163:
> Kannst du mal die Seite im verlinkten ug schreiben, wo du die
> 8-Bit-Adresse gefunden hast? Ich hab nur kurz reingeschaut, auf S. 35
> steht was von 128 Registern. Dafür reichen ja 7 Bit.

Auf Seite 36 sieht man die 128 Register und den DRP Port mit dem 7Bit 
breiten DAADR Pin

EDIT: Ab Seite 84 ist das Beispiel in Verilog

von VHDL hotline (Gast)


Lesenswert?

Ich finde auf den genannten Seiten nix mit 8 Bit.

7h40 entspricht binär 100 0000 (7b1000000) und ist ein 7-Bit-Wert. Evtl. 
liegt hier das Missverständnis in der Verilog->VHDL "Übersetzung"? Ab 
VHDL 2008 kannst du für einen 7-Bit HEX-Wert sowas schreiben wie 7X"40", 
vorher geht das bei HEX-Angaben immer nur als Vielfaches von 4 Bit (ohne 
Längenangabe vorm X, 7 Bit konnten also nicht hexadezimal zugewiesen 
werden).

von Torben S. (torben_s)


Lesenswert?

VHDL hotline schrieb im Beitrag #3936236:
> Ich finde auf den genannten Seiten nix mit 8 Bit.
>
> 7h40 entspricht binär 100 0000 (7b1000000) und ist ein 7-Bit-Wert. Evtl.
> liegt hier das Missverständnis in der Verilog->VHDL "Übersetzung"? Ab
> VHDL 2008 kannst du für einen 7-Bit HEX-Wert sowas schreiben wie 7X"40",
> vorher geht das bei HEX-Angaben immer nur als Vielfaches von 4 Bit (ohne
> Längenangabe vorm X, 7 Bit konnten also nicht hexadezimal zugewiesen
> werden).

Vielleicht stehe ich ja auf dem Schlauch, aber ein Hex-Wert sind doch 
immer 4-Bit oder nicht? Weil hxF = bx1111. Wenn ich also h40 habe, dann 
ist das doch binär 0100 0000 also wird etwas weggeworfen...

von VHDL hotline (Gast)


Lesenswert?

Prinzipiell schon. Ein Hexwert ist normalerweise ein Vielfaches von 4 
(Bit). Allerdings steht im verilog-Code explizit 7h40, was bedeutet, 
dass (die untersten) 7 Stellen des Hexwertes 40 verwendet werden. So 
etwas wie 7h80 gibt es also nicht (bzw. wird wahrscheinlich das MSB 
verworfen und es entspricht 7h00). Es handelt sich bei 7h40 also um eine 
vereinfachte Schreibweise, um ein 7-Bit-Signal hexadezimal zuzuweisen.
In VHDL gab es diese Schreibweise bis VHDL 2008 nicht, so dass die 
Aussage, "hexadezimal bezieht sich immer auf 4 Bit", dort zutrifft.

von Torben S. (torben_s)


Lesenswert?

VHDL hotline schrieb im Beitrag #3936284:
> Prinzipiell schon. Ein Hexwert ist normalerweise ein Vielfaches von 4
> (Bit). Allerdings steht im verilog-Code explizit 7h40, was bedeutet,
> dass (die untersten) 7 Stellen des Hexwertes 40 verwendet werden. So
> etwas wie 7h80 gibt es also nicht (bzw. wird wahrscheinlich das MSB
> verworfen und es entspricht 7h00). Es handelt sich bei 7h40 also um eine
> vereinfachte Schreibweise, um ein 7-Bit-Signal hexadezimal zuzuweisen.
> In VHDL gab es diese Schreibweise bis VHDL 2008 nicht, so dass die
> Aussage, "hexadezimal bezieht sich immer auf 4 Bit", dort zutrifft.

Danke!

Dann stimmt die Vermutung ja, dass das MSB weggeworfen wird. Das 
beantwortet meine Frage :)

von Christian R. (supachris)


Lesenswert?

Den Xadc kann man auch im DRP Modus betreiben, mit dem ChannelOut und 
dem EOC kann der alle konfigurierten Kanäle selbstständig auf den 
Ausgang bringen. Beispiel ist glaube im User Guide. Mit dem Sequenzer 
wird die Sache dann total simpel.

von Torben S. (torben_s)


Lesenswert?

Christian R. schrieb:
> Den Xadc kann man auch im DRP Modus betreiben, mit dem ChannelOut und
> dem EOC kann der alle konfigurierten Kanäle selbstständig auf den
> Ausgang bringen. Beispiel ist glaube im User Guide. Mit dem Sequenzer
> wird die Sache dann total simpel.

So betreibe ich ihn jetzt auch. Deswegen war ja die Initialfrage, 
inwiefern der DRP-DADDR-Pin angesprochen wird.

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.