Hallo Zusammen
Ich lese mit einem ADC werte ein und versuche die danach zu dezimieren.
Die Decimation soll einfach jeweils über 10 Werte mitteln.
In ModelSim hat dies wunderbar funktioniert. Doch auf dem Board läuft es
einfach nicht. Ich habe nun mit dem SignalTap die Signale des Blocks mal
angezeigt. Das DataInxDI sehe ich sehr schön und der Clk funktioniert
auch. Jedoch sind meine AdcInBufxDS-Register immer alle auf 0. Mache ich
irgende einen überlegungsfehler, oder optimiert mir Quartus den Code, so
dass ich diese Register gar nicht anschauen kann?
1 | FIR_ff : process(ClkxCI, RstxRBI, AdcInBufxDS)
|
2 | begin
|
3 | if RstxRBI = '1' then
|
4 | for c in 0 to 9 loop
|
5 | AdcInBufxDS(c) <= 0;
|
6 | end loop;
|
7 | elsif rising_edge(ClkxCI) then
|
8 | AdcInBufxDS(9) <= AdcInBufxDS(8);
|
9 | AdcInBufxDS(8) <= AdcInBufxDS(7);
|
10 | AdcInBufxDS(7) <= AdcInBufxDS(6);
|
11 | AdcInBufxDS(6) <= AdcInBufxDS(5);
|
12 | AdcInBufxDS(5) <= AdcInBufxDS(4);
|
13 | AdcInBufxDS(4) <= AdcInBufxDS(3);
|
14 | AdcInBufxDS(3) <= AdcInBufxDS(2);
|
15 | AdcInBufxDS(2) <= AdcInBufxDS(1);
|
16 | AdcInBufxDS(1) <= AdcInBufxDS(0);
|
17 | AdcInBufxDS(0) <= (to_integer(unsigned(DataInxDI));-- -8192
|
18 |
|
19 | DataInDecxDO <= NextDataInDecxS;
|
20 | end if;
|
21 | end process FIR_ff;
|
22 |
|
23 | FIR_comb : process(DataInxDI, AdcInBufxDS,DataIn050xS,DataIn100xS,DataIn250xS,DataIn500xS,DataRateInxDI)
|
24 | begin
|
25 | DataIn050xS <= (AdcInBufxDS(9) + AdcInBufxDS(8)+ AdcInBufxDS(7) + AdcInBufxDS(6) + AdcInBufxDS(5) + AdcInBufxDS(4) + AdcInBufxDS(3) + AdcInBufxDS(2) + AdcInBufxDS(1) + AdcInBufxDS(0)) / 10;
|
26 | DataIn100xS <= (AdcInBufxDS(9) + AdcInBufxDS(8) + AdcInBufxDS(7) + AdcInBufxDS(6) + AdcInBufxDS(5)) / 5;
|
27 | DataIn250xS <= (AdcInBufxDS(9) + AdcInBufxDS(8)) / 2;
|
28 | DataIn500xS <= AdcInBufxDS(9);
|
29 |
|
30 |
|
31 | if DataRateInxDI = "00" then
|
32 | NextDataInDecxS <=DataIn050xS;
|
33 | elsif DataRateInxDI = "01" then
|
34 | NextDataInDecxS <=DataIn100xS;
|
35 | elsif DataRateInxDI = "10" then
|
36 | NextDataInDecxS <=DataIn250xS;
|
37 | else
|
38 | NextDataInDecxS <=DataIn500xS;
|
39 | end if;
|
40 |
|
41 | end process FIR_comb;
|