OpenCores
URL https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [core/] [adm/] [rtl/] [cl_fifo_control_v2.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
---------------------------------------------------------------------------------------------------
2
--
3
-- Title       : cl_fifo_control_v2
4
-- Author      : Dmitry Smekhov
5
-- Company     : Instrumental System
6
-- E-mail          : dsmv@insys.ru
7
--      
8
-- Version         : 2.0
9
--
10
---------------------------------------------------------------------------------------------------
11
--
12
-- Description : Управление FIFO
13
--                               Модификация 2
14
--                               Используется для управления FIFO с выходом на регистр
15
--
16
---------------------------------------------------------------------------------------------------
17
--                                      
18
--  Version 2.0  24.02.2004
19
--                               Изменён алгоритм работы. Исправлены ошибки чтения данных.
20
--
21
--  Version 1.2  13.01.2004
22
--                               Исправлено чтение второго слова из FIFO при empty=0
23
--
24
--  Version 1.1  24.12.2003
25
--                              Исправлен алгоритм работы
26
--
27
---------------------------------------------------------------------------------------------------
28
 
29
library ieee;
30
use ieee.std_logic_1164.all;
31
 
32
entity cl_fifo_control_v2 is
33
        port(
34
                reset           : in std_logic;         -- 0 - сброс
35
                clk                     : in std_logic;         -- тактовая частота
36
                ef                      : out std_logic;        -- 0 - FIFO пустое
37
                rd                      : out std_logic;        -- 1 - чтение из FIFO
38
                we                      : out std_logic;        -- 1 - запись во входной буфер
39
                empty           : in std_logic;         -- 1 - FIFO пустое
40
                read            : in std_logic          -- 0 - запрос на чтение
41
                );
42
end cl_fifo_control_v2;
43
 
44
 
45
architecture cl_fifo_control_v2 of cl_fifo_control_v2 is
46
 
47
type    st_type is ( s0, s1, s2, s4, s5, s6, s7 );
48
signal  st, stn : st_type;
49
signal  empty1  : std_logic;
50
 
51
begin
52
 
53
pr_state: process( reset, clk ) begin
54
        if( reset='0' ) then
55
                st<=s0;
56
        elsif( rising_edge( clk ) ) then
57
                st<=stn after 1 ns;
58
        end if;
59
end process;
60
 
61
pr_empty1: process( clk ) begin
62
        if( rising_edge( clk ) ) then
63
                empty1<=empty after 1 ns;
64
        end if;
65
end process;
66
 
67
pr_st: process( clk, st, empty, read )
68
 
69
variable vr     : std_logic;    -- rd;
70
variable vw     : std_logic;    -- we;
71
variable vef: std_logic;        -- ef;
72
 
73
begin
74
 
75
        vr:='0';
76
        vw:='0';
77
        vef:='0';
78
 
79
        case  st is
80
                when s0 =>  if( empty='0' ) then
81
                                                stn <= s1;
82
                                        else
83
                                            stn <=s0;
84
                                        end if;
85
                when s1 =>  vr:='1'; stn <=s2;
86
                when s2 =>      vw:='1'; stn <=s4;
87
                when s4 =>  if( empty1='0' ) then stn<=s7; vr:='1';
88
                                        else stn<=s5;
89
                                        end if;
90
                when s5 =>  vef:='1';
91
                                        if( read='0' ) then
92
                                                stn<=s0;
93
                                        elsif( empty1='0' ) then
94
                                                vr:='1';
95
                                                stn<=s7;
96
                                        else
97
                                                stn<=s5;
98
                                        end if;
99
 
100
                when s6 =>  -- vef:='1';
101
                                                vr:='1';
102
                                                stn<=s7;
103
--                                      if( read='0' )then 
104
--                                              stn<=s0;
105
--                                      else
106
--                                              vr:='1';
107
--                                              stn<=s7;
108
--                                      end if;
109
 
110
                when s7 =>      vef:='1';
111
                                        if( read='0' ) then
112
                                                if( empty='0' ) then
113
                                                        vr:='1';
114
                                                        vw:='1';
115
                                                        stn<=s7;
116
                                                else
117
                                                        vw:='1';
118
                                                        stn<=s5;
119
                                                end if;
120
                                        else
121
                                                stn<=s7;
122
                                        end if;
123
                end case;
124
 
125
                rd <= vr;
126
                we <= vw;
127
                ef <= vef;
128
 
129
end process;
130
 
131
end cl_fifo_control_v2;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.