Forum: FPGA, VHDL & Co. Programmieren des LTC2287 Dual 10-Bit ADCs


von Beruk (manitou)


Angehängte Dateien:

Lesenswert?

Hallo an alle!

ich hoffe von ganzem Herzen, dass ich hier Hilfe finde. Denn was ich 
bisher auf Ihrer Seite gelesen habe, zeigt, dass Sie viel Erfahrung mit 
FPGAs haben. Mein Problem ist wie folgt:
Ich muss in der Programmiersprache VHDL einen ADC mit zwei Eingängen und 
einem Clock programmieren. Der Ausgang des ADCs besteht aus 20 Ausgängen 
und einem Multiplexer. Bedenkt man, dass ich nicht sehr erfahren bin. 
Ich hätte gerne Ihre Hilfe, um zu verstehen, wie dieser ADC funktioniert 
und wie ich ihn am besten programmieren kann. Ich habe nämlich vor, eine 
FSM zu verwenden, um den ADC zu steuern und die FIFO BRAM-Konfiguration 
zu verwenden.

Beste Grüße

von Gustl B. (gustl_b)


Lesenswert?

Beruk schrieb:
> Ich muss in der Programmiersprache VHDL einen ADC mit zwei Eingängen und
> einem Clock programmieren.

Den ADC gibt es schon, du musst nur die Daten entgegennehmen. Und das 
ist recht einfach weil das ein paralleler Ausgang ist. Du kannst also 
wie im Datenblatt Seite 14 die Daten mit einer Taktflanke übernehmen. 
Wenn du die Daten auf einen Bus multiplext, dann brauchst du ein IDDR um 
die Daten mit beiden Flanken zu erfassen.

Beruk schrieb:
> Ich habe nämlich vor, eine FSM zu verwenden, um den ADC zu steuern

Kann man machen, aber viel gibt es da nicht zu steuern. Spannung 
anlegen, Takt erzeugen, einmal die Pins so beschalten wie man es haben 
will und dann so lassen.

Beruk schrieb:
> die FIFO BRAM-Konfiguration zu verwenden.

Das ist dann im FPGA. Das macht auch Sinn. Wir wissen nicht wo die Daten 
hin sollen oder was damit passiert. FSM und FIFO können also sinnvoll 
sein oder auch nicht.

Was hast du denn schon geschrieben? So einen FPGA kann man auch 
wunderbar simulieren und so ganz ohne Hardware sein VHDL schreiben.

von Beruk (manitou)


Lesenswert?

Hallo Gusti_b,
ich danke dir für deine sehr schöne Rückmeldung, also geschrieben habe 
ich noch nicht, denn ich bin bis jetzt immer am Denken wie das ganze 
funktionieren wird. Die Daten aus dem ADC werden im einem BRAM im FPGA 
erstmal gelagert. Deswegen hatte oben von FSM und FIFO BRAM gesprochen.

von Rick D. (rickdangerus)


Lesenswert?

Beruk schrieb:
> Die Daten aus dem ADC werden im einem BRAM im FPGA
> erstmal gelagert.
Dein ADC kann die Daten mit bis zu 40 MS/s liefern. Bei zwei Kanälen und 
10 Bit pro Kanal kommen in einer Sekunde 80 Millionen Bit zusammen.
Wieviele Bit hat dein BRAM?

Ich habe öfters mal einen ADC am FPGA. Um die vernünftig zu simulieren, 
schreibe ich mir in VHDL ein Modell des ADCs. Erst danach kommt das FPGA 
Design.
Auch hier macht es dir der ADC mit seinem Parallel-Interface relativ 
einfach.

von Gustl B. (gustl_b)


Lesenswert?

Rick D. schrieb:
> Wieviele Bit hat dein BRAM?

Ist doch egal, das ist sein Konzept. FIFOs sind nur dazu da etwas zu 
entzerren. Die Daten müssen eben im zeitlichen Mittel schnell genug auf 
der anderen Seite aus dem FIFO gelesen werden.

von J. S. (engineer) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Ist doch egal, das ist sein Konzept. FIFOs sind nur dazu da etwas zu
> entzerren.

Das macht aber nur Sinn, wenn man die Daten dann blockweise verarbeiten 
möchte, wie z.B. bei manchen AXI-Video-Cores. Und sie machen Sinn, wenn 
man die Datenrate hochpuschen möchte, z.B. indem man 2 Datenworte 
gleichzeitíg verarbeitet und das BRAM mit 2:1 betreibt -> 80 MHz. Hier 
geht es sogar mit 2 BRAMs, weil 2 Kanäle. Allerdings ...

Rick D. schrieb:
> Wieviele Bit hat dein BRAM?
ist das Dingens rasch voll. Und zum parallelen Verarbeiten braucht man 
nue 2x2 Registerworte.

Die Frage ist: Wieviel DACs kommen dran?

von Gustl B. (gustl_b)


Lesenswert?

J. S. schrieb:
> blockweise verarbeiten möchte

Muss nicht sein.
Kann auch eine krasse Reduktion der Datenrate bedeuten wenn einen nur 
seltene Ereignisse interessieren oder man wie bei einem Oszi nur um 
einen Trigger herum speichern will. Da nimmt man zwei FIFOs, schaufelt 
vom ersten in den zweiten und dazwischen hängt man die Triggerlogik.

von Beruk (manitou)


Lesenswert?

Hallo @gustl_b,

ich danke Dir für die Rückmeldung. Ich habe mittlerweile einen Kode 
geschrieben. Aber ich weiß nicht ob der okay ist.
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
use IEEE.STD_LOGIC_UNSIGNED.ALL;
5
6
entity adc_interface is port
7
(
8
    CLK              : in std_logic;
9
    reset            : in std_logic;
10
    enable_in        : in std_logic;
11
    Real_in_from_ADC : in std_logic_vector(9 downto 0);--receiver side i/p
12
    imag_in_from_ADC : in std_logic_vector(9 downto 0); --receiver side i/p
13
14
    Dout1            : out std_logic_vector(9 downto 0);--receiver side 0/p
15
    Dout2            : out std_logic_vector(9 downto 0);--receiver side o/p
16
17
    CLK_out          : out std_logic ;
18
-- ADC_CLK2 : out std_logic;
19
    enable_out       : out std_logic
20
);
21
end entity;
22
23
architecture behavioral of adc_interface is
24
25
begin
26
27
process(CLK,reset)
28
    begin
29
        if  reset = '1' then
30
            enable_out  <= '0';
31
            Dout1       <= (others=>'0');
32
            Dout2       <=  (others=>'0');
33
34
        elsif rising_edge (CLK) then
35
36
            Dout1       <= Real_in_from_ADC ;
37
            Dout2       <= imag_in_from_ADC;
38
            enable_out  <= enable_in;
39
40
        end if;
41
42
end process;
43
44
CLK_out <= CLK ;
45
-- ADC_CLK2<=CLK_SAMP;
46
47
end behavioral;
[Mod: bitte die vhdl-Tags das nächste Mal selber einfügen]

: Bearbeitet durch Moderator
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite



Lesenswert?

Beruk schrieb:
> Ich habe mittlerweile einen Kode geschrieben.
Der Code ist supersimpel und beschreibt eigentlich nur 21 Fipflops. Das 
wird der RTL-Schaltplan deutlich darstellen.

> Aber ich weiß nicht ob der okay ist.
Der Code ist ok. Wenn "es" damit nicht funktioniert, dann liegt das 
Problem woanders.

Beruk schrieb:
> Ich hätte gerne Ihre Hilfe, um zu verstehen, wie dieser ADC
> funktioniert und wie ich ihn am besten programmieren kann.
Wie der ADC funktioniert, ist im Datenblatt beschreiben. Und das 
Interface zum ADC ist ganz einfach, wenn kein Multiplexer verwendet 
wird: mit jeder steigender Taktflanke wird der 6 Takte zuvor gesampelte 
Analogwert in digitaler Form ausgegeben.

Und weil das bis hinunter zu 1 MHz Taktfrequenz zuverlässig 
funktioniert, kannst du ja einfach mal die ersten Tests mit solch 
niedrigen Taktfrequenzen machen. Und dich erst später mit hohen 
Taktfrequenzen, Signallaufzeiten und Timing Constraints beschäftigen.

von Beruk (manitou)


Angehängte Dateien:

Lesenswert?

Hallo zusammen, ich hätte gerne Ihre Hilfe bezüglich der xdc-Datei
für die Handhabung des ADCs mit einem Eingang. Zu Testzwecken teste ich 
zunächst nur einen Eingang, dann werde ich beide testen. Beim Ausführen 
von Generate Bitstream erhalte ich die folgende Fehlermeldung.

Error: [DRC UCIO-1] Unconstrained Logical Port: 12 out of 22 logical

ports have no user assigned specific location constraint (LOC). This may

cause I/O contention or incompatibility with the board power or

connectivity affecting performance, signal integrity or in extreme cases

cause damage to the device or the components to which it is connected.

To correct this violation, specify all pin locations. This design will

fail to generate a bitstream unless all logical ports have a user

specified site LOC constraint defined. To allow bitstream creation with

unspecified pin locations (not recommended), use this command:

set_property SEVERITY {Warning} [get_drc_checks UCIO-1]. NOTE: When

using the Vivado Runs infrastructure (e.g. launch_runs Tcl command), add

this command to a .tcl file and add that file as a pre-hook for

write_bitstream step for the implementation run. Problem ports:

Dout[9:0], CLK, and CLK_out.

von Gustl B. (-gb-)


Lesenswert?

Ist das dein ganzes Projekt? Wenn ja: Es fehlen die ganzen Constraints 
für die Ports wie sie in der Fehlermeldung stehen:

Beruk schrieb:
> Problem ports:
> Dout[9:0], CLK, and CLK_out.

: Bearbeitet durch User
Beitrag #7583019 wurde von einem Moderator gelöscht.
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.