Hallo,
weiß jmd wie NPI-PIM für Xilinx mpmc geht? ( siehe Anhang)
Ich brauche nur den Lesevorgang. Leider sind alle Daten, die ich
rauslese immer 0. Obwohl überprüft an der Adresse richtige Daten liegen.
Wahrscheinlich verpasse ich das kurze Fenster in dem die PIM-Daten
anliegen.
Ich habe auch schon beide Möglichkeiten probiert, ob PIM das
höchstwertige Bit auf 0 oder 31 sieht. Beides mal lese ich 0.
Kann jmd was zu dem vhdl-Code sagen?
Wahrscheinlich muss ich irgendwas kombinatorisch machen. Aber der Code
läuft zumindest alle Zustände ab...
1 | when req_data =>
|
2 | PIM_Addr <= addr;
|
3 | PIM_AddrReq <= '1';
|
4 | PIM_RNW <= '1';
|
5 | if PIM_AddrAck = '1' then
|
6 | cnt_latency <= unsigned(PIM_RdFIFO_Latency);
|
7 | state <= recv_data;
|
8 | end if;
|
9 |
|
10 | when recv_data =>
|
11 | PIM_AddrReq <= '0';
|
12 | PIM_RNW <= '0';
|
13 | if PIM_RdFIFO_Empty = '1' then
|
14 | PIM_RdFIFO_Pop <= '0';
|
15 | else
|
16 | PIM_RdFIFO_Pop <= '1';
|
17 | if cnt_latency = 0 then
|
18 | data <= PIM_RdFIFO_Data;
|
19 | state <= shift2strm;
|
20 | else
|
21 | cnt_latency <= cnt_latency - 1;
|
22 | state <= recv_late_data;
|
23 | end if;
|
24 | end if;
|
25 |
|
26 | when recv_late_data =>
|
27 | PIM_RdFIFO_Pop <= '0';
|
28 | if cnt_latency = "00" then
|
29 | data <= PIM_RdFIFO_Data;
|
30 | state <= shift2strm;
|
31 | else
|
32 | cnt_latency <= cnt_latency - 1;
|
33 | end if;
|
34 |
|
35 | when fertig =>
|
36 | PIM_RdFIFO_Pop <= '0';
|
37 | ...
|