Hallo Welt,
ich möchte Daten aus einem Xilinx FSL_Bus lesen.
Allerdings scheint die Doku nicht ganz richtig zu sein. Oder liege ich
falsch?
So wie in der Doku beschrieben, kann ich doch zweimal die Fifo poppen in
zwei Takten. ( siehe Anhang).
Wenn ich das probiere, liegen im zweiten Takt aber immer noch die alten
Werte an.
1 | entity user_logic is
|
2 | port(
|
3 | FSL_Clk : in std_logic;
|
4 | FSL_Rst : in std_logic;
|
5 | FSL_S_Read : out std_logic;
|
6 | FSL_S_Data : in std_logic_vector(0 to 31);
|
7 | FSL_S_Exists : in std_logic; );
|
8 | end entity user_logic;
|
9 |
|
10 | architecture Beispiel of user_logic is
|
11 |
|
12 | type STATE_TYPE is ( eins, zwei);
|
13 | signal state : STATE_TYPE;
|
14 |
|
15 | signal fsl_s_data_i : std_logic_vector(31 downto 0);
|
16 |
|
17 | signal var : std_logic_vector( 31 downto 0);
|
18 |
|
19 | begin
|
20 |
|
21 | fsl_s_data_i <= FSL_S_Data;
|
22 |
|
23 | PROCCOLI : process ( FSL_Clk) is
|
24 | begin
|
25 | if ( FSL_Clk'event and FSL_Clk = '1') then
|
26 | if ( FSL_Rst = '1') then
|
27 | FSL_S_Read <= '0';
|
28 | var <= ( others => '0');
|
29 | state <= eins;
|
30 | else
|
31 | case state is
|
32 |
|
33 | when eins =>
|
34 | if FSL_S_Exists = '1' then
|
35 | var <= fsl_s_data_i;
|
36 | FSL_S_Read <= '1';
|
37 | state <= zwei;
|
38 | else
|
39 | FSL_S_Read <= '0';
|
40 | end if;
|
41 |
|
42 | when zwei =>
|
43 | if FSL_S_Exists = '1' then
|
44 | var <= fsl_s_data_i;
|
45 | -- hier liegt alter Wert an.
|
46 | FSL_S_Read <= '1';
|
47 | state <= fertig;
|
48 | else
|
49 | FSL_S_Read <= '0';
|
50 | end if;
|
51 |
|
52 | end case;
|
53 | end if;
|
54 | end if;
|
55 | end process;
|
56 | end architicture;
|
Oder muss ich zwischen jedem Pop einen Takt Pause machen?
Oder kann man das Problem anders lösen? Vielleicht den Takt etwas
verzögern?