Hallo Forum,
Ich habe in meiner Bastelkiste einen schnellen AD-Wandler MP7684 mit bis
zu 20 MHz Abtastfrequenz und spiele mit dem Gedanken, auf einer
Lochrasteplatine eine primitive "Speicher-Oszi" Schaltung
zusammenzufrickeln. Die Steuerung des AD-Wandlers soll ein XC9572-15
CPLD übernehmen.
Im Datenblatt des AD-Wandlers steht folgendes:
>> If another DFF follows the ADC, it is recommended that the system
>> latches the data at the negative going edge of the clock.
>> This will work at any frequency.
Also die Daten vom AD-Wandler muss man mit der fallenden Flanke
übernehmen.
Ich habe folgenden VHDL Prozess testweise synthetisiert und im "RTL
Schematics" geguckt, was dabei rauskommt:
1 | ADC_SAMPLE_PROCESS: process (CLK, RST) begin
|
2 | if falling_edge(CLK) then
|
3 | if RST = RST_ACTIVE then
|
4 | ADC_DATA_SYNC <= (others => '0');
|
5 | else
|
6 | ADC_DATA_SYNC <= ADC_DATA_RAW;
|
7 | end if;
|
8 | end if;
|
9 | end process ADC_SAMPLE_PROCESS;
|
Es sieht so aus, dass es zwischen dem CLK_I und dem CLK-Eingang des
D-Registers (ADC_DATA_SYNC) einen Inverter gibt.
Das ist der Punkt, worüber ich nachdenke. Es gibt nämlich im Datenblatt
des AD-Wandlers eine "Data Hold Time", die im Bereich von 13 bis 17 ns
liegt. D.h. nach der fallenden Flanke gibt der AD-Wandler die Daten noch
13 bis 17 ns lang aus, danach ändern sie sich.
Im Datenblatt zum CPLD gibt es folgende Werte
"GCK buffer delay" = 3 ns
"Combinatorial logic propagation delay" = 3 ns
"Register setup time" 3.5 ns
"Register hold time" 4.5 ns
In Summe 14 ns... also größer als die "Data Hold Time" des AD-Wandlers.
Es würde also nicht funktionieren.
Meine Frage dazu wäre, ob meine Rechnung stimmt? Ist es richtig, die
"Combinatorial logic propagation delay" zu berücksichtigen (wegen
falling_edge() und dem zusätlichen Inverter)? Hat viellecht jemand einen
Tipp/Kommentar für mich o.ä.?
Danke,
Alex