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

Subversion Repositories mips_enhanced

[/] [mips_enhanced/] [trunk/] [grlib-gpl-1.0.19-b3188/] [lib/] [esa/] [pci/] [pciarb.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dimamali
------------------------------------------------------------------------------
2
-- Entity:      esa_pciarb 
3
-- File:        esa_pciarb.vhd
4
-- Author:      Marko Isomaki
5
-- Description: GRLIB wrapper for the ESA PCI arbiter
6
------------------------------------------------------------------------------
7
 
8
library ieee;
9
library grlib;
10
library gaisler;
11
library esa;
12
library techmap;
13
 
14
use ieee.std_logic_1164.all;
15
use grlib.stdlib.all;
16
use grlib.amba.all;
17
use grlib.devices.all;
18
use techmap.gencomp.all;
19
use esa.pci_arb_pkg.all;
20
--pragma translate_off
21
use std.textio.all;
22
--pragma translate_on
23
 
24
 
25
entity pciarb is
26
  generic(
27
    pindex     : integer := 0;
28
    paddr      : integer := 0;
29
    pmask      : integer := 16#FFF#;
30
    nb_agents  : integer := 4;
31
    apb_en     : integer := 1;
32
    netlist    : integer := 0);
33
  port(
34
    clk     : in std_ulogic;
35
    rst_n   : in std_ulogic;
36
    req_n   : in std_logic_vector(0 to nb_agents-1);
37
    frame_n : in std_logic;
38
    gnt_n   : out std_logic_vector(0 to nb_agents-1);
39
    pclk    : in std_ulogic;
40
    prst_n  : in std_ulogic;
41
    apbi    : in apb_slv_in_type;
42
    apbo    : out apb_slv_out_type
43
  );
44
end entity;
45
 
46
architecture rtl of pciarb is
47
 
48
component pci_arb is
49
  generic(
50
    NB_AGENTS : integer := 4;
51
    ARB_SIZE  : integer := 2;
52
    APB_EN    : integer := 1
53
  );
54
  port(
55
    clk     : in  clk_type;                            -- clock
56
    rst_n   : in  std_logic;                           -- async reset active low
57
    req_n   : in  std_logic_vector(0 to NB_AGENTS-1);  -- bus request
58
    frame_n : in  std_logic;
59
    gnt_n   : out std_logic_vector(0 to NB_AGENTS-1);  -- bus grant
60
    pclk    : in  clk_type;                            -- APB clock
61
    prst_n  : in  std_logic;                           -- APB reset
62
    pbi     : in  EAPB_Slv_In_Type;                     -- APB inputs
63
    pbo     : out EAPB_Slv_Out_Type                     -- APB outputs
64
  );
65
end component;
66
 
67
component pci_arb_net is
68
  generic (
69
    nb_agents : integer := 4;
70
    arb_size  : integer := 2;
71
    apb_en    : integer := 1
72
  );
73
  port (
74
    clk     : in  std_logic;                            -- clock
75
    rst_n   : in  std_logic;                           -- async reset active low
76
    req_n   : in  std_logic_vector(0 to NB_AGENTS-1);  -- bus request
77
    frame_n : in  std_logic;
78
    gnt_n   : out std_logic_vector(0 to NB_AGENTS-1);  -- bus grant
79
    pclk    : in  std_logic;                            -- APB clock
80
    prst_n  : in  std_logic;                           -- APB reset
81
    pbi_psel   : in  std_ulogic;                         -- slave select
82
    pbi_penable: in  std_ulogic;                         -- strobe
83
    pbi_paddr  : in  std_logic_vector(31 downto 0); -- address bus (byte)
84
    pbi_pwrite : in  std_ulogic;                         -- write
85
    pbi_pwdata : in  std_logic_vector(31 downto 0); -- write data bus
86
    pbo_prdata : out std_logic_vector(31 downto 0) -- read data bus
87
  );
88
end component;
89
 
90
signal pbi : eapb_slv_in_type;
91
signal pbo : eapb_slv_out_type;
92
 
93
constant REVISION : integer := 0;
94
 
95
constant pconfig : apb_config_type := (
96
 
97
  1 => apb_iobar(paddr, pmask));
98
 
99
begin
100
  rtl0 : if netlist = 0 generate
101
    arb : pci_arb
102
    generic map(
103
      NB_AGENTS => nb_agents, ARB_SIZE => log2(nb_agents), APB_EN => apb_en)
104
    port map(
105
      clk => clk, rst_n => rst_n, req_n => req_n, frame_n => frame_n,
106
      gnt_n => gnt_n, pclk => pclk, prst_n => prst_n, pbi => pbi, pbo => pbo);
107
  end generate;
108
  net0 : if netlist /= 0 generate
109
    arb : pci_arb_net
110
    generic map(
111
      NB_AGENTS => nb_agents, ARB_SIZE => log2(nb_agents), APB_EN => apb_en)
112
    port map(
113
      clk => clk, rst_n => rst_n, req_n => req_n, frame_n => frame_n,
114
      gnt_n => gnt_n, pclk => pclk, prst_n => prst_n,
115
      pbi_psel    => pbi.psel,
116
      pbi_penable => pbi.penable,
117
      pbi_paddr   => pbi.paddr,
118
      pbi_pwrite  => pbi.pwrite,
119
      pbi_pwdata  => pbi.pwdata,
120
      pbo_prdata  => pbo.prdata);
121
  end generate;
122
 
123
  apbo.prdata <= pbo.prdata;
124
  apbo.pindex <= pindex;
125
  apbo.pconfig <= pconfig;
126
  apbo.pirq <= (others => '0');
127
 
128
  pbi.psel <= apbi.psel(pindex);
129
  pbi.penable <= apbi.penable;
130
  pbi.paddr <= apbi.paddr;
131
  pbi.pwrite <= apbi.pwrite;
132
  pbi.pwdata <= apbi.pwdata;
133
 
134
-- boot message
135
 
136
-- pragma translate_off
137
    bootmsg : report_version
138
    generic map ("pciarb" & tost(pindex) &
139
        ": PCI arbiter, " & tost(nb_agents) & " masters");
140
-- pragma translate_on
141
 
142
 
143
end architecture;

powered by: WebSVN 2.1.0

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