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!
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...
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 ;)
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.
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.
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
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).
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...
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.
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 :)
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.
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.