Forum: FPGA, VHDL & Co. Bekomme DAC mit dem DE2-115 nicht zum laufen


von Gerald G. (gerald_g)


Angehängte Dateien:

Lesenswert?

Hallo,

ich wollte zum testen mit der an das DE2-115 angeschlossene Karte ADA 
HSMC ein Signal mit einem Generator erzeugen und einfach wieder am DAC 
ausgeben.
Dachte das ist ganz einfach.
Als das nicht geklappt hat, bin ich dazu übergangen einfach nur mit dem 
DAC ein Signal auszugeben. Hierfür habe ich folgenden Code geschrieben:
1
library IEEE;
2
use IEEE.std_logic_1164.ALL;
3
use IEEE.numeric_std.ALL;
4
5
--pin assignment
6
--ADC_OEA Location PIN_T25
7
--ADC_OEB Location PIN_T26
8
--CLOCK_50 Location PIN_Y2
9
--DAC_MODE Location PIN_H24
10
--DAC_WRTA Location PIN_H23
11
--DAC_WRTB Location PIN_M25
12
--adcA_outofrange Location Y28
13
--adcB_outofrange Location Y27
14
--PLL_OUT_ADC[0] Location PIN_G23
15
--PLL_OUT_ADC[1] Location PIN_G24
16
--PLL_OUT_DAC[0] Location PIN_V24
17
--PLL_OUT_DAC[1] Location PIN_V23
18
--RESET Location PIN_AB28
19
--PLL_IN_ADC Location PIN_J27
20
--PLL_IN_DAC Location PIN_J28
21
--XIN[0] Location PIN_T22
22
--XIN[1] Location PIN_T21
23
--XIN[2] Location PIN_R23
24
--XIN[3] Location PIN_R22
25
--XIN[4] Location PIN_R21
26
--XIN[5] Location PIN_P21
27
--XIN[6] Location PIN_P26
28
--XIN[7] Location PIN_P25
29
--XIN[8] Location PIN_N26
30
--XIN[9] Location PIN_N25
31
--XIN[10] Location PIN_L22
32
--XIN[11] Location PIN_L21
33
--XIN[12] Location PIN_U26
34
--XIN[13] Location PIN_U25
35
--XOUT[0] Location PIN_D27
36
--XOUT[1] Location PIN_D28
37
--XOUT[2] Location PIN_E27
38
--XOUT[3] Location PIN_E28
39
--XOUT[4] Location PIN_F27
40
--XOUT[5] Location PIN_F28
41
--XOUT[6] Location PIN_G27
42
--XOUT[7] Location PIN_G28
43
--XOUT[8] Location PIN_K27
44
--XOUT[9] Location PIN_K28
45
--XOUT[10] Location PIN_M27
46
--XOUT[11] Location PIN_M28
47
--XOUT[12] Location PIN_K21
48
--XOUT[13] Location PIN_K22
49
--YIN[0] Location PIN_V22
50
--YIN[1] Location PIN_U22
51
--YIN[2] Location PIN_V28
52
--YIN[3] Location PIN_V27
53
--YIN[4] Location PIN_U28
54
--YIN[5] Location PIN_U27
55
--YIN[6] Location PIN_R28
56
--YIN[7] Location PIN_R27
57
--YIN[8] Location PIN_V26
58
--YIN[9] Location PIN_V25
59
--YIN[10] Location PIN_L28
60
--YIN[11] Location PIN_L27
61
--YIN[12] Location PIN_J26
62
--YIN[13] Location PIN_J25
63
--YOUT[0] Location PIN_F24
64
--YOUT[1] Location PIN_F25
65
--YOUT[2] Location PIN_D26
66
--YOUT[3] Location PIN_C27
67
--YOUT[4] Location PIN_F26
68
--YOUT[5] Location PIN_E26
69
--YOUT[6] Location PIN_G25
70
--YOUT[7] Location PIN_G26
71
--YOUT[8] Location PIN_H25
72
--YOUT[9] Location PIN_H26
73
--YOUT[10] Location PIN_K25
74
--YOUT[11] Location PIN_K26
75
--YOUT[12] Location PIN_L23
76
--YOUT[13] Location PIN_L24
77
78
entity adctest is
79
port(  
80
    --fastclockin : in std_logic;
81
    clock50mhz_in : in std_logic;
82
    inputA : in std_logic_vector (13 downto 0);
83
    inputB : in std_logic_vector (13 downto 0);
84
    outputA : out std_logic_vector (13 downto 0);
85
    outputB : out std_logic_vector (13 downto 0);
86
    adcA_out_enable : out std_logic;
87
    adcB_out_enable : out std_logic;
88
    --adc_power_on : out std_logic;
89
    adcA_outofrange : in std_logic;
90
    adcB_outofrange : in std_logic;
91
    adcA_clockout : out std_logic;
92
    adcB_clockout : out std_logic;
93
    dacA_clockout : out std_logic;
94
    dacB_clockout : out std_logic;
95
    adc_externalclockin : in std_logic;
96
    dac_externalclockin : in std_logic;
97
    dac_wrtA : out std_logic;
98
    dac_wrtB : out std_logic;
99
    dac_MODE : out std_logic
100
    );
101
end adctest;
102
103
architecture behave of adctest is
104
type RAM is array (15 downto 0) of std_logic_vector (13 downto 0);
105
signal fifo : RAM := (others => (others => '0'));
106
signal outvalue : std_logic_vector(13 downto 0);
107
signal counter : signed (13 downto 0);
108
109
begin
110
--  process (fastclockin)
111
--  begin --process
112
--  fifo(15 downto 0) <= fifo(14 downto 0) & inputA;
113
--  -- apply here filter
114
--  outvalue <= fifo(15)
115
--  end process;
116
  
117
  process (clock50mhz_in)
118
  begin --process
119
  if rising_edge(clock50mhz_in) then
120
  counter <= counter + 100;
121
  end if;
122
   end process;
123
  
124
--configure adc and dacA_clockout
125
  adcA_out_enable <= '0'; --disable is '1'
126
  adcB_out_enable <= '1';
127
  dac_wrtB <= '0';
128
  dacB_clockout <='0';
129
  adcB_clockout <='0';
130
  dac_MODE <= '1'; --dualmode
131
  
132
-- do everything with the 50MHz clock
133
  adcA_clockout <= clock50mhz_in;
134
  dacA_clockout <= clock50mhz_in;
135
  dac_wrtA <= clock50mhz_in;
136
  outputA <= std_logic_vector(counter); 
137
        end behave;

Irgendetwas kommt zwar aus dem Ausgang, aber nur mit ein paar mV 
Amplitude. Erkennt jemand einen offensichtlichen Fehler? Der DAC auf dem 
Board ist ein DA9767. Das Timing Diagramm aus dessen Datenblatt habe ich 
angehängt.

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Gerald G. schrieb:
> Erkennt jemand einen offensichtlichen Fehler?
Die Testbench fehlt.

Und wenn man die mal eben fix erstellt hat, sieht man auch, das da nix 
passiert, was dem Timingdiagramm irgendwie ähnlich sieht...

Duke

von J. S. (engineer) Benutzerseite


Lesenswert?

Das ist die kleinere der beiden ADDA Karten, nicht wahr? Ich habe die 
grössere und bei laufen DACs und ADCs korrekt. Du solltest darüber 
nachdenken, einen PLL zu verwenden. Auch wenn es nur 50 MHz sind kommt 
er mit dem Timing besser hin. Die Ein-Ausgänge zum boards müssen schon 
io-mässig gut getaktet werden, um synchron zu sein.

Bei dem anderen packt man über 200MHz, wenn man es richtig macht.

von Gerald M. (gerald_m17)


Lesenswert?

Danke schonmal, ja es ist die kleine.
Mit einer PLL hatte ich am Anfang versucht, doch das hat auch nicht 
funktioniert. Ich versuche es dennoch weiter. Der jetzige code hat eine 
PLL darin, doch immer noch nichts.
1
library IEEE;
2
use IEEE.std_logic_1164.ALL;
3
use IEEE.numeric_std.ALL;
4
5
entity adctest is
6
port(  
7
    --fastclockin : in std_logic;
8
    clock50mhz_in : in std_logic;
9
    inputA : in std_logic_vector (13 downto 0);
10
    inputB : in std_logic_vector (13 downto 0) ;
11
    outputA : out std_logic_vector (13 downto 0) := (others => '0');
12
    outputB : out std_logic_vector (13 downto 0);
13
    adcA_out_enable : out std_logic;
14
    adcB_out_enable : out std_logic;
15
    --adc_power_on : out std_logic;
16
    adcA_outofrange : in std_logic;
17
    adcB_outofrange : in std_logic;
18
    adcA_clockout : out std_logic;
19
    adcB_clockout : out std_logic;
20
    dacA_clockout : out std_logic;
21
    dacB_clockout : out std_logic;
22
    adc_externalclockin : in std_logic;
23
    dac_externalclockin : in std_logic;
24
    dac_wrtA : out std_logic;
25
    dac_wrtB : out std_logic;
26
    dac_MODE : out std_logic;
27
    TestLED : out std_logic_vector(13 downto 0)
28
    );
29
end adctest;
30
31
architecture behave of adctest is
32
33
component pll
34
  PORT
35
  (
36
    inclk0    : IN STD_LOGIC;
37
    c0    : OUT STD_LOGIC 
38
  );
39
END component;
40
41
type RAM is array (15 downto 0) of std_logic_vector (13 downto 0);
42
signal fifo : RAM := (others => (others => '0'));
43
signal outvalue : std_logic_vector(13 downto 0);
44
signal counter : signed (13 downto 0);
45
signal clock50mhz3_5ns : std_logic;
46
signal clock50mhz0ns : std_logic;
47
48
49
50
51
52
begin
53
c0 : pll port map
54
  (
55
    inclk0 => clock50mhz0ns,
56
    c0  => clock50mhz3_5ns
57
  );
58
59
60
--  process (clock50mhz0ns)
61
--  begin --process
62
--  fifo(15 downto 0) <= fifo(14 downto 0) & inputA;
63
--  -- apply here filter
64
--  outvalue <= fifo(15)
65
--  end process;
66
67
  
68
process (clock50mhz0ns)
69
  begin --process
70
  if rising_edge(clock50mhz0ns) then
71
  counter <= counter + 100;
72
  end if;
73
  end process;
74
  
75
process (clock50mhz3_5ns)
76
  begin --process
77
  if rising_edge(clock50mhz3_5ns) then
78
  outvalue <= inputA;
79
  end if;
80
  end process;
81
  
82
--configure adc and dac
83
  adcA_out_enable <= '0';
84
  adcB_out_enable <= '1';
85
  dac_wrtB <= '0';
86
  outputB <= (others => '0');
87
  dacB_clockout <='0';
88
  adcB_clockout <='0';
89
  dac_MODE <= '1'; --dualmode
90
  clock50mhz0ns <= clock50mhz_in;
91
-- do everything with the 65MHz clock
92
  adcA_clockout <= clock50mhz0ns;
93
  dacA_clockout <= clock50mhz0ns;
94
  dac_wrtA <= clock50mhz0ns;
95
  outputA <= outvalue; -- inputA; --outvalue
96
  TEstLED <= outvalue;
97
end behave;

Ich habe das jetzt einmal so eingestellt, dass mit der normalen clock 
der Lese -und Schreibvorgang der Daten beginnt. 3.5ns später wird der 
ADC ausgelesen und der neue wert an den DAC ausgegben. Doch der DAC 
möchte nicht.

: Bearbeitet durch User
von Gerald M. (gerald_m17)


Lesenswert?

Aus irgendwelchen Gründen tut es jetzt. Habe nun beide ADCs und DACs 
komfiguriert, dass das Signal einfach durchgeschliffen wird:
1
library IEEE;
2
use IEEE.std_logic_1164.ALL;
3
use IEEE.numeric_std.ALL;
4
5
--pin assignment
6
--ADC_OEA Location PIN_T25
7
--ADC_OEB Location PIN_T26
8
--CLOCK_50 Location PIN_Y2
9
--DAC_MODE Location PIN_H24
10
--DAC_WRTA Location PIN_H23
11
--DAC_WRTB Location PIN_M25
12
--adcA_outofrange Location Y28
13
--adcB_outofrange Location Y27
14
--PLL_OUT_ADC[0] Location PIN_G23
15
--PLL_OUT_ADC[1] Location PIN_G24
16
--PLL_OUT_DAC[0] Location PIN_V24
17
--PLL_OUT_DAC[1] Location PIN_V23
18
--RESET Location PIN_AB28
19
--PLL_IN_ADC Location PIN_J27
20
--PLL_IN_DAC Location PIN_J28
21
--XIN[0] Location PIN_T22
22
--XIN[1] Location PIN_T21
23
--XIN[2] Location PIN_R23
24
--XIN[3] Location PIN_R22
25
--XIN[4] Location PIN_R21
26
--XIN[5] Location PIN_P21
27
--XIN[6] Location PIN_P26
28
--XIN[7] Location PIN_P25
29
--XIN[8] Location PIN_N26
30
--XIN[9] Location PIN_N25
31
--XIN[10] Location PIN_L22
32
--XIN[11] Location PIN_L21
33
--XIN[12] Location PIN_U26
34
--XIN[13] Location PIN_U25
35
--XOUT[0] Location PIN_D27
36
--XOUT[1] Location PIN_D28
37
--XOUT[2] Location PIN_E27
38
--XOUT[3] Location PIN_E28
39
--XOUT[4] Location PIN_F27
40
--XOUT[5] Location PIN_F28
41
--XOUT[6] Location PIN_G27
42
--XOUT[7] Location PIN_G28
43
--XOUT[8] Location PIN_K27
44
--XOUT[9] Location PIN_K28
45
--XOUT[10] Location PIN_M27
46
--XOUT[11] Location PIN_M28
47
--XOUT[12] Location PIN_K21
48
--XOUT[13] Location PIN_K22
49
--YIN[0] Location PIN_V22
50
--YIN[1] Location PIN_U22
51
--YIN[2] Location PIN_V28
52
--YIN[3] Location PIN_V27
53
--YIN[4] Location PIN_U28
54
--YIN[5] Location PIN_U27
55
--YIN[6] Location PIN_R28
56
--YIN[7] Location PIN_R27
57
--YIN[8] Location PIN_V26
58
--YIN[9] Location PIN_V25
59
--YIN[10] Location PIN_L28
60
--YIN[11] Location PIN_L27
61
--YIN[12] Location PIN_J26
62
--YIN[13] Location PIN_J25
63
--YOUT[0] Location PIN_F24
64
--YOUT[1] Location PIN_F25
65
--YOUT[2] Location PIN_D26
66
--YOUT[3] Location PIN_C27
67
--YOUT[4] Location PIN_F26
68
--YOUT[5] Location PIN_E26
69
--YOUT[6] Location PIN_G25
70
--YOUT[7] Location PIN_G26
71
--YOUT[8] Location PIN_H25
72
--YOUT[9] Location PIN_H26
73
--YOUT[10] Location PIN_K25
74
--YOUT[11] Location PIN_K26
75
--YOUT[12] Location PIN_L23
76
--YOUT[13] Location PIN_L24
77
78
entity adctest is
79
port(  
80
    --fastclockin : in std_logic;
81
    clock50mhz_in : in std_logic;
82
    inputA : in std_logic_vector (13 downto 0);
83
    inputB : in std_logic_vector (13 downto 0) ;
84
    outputA : out std_logic_vector (13 downto 0) := (others => '0');
85
    outputB : out std_logic_vector (13 downto 0) := (others => '0');
86
    adcA_out_enable : out std_logic;
87
    adcB_out_enable : out std_logic;
88
    --adc_power_on : out std_logic;
89
    adcA_outofrange : in std_logic;
90
    adcB_outofrange : in std_logic;
91
    adcA_clockout : out std_logic;
92
    adcB_clockout : out std_logic;
93
    dacA_clockout : out std_logic;
94
    dacB_clockout : out std_logic;
95
    adc_externalclockin : in std_logic;
96
    dac_externalclockin : in std_logic;
97
    dac_wrtA : out std_logic;
98
    dac_wrtB : out std_logic;
99
    dac_MODE : out std_logic;
100
    TestLED : out std_logic_vector(13 downto 0)
101
    );
102
end adctest;
103
104
architecture behave of adctest is
105
106
component pll
107
  PORT
108
  (
109
    inclk0    : IN STD_LOGIC;
110
    c0    : OUT STD_LOGIC 
111
  );
112
END component;
113
114
type RAM is array (15 downto 0) of std_logic_vector (13 downto 0);
115
signal fifo : RAM := (others => (others => '0'));
116
signal outvalueA, outvalueB : std_logic_vector(13 downto 0);
117
signal counter : signed (13 downto 0);
118
signal clock50mhz3_5ns : std_logic;
119
signal clock50mhz0ns : std_logic;
120
121
122
123
124
125
begin
126
c0 : pll port map
127
  (
128
    inclk0 => clock50mhz0ns,
129
    c0  => clock50mhz3_5ns
130
  );
131
132
133
--  process (clock50mhz0ns)
134
--  begin --process
135
--  fifo(15 downto 0) <= fifo(14 downto 0) & inputA;
136
--  -- apply here filter
137
--  outvalue <= fifo(15)
138
--  end process;
139
140
141
process (clock50mhz3_5ns)
142
  begin --process
143
  if rising_edge(clock50mhz3_5ns) then
144
  counter <= counter + 100;
145
  outvalueA <= inputA;
146
  outvalueB <= inputB;
147
  end if;
148
  end process;
149
  
150
--configure adc and dac
151
  adcA_out_enable <= '0';
152
  adcB_out_enable <= '0';
153
  dac_MODE <= '1'; --dualmode
154
--timings
155
  dac_wrtA <= clock50mhz0ns;
156
  dac_wrtB <= clock50mhz0ns;
157
  dacA_clockout <= clock50mhz0ns;
158
  dacB_clockout <= clock50mhz0ns;
159
  adcA_clockout <= clock50mhz0ns;
160
  adcB_clockout <=clock50mhz0ns;
161
-- wire clock
162
  clock50mhz0ns <= clock50mhz_in;
163
--feedback
164
  outputB <= outvalueB;
165
  outputA <= outvalueA;
166
  TEstLED <= inputB;
167
end behave;

von J. S. (engineer) Benutzerseite


Lesenswert?

Das kannst Du nur bei geringen Frequenzen so machen. Die Taktausgänge 
brauchen DDR-Outputs und die beiden internen Takte brauchst Du nicht. 
Ich vermute mal, dass Du zuvor nicht mir der richtigen Taktflanke 
gearbeitet hast. Normalerweilse arbeitest Du mit einem System-Synchronen 
internen Takt und sampelst auf der steigenden Flanke. Oder Du schiebst 
den Takt intern um 180 Grad. Was anderes macht im Normalfall keinen 
Sinn. Den "Abstand" zwischen den Daten und dem Takt am Eingang musst Du 
mit Constraints regeln und IO FFs verwenden, damit das korrekt läuft. 
Soweit ich weiss, kommen die Daten bei meinem board mit der steigenden 
Flanke. Also nehme ich sie auch damit an. Bei Center aligned Daten 
brauhts Du den 180 Grad Takt aus der PLL.

von Gerald G. (gerald_g)


Lesenswert?

Hi, danke nochmal.
Die 50MHz Clock habe ich der Einfachheit wegen genommen, da die eh schon 
da ist. Nun funktioniert es auch mit der 65MHz Clock. Hierfür habe ich 
zwei PLLs genutzt, eine erzeugt 65MHz, die andere 65MHz mit 3.5ns 
Verzögerung (der DAC braucht 2ns, der ADC 3.5ns).
Ich könnte auch eine 130MHz Clock erzeugen, und mit einem Flipflop zwei 
Takte generieren. Dann würde ich eine PLL sparen, das stimmt.

Jürgen Schuhmacher schrieb:
> Die Taktausgänge brauchen DDR-Outputs

Das verstehe ich leider nicht.

von FPGA-Pongo (Gast)


Lesenswert?

Gerald G. schrieb:
> Jürgen Schuhmacher schrieb:
>> Die Taktausgänge brauchen DDR-Outputs
>
> Das verstehe ich leider nicht.

Takte laufen in FPGAs in besonderen Netzen. Diese kann man nicht ohne 
Weiteres auf einen Ausgang geben. Nur mit Deiner FlipFlop Lösung ginge 
das, weil deren Ausgänge "normale" Netze sind, um es laienhaft zu sagen. 
Bei einem normalen FlipFlop bekommst Du dann den halben Takt. Um einen 
Takt voll auszugeben, muss man ein Double Data Rate FF hernehmen, weil 
die Hälfte vom Doppelten der Einfache Takt ist.

Du musst Dich unbedingt in die Hardware einlesen und verstehen, was der 
FPGA so anbietet. Einfach nur VHDL drauflos zu schreiben wird Dich in 
die Irre führen.

Das gilt auch für die beiden PLLs mit den beiden Takten. Da kann 
irgendwas nicht stimmen. Was Du da an Verschieberei gebastelt hast, 
ergibt funktionell keinen Sinn. Das ist garantiert nicht notwendig. 
Höchstwahrscheinlich liegt es sogar an dem verdaddelten Ausgangstakt, 
den du so kurios erzeugst.

von Gerald G. (gerald_g)


Lesenswert?

Hi, danke nochmals.

Die extra Clockleitungen kenne ich, mir fehlen nur die Schlagworte um zu 
suchen, wie ich in VHDL explizit schreiben kann dass das signal solch 
eine clock ist.
Im assignment editor in quartus kann ich z.B. die internen Signale gar 
nicht auswählen.

Die 65MHz und die um 3.5ns verzögerte 65MHz clock habe ich mit 2 PLLs 
"gebastelt", hierfür habe ich den IP Core von Quartus genutzt.

Jetzt teste ich allerdings ein mit PLL erzeugtes 250MHz Signal, welches 
ich auf 2 125MHz Signale und eines davon auf 2 62.5MHz Signale.
Die 125MHz wollte ich für LAN und das anlegen der Werte an den DAC 
nutzen (der kann 125MSPS) und die zweite, invertierte 125MHz clock für 
die clock des DACs und das write Signal.
Bei den 62.5MHz Signalen wollte ich das gleiche für die ADCs machen 
(diese können 65MSPS)

Bei den IPs von quartus habe ich eine für clocks gesehen, die nur einen 
Ein- und Ausgang hat. Ist das vielleicht der weg um zu sagen dass diese 
Signale clocks sind? Das wäre bei den Geschwindigkeiten wahrscheinlich 
schon wichtig, damit die Clocks auch schnell durch das FPGA kommen

von FPGA-Pongo (Gast)


Lesenswert?

Wenn mich meine Erinnerung nicht täuscht, haben die Altera PLLs beim 
alte GX2 schon 8 Ausgänge. Der "Cyklop" sollte derer wenigstens die 
Hälfte haben.

Das soll aber nicht heissen, das die vielen Takte in Deiner Schaltung 
wirklich klug sind.

von Gerald G. (gerald_g)


Lesenswert?

Das DE2-115 hat 4 PLLs
Das mit dem runterteilen stelle ich mir aber in der Hardware ganz 
chillig vor. 250MHz auf der Hauptbahn, kurz bevor der runtergeteilte 
Takt gebraucht wird auf ein Flipflop und dann an den Pin. Also die Bahn 
muss nicht lang sein.

: Bearbeitet durch User
von J. S. (engineer) Benutzerseite


Lesenswert?

Gerald G. schrieb:
> 250MHz auf der Hauptbahn, kurz bevor der runtergeteilte
> Takt gebraucht wird auf ein Flipflop und dann an den Pin.

Ich glaube, dass Du noch einige Wesentliche Dinge beim FPGA nicht 
verinnerlicht hast. Die Bemerkung "kurz bevor der Takt benötigt wird" 
deutet mir auf Übles hin. Nur kurz dazu: Die Takte in FPGAs liegen auf 
ganz speziellen Leitungen, werden teilweise differenziell geführt und 
sind in der Länge nicht zu beeinflussen. Das ist festgelegt. Wenn die 
Taktleitung läuft, dann läuft sie.

Und das ist der Grund, warum es nicht sinnvoll ist, 250MHz zu erzeugen, 
wenn man 125 braucht. Im Besonderen sind 250MHz Taktfrequenz für einen 
Cyclone II nur mit großen Mühen flächendeckend zu erzielen.

von Gerald G. (gerald_g)


Lesenswert?

Das ist ein Cyclone IV
Das mit den Leitungen hatten wir schon. Das passt doch. Quasi überall 
auf der "Clockautobahn" sind die 250Mhz. Ich brauche an einer Stelle die 
125MHz. Also zweigen die 250MHz kurz vor dieser Stelle auf Flipflop. Das 
ist direkt dort wo ich den Takt brauche. Der muss ja nicht 3 mal quer 
durch das FPGA

von J. S. (engineer) Benutzerseite


Lesenswert?

Gerald G. schrieb:
> Quasi überall
> auf der "Clockautobahn" sind die 250Mhz.

und verbraucht damit an die doppelte Leistung, wie mit 125 MHz. Die 
Taktnetze sind es, die das gros an Strom fressen. Selbst ohne Logik 
brauchen die Strom.

>Das ist ein Cyclone IV

Ja, ich hatte mich vertippt, aber auch mit einem C4 ist das nicht ohne. 
Braucht mit unter eine Reihe zusätzlicher FFs und damit noch mehr 
virtuelle aktive Masse, die bewegt werden will.

von Gerald G. (gerald_g)


Lesenswert?

OK, danke nochmal.
Ich fand das halt die "eleganteste" Methode.
Irgendwie muss ich eben ein 125MHz Signal erzeugen, und ein zweites das 
dazu verschoben ist.
Eine andere Möglichkeit als 250MHz oder zwei PLLs verbrauchen kenne ich 
nicht. Und mit beiden scheinst du nicht zufrieden zu sein

Edit: lol, jetzt hab ichs. Ein simples "not clock125MHz" gibt mir eine 
passende, 180° verschobene steigende Flanke.

: Bearbeitet durch User
von J. S. (engineer) Benutzerseite


Lesenswert?

Gerald G. schrieb:
> Edit: lol, jetzt hab ichs. Ein simples "not clock125MHz" gibt mir eine
> passende, 180° verschobene steigende Flanke.

du gibst das hoffentlich nicht so aus?

von Gerald G. (gerald_g)


Lesenswert?

ne, das wird ja nur intern gebraucht, damit ich weiß wann ich die Daten 
abholen kann.
Aber den absolut korrekten Weg hat mir noch niemand gezeigt.

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.