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

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [core/] [ds_dma64/] [pcie_src/] [components/] [block_main/] [block_pe_main.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
---------------------------------------------------------------------------------------------------
2
--
3
-- Title       : block_pe_main
4
-- Author      : Dmitry Smekhov
5
-- Company     : Instrumental System
6
-- E-mail      : dsmv@insys.ru
7
--
8
-- Version     : 1.1  
9
--
10
---------------------------------------------------------------------------------------------------
11
--
12
-- Description : 
13
--              Блок управления общими ресурсами прошивки с ядром PCI-Express
14
--              
15
--              Модификация 1
16
--              Реализованы регистры BRD_MODE, STATUS 
17
--                                      
18
--              
19
--
20
---------------------------------------------------------------------------------------------------
21
--
22
--      Version 1.1   26.12.2009
23
--                                        Добавлен регистр CPL_CNT - число ошибок Completion Timeout
24
--
25
---------------------------------------------------------------------------------------------------
26
 
27
library ieee;
28
use ieee.std_logic_1164.all;
29
 
30
library work;
31
use     work.host_pkg.all;
32
 
33
package block_pe_main_pkg is
34
 
35
component block_pe_main is
36
        generic (
37
                Device_ID               : in std_logic_vector( 15 downto 0 ):=x"0000"; -- идентификатор модуля
38
                Revision                : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия модуля
39
                PLD_VER                 : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия ПЛИС
40
                BLOCK_CNT               : in std_logic_vector( 15 downto 0 ):=x"0000"  -- число блоков управления 
41
 
42
        );
43
        port(
44
 
45
                ---- Global ----
46
                reset_hr1               : in std_logic;         -- 0 - сброс
47
                clk                             : in std_logic;         -- Тактовая частота DSP
48
                pb_reset                : out std_logic;        -- 0 - сброс ведомой ПЛИС
49
 
50
                ---- HOST ----
51
                bl_adr                  : in  std_logic_vector( 4 downto 0 );    -- адрес
52
                bl_data_in              : in  std_logic_vector( 31 downto 0 );   -- данные
53
                bl_data_out             : out std_logic_vector( 31 downto 0 );   -- данные
54
                bl_data_we              : in  std_logic;        -- 1 - запись данных   
55
 
56
                ---- Управление ----
57
                brd_mode                : out std_logic_vector( 15 downto 0 )  -- регистр BRD_MODE
58
 
59
        );
60
end component;
61
 
62
end package;
63
 
64
 
65
 
66
library ieee;
67
use ieee.std_logic_1164.all;
68
 
69
library work;
70
use     work.host_pkg.all;
71
use work.ctrl_ram16_v1_pkg.all;
72
 
73
library unisim;
74
use unisim.vcomponents.all;
75
 
76
 
77
 
78
entity block_pe_main is
79
        generic (
80
                Device_ID               : in std_logic_vector( 15 downto 0 ):=x"0000"; -- идентификатор модуля
81
                Revision                : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия модуля
82
                PLD_VER                 : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия ПЛИС
83
                BLOCK_CNT               : in std_logic_vector( 15 downto 0 ):=x"0000"  -- число блоков управления 
84
 
85
        );
86
        port(
87
 
88
                ---- Global ----
89
                reset_hr1               : in std_logic;         -- 0 - сброс
90
                clk                             : in std_logic;         -- Тактовая частота DSP
91
                pb_reset                : out std_logic;        -- 0 - сброс ведомой ПЛИС
92
 
93
                ---- HOST ----
94
                bl_adr                  : in  std_logic_vector( 4 downto 0 );    -- адрес
95
                bl_data_in              : in  std_logic_vector( 31 downto 0 );   -- данные
96
                bl_data_out             : out std_logic_vector( 31 downto 0 );   -- данные
97
                bl_data_we              : in  std_logic;        -- 1 - запись данных   
98
 
99
                ---- Управление ----
100
                brd_mode                : out std_logic_vector( 15 downto 0 )  -- регистр BRD_MODE
101
 
102
        );
103
end block_pe_main;
104
 
105
 
106
architecture block_pe_main of block_pe_main is
107
 
108
 
109
 
110
---- Constant ----
111
constant BLOCK_ID               : std_logic_vector( 15 downto 0 ):=x"1013"; -- идентификатор блока PE_MAIN
112
constant BLOCK_VER              : std_logic_vector( 15 downto 0 ):=x"0101"; -- версия блока PE_MAIN
113
 
114
constant        bl_rom          : bh_rom:=( 0=> BLOCK_ID,
115
                                                                1=> BLOCK_VER,
116
--                                                              2=> Device_ID,
117
--                                                              3=> Revision,
118
--                                                              4=> PLD_VER,  
119
 
120
2=> x"5504",
121
3=> x"0210",
122
4=> x"0104",
123
                                                                5=> BLOCK_CNT,
124
                                                                6=> x"0000",
125
                                                                7=> x"0000" );
126
 
127
 
128
 
129
 
130
        ---- PLX ----
131
signal  bl_ram_out              : std_logic_vector( 15 downto 0 );       -- выход констант и командных
132
                                                                                                                -- регистров
133
signal  bl_reg_out              : std_logic_vector( 31 downto 0 );       -- выход непосредственных регистров
134
 
135
 
136
 
137
signal  c_brd_mode              : std_logic_vector( 15 downto 0 );       -- регистр BRD_MODE
138
 
139
        ---- Reset ----
140
signal  dsp_reg_reset   : std_logic_vector( 11 downto 0 );
141
signal  reset_flag              : std_logic_vector( 7 downto 0 );
142
signal  reset_val               : std_logic_vector( 7 downto 0 );
143
signal  reset_val_0             : std_logic_vector( 7 downto 0 );
144
signal  reset_val_1             : std_logic_vector( 7 downto 0 );
145
signal  reset_host              : std_logic_vector( 7 downto 0 );
146
 
147
 
148
 
149
 
150
signal  brd_status_i    : std_logic_vector( 15 downto 0 );
151
 
152
attribute       tig : string;
153
attribute       tig             of reset_hr1    : signal        is "yes";
154
 
155
 
156
begin
157
 
158
 
159
bl_ram: ctrl_ram16_v1
160
        generic map(
161
                rom                     => bl_rom               -- значения констант
162
        )
163
        port map(
164
                clk                     => clk,         -- Тактовая частота
165
 
166
                adr                     => bl_adr,                      -- адрес 
167
                data_in         => bl_data_in( 15 downto 0 ),    -- вход данных
168
                data_out        => bl_ram_out,          -- выход данных
169
 
170
                data_we         => bl_data_we           -- 1 - запись данных
171
        );
172
 
173
 
174
 
175
 
176
pr_data_out: process( clk )
177
begin
178
 
179
        if( rising_edge( clk ) ) then
180
                if( bl_adr(4)='0' ) then
181
                        bl_data_out( 15 downto 0 ) <= bl_ram_out after 1 ns;
182
                        bl_data_out( 31 downto 16 ) <= (others=>'0') after 1 ns;
183
                else
184
                        case bl_adr( 3 downto 0 ) is
185
                                when "0000"     =>      -- BRD_STATUS
186
                                                bl_data_out(15 downto 0 )<=brd_status_i after 1 ns;
187
                                                bl_data_out( 31 downto 16 ) <= (others=>'0') after 1 ns;
188
 
189
                                when "0110"     =>  -- SPD_CTRL
190
                                                bl_data_out( 31 downto 0 ) <= (others=>'1') after 1 ns;
191
 
192
                                when "1000"     =>  -- SPD_DATA
193
                                                bl_data_out( 31 downto 0 ) <= (others=>'1') after 1 ns;
194
 
195
                                when others => bl_data_out<=(others=>'-');
196
                        end case;
197
                end if;
198
        end if;
199
end process;
200
 
201
 
202
 
203
 
204
pr_reg: process( reset_hr1, clk )
205
 
206
begin
207
        if( reset_hr1='0' ) then
208
                c_brd_mode<=(others=>'0');
209
        elsif( rising_edge( clk ) ) then
210
                if( bl_data_we='1' ) then
211
                        case bl_adr( 4 downto 0 ) is
212
                                when "01000"    => -- BRD_MODE
213
                                                c_brd_mode <= bl_data_in( 15 downto 0 ) after 1 ns;
214
                                when others => null;
215
                        end case;
216
                end if;
217
 
218
        end if;
219
end process;
220
 
221
 
222
brd_mode <=c_brd_mode;
223
 
224
brd_status_i( 0 ) <= '1';
225
brd_status_i( 7 downto 1 ) <= (others=>'0');
226
brd_status_i( 9 downto 8 ) <= c_brd_mode( 9 downto 8 );
227
brd_status_i( 14 downto 10 ) <= (others=>'0');
228
brd_status_i( 15 ) <= '1';
229
 
230
 
231
end block_pe_main;
232
 

powered by: WebSVN 2.1.0

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