1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 |
|
4 | COMPONENT fifo_generator_v9_3_0
|
5 | PORT (
|
6 | clk : IN STD_LOGIC;
|
7 | rst : IN STD_LOGIC;
|
8 | din : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
9 | wr_en : IN STD_LOGIC;
|
10 | rd_en : IN STD_LOGIC;
|
11 | dout : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
|
12 | full : OUT STD_LOGIC;
|
13 | empty : OUT STD_LOGIC
|
14 | );
|
15 | END COMPONENT;
|
16 | -- inputs
|
17 | signal clk : STD_LOGIC ;--:= '0';
|
18 | signal rst : STD_LOGIC := '0';
|
19 | --signal Rest: STD_LOGIC :='0' ;
|
20 | signal reset: STD_LOGIC ;--= '0';
|
21 | signal din : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
22 | signal wr_en : STD_LOGIC ;--= '0';
|
23 | signal rd_en : STD_LOGIC := '0';
|
24 | --outputs
|
25 | signal dout : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
26 | signal full : STD_LOGIC ;
|
27 | signal empty: STD_LOGIC ;
|
28 | type state_type is (zustand_1,zustand_2,zustand_3,zustand_4,zustand_5);
|
29 | signal zwischen_zustand ,naechst_zustand : state_type ;
|
30 | --clock period definition
|
31 | constant clk_period : time := 20 ns;
|
32 | begin
|
33 | your_instance_name : fifo_generator_v9_3_0
|
34 | PORT MAP (
|
35 | clk => clk,
|
36 | rst => reset,
|
37 | din => din,
|
38 | wr_en => wr_en,
|
39 | rd_en => rd_en,
|
40 | dout => dout,
|
41 | full => full,
|
42 | empty => empty
|
43 | );
|
44 | --clock process definition
|
45 | clk_process: process begin
|
46 | clk <= '0';
|
47 | wait for clk_period/2;
|
48 | clk <= '1';
|
49 | wait for clk_period/2;
|
50 | end process;
|
51 |
|
52 | rst_process: process begin
|
53 | reset <= '0';
|
54 | wait for clk_period;
|
55 | reset <= '1';
|
56 | wait for clk_period;
|
57 | reset <= '0';
|
58 | wait;
|
59 | end process;
|
60 | t_1: process (clk,reset) begin
|
61 | if (reset='1') then
|
62 | --wait for 10 ns;
|
63 | rst<='1';
|
64 | --default state on reset.
|
65 | elsif (clk' event and clk ='1') then --rising_edge(clk)
|
66 | rst<='0';
|
67 | rd_en <='0';
|
68 | zwischen_zustand <= naechst_zustand ; --state change.
|
69 | --naechst_zustand<= zustand_1;
|
70 | end if;
|
71 | end process;
|
72 | --fsm process
|
73 |
|
74 | t_2: process (zwischen_zustand)
|
75 | begin
|
76 | case zwischen_zustand is
|
77 | when zustand_1 =>
|
78 | wr_en<='0';
|
79 | naechst_zustand <= zustand_2;
|
80 | when zustand_2 =>
|
81 |
|
82 | naechst_zustand <= zustand_3;
|
83 | when zustand_3 =>
|
84 | naechst_zustand <= zustand_4;
|
85 | when zustand_4 =>
|
86 | if (full ='0') then
|
87 | din <= X"deadbeef";
|
88 | naechst_zustand <= zustand_4;
|
89 | wr_en <='1';
|
90 | else
|
91 | naechst_zustand <= zustand_5;
|
92 | wr_en <='1';
|
93 | end if;
|
94 | when zustand_5 =>
|
95 | wr_en <='0';
|
96 | naechst_zustand <= zustand_5;
|
97 | end case;
|
98 | end process;
|
99 | end Behavioral;
|