LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Cvs-checkins > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: cvs at opencores.org<cvs@o...>
    Date: Tue Jul 22 23:42:50 CEST 2008
    Subject: [cvs-checkins] MODIFIED: jop ...
    Top
    Date: 00/08/07 22:23:42

    Added: jop/vhdl/top jop_jpd_cyc12.vhd
    Log:
    Design files for the HW methods


    Revision Changes Path
    1.1 jop/vhdl/top/jop_jpd_cyc12.vhd

    http://www.opencores.org/cvsweb.shtml/jop/vhdl/top/jop_jpd_cyc12.vhd?rev=1.1&content-type=text/x-cvsweb-markup

    Index: jop_jpd_cyc12.vhd
    ===================================================================
    --
    --
    -- This file is a part of JOP, the Java Optimized Processor
    --
    -- Copyright (C) 2001-2008, Martin Schoeberl (martin@j...)
    --
    -- This program is free software: you can redistribute it and/or modify
    -- it under the terms of the GNU General Public License as published by
    -- the Free Software Foundation, either version 3 of the License, or
    -- (at your option) any later version.
    --
    -- This program is distributed in the hope that it will be useful,
    -- but WITHOUT ANY WARRANTY; without even the implied warranty of
    -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    -- GNU General Public License for more details.
    --
    -- You should have received a copy of the GNU General Public License
    -- along with this program. If not, see <http://www.gnu.org/licenses/>.
    --


    --
    -- jop_jpd_cyc12.vhd
    --
    -- top level for JEOPARD/multiprocessor, cycore board with EP1C12
    --
    -- 2002-03-28 creation
    -- 2002-06-27 isa bus for CS8900
    -- 2002-07-27 io for baseio
    -- 2002-08-02 second uart (use first for download and debug)
    -- 2002-11-01 removed second uart
    -- 2002-12-01 split memio
    -- 2002-12-07 disable clkout
    -- 2003-02-21 adapt for new Cyclone board with EP1C6
    -- 2003-07-08 invertion of cts, rts to uart
    -- 2004-09-11 new extension module
    -- 2004-10-08 mul operands from a and b, single instruction
    -- 2005-05-12 added the bsy routing through extension
    -- 2005-08-15 sp_ov can be used to show a stoack overflow on the wd pin
    -- 2005-11-30 SimpCon for IO devices
    -- 2007-03-17 Use jopcpu and change component interface to records
    -- 2008-07-22 Add Jack's MAC units


    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.numeric_std.all;

    use work.jop_types.all;
    use work.sc_pack.all;
    use work.sc_arbiter_pack.all;
    use work.jop_config.all;

    entity jop is

    generic (
    ram_cnt : integer := 2; -- clock cycles for external ram
    -- rom_cnt : integer := 3; -- clock cycles for external rom OK for 20 MHz
    rom_cnt : integer := 15; -- clock cycles for external rom for 100 MHz
    jpc_width : integer := 10; -- address bits of java bytecode pc = cache size
    block_bits : integer := 4; -- 2*block_bits is number of cache blocks
    spm_width : integer := 0; -- size of scratchpad RAM (in number of address bits for 32-bit words)
    cpu_cnt : integer := 1; -- number of cpus
    arb_cnt : integer := 3 -- number of slaves
    );

    port (
    clk : in std_logic;
    --
    -- serial interface
    --
    ser_txd : out std_logic;
    ser_rxd : in std_logic;
    ser_ncts : in std_logic;
    ser_nrts : out std_logic;

    --
    -- watchdog
    --
    wd : out std_logic;
    freeio : out std_logic;

    --
    -- two ram banks
    --
    rama_a : out std_logic_vector(17 downto 0);
    rama_d : inout std_logic_vector(15 downto 0);
    rama_ncs : out std_logic;
    rama_noe : out std_logic; rama_nlb : out std_logic; rama_nub : out std_logic; rama_nwe : out std_logic; ramb_a : out std_logic_vector(17 downto 0); ramb_d : inout std_logic_vector(15 downto 0); ramb_ncs : out std_logic; ramb_noe : out std_logic; ramb_nlb : out std_logic; ramb_nub : out std_logic; ramb_nwe : out std_logic; -- -- config/program flash and big nand flash -- fl_a : out std_logic_vector(18 downto 0); fl_d : inout std_logic_vector(7 downto 0); fl_ncs : out std_logic; fl_ncsb : out std_logic; fl_noe : out std_logic; fl_nwe : out std_logic; fl_rdy : in std_logic; -- -- I/O pins of board -- -- io_b : inout std_logic_vector(10 downto 1); io_l : inout std_logic_vector(20 downto 1); io_r : inout std_logic_vector(20 downto 1); io_t : inout std_logic_vector(6 downto 1) ); end jop; architecture rtl of jop is -- -- components: -- component pll is generic (multiply_by : natural; divide_by : natural); port ( inclk0 : in std_logic; c0 : out std_logic ); end component; -- -- Signals -- signal clk_int : std_logic; signal int_res : std_logic; signal res_cnt : unsigned(2 downto 0) := "000"; -- for the simulation attribute altera_attribute : string; attribute altera_attribute of res_cnt : signal is "POWER_UP_LEVEL=LOW"; -- -- jopcpu connections -- signal sc_arb_out : arb_out_type(0 to arb_cnt-1); signal sc_arb_in : arb_in_type(0 to arb_cnt-1); signal sc_mem_out : sc_out_type; signal sc_mem_in : sc_in_type; signal sc_io_out : sc_out_array_type(0 to cpu_cnt-1); signal sc_io_in : sc_in_array_type(0 to cpu_cnt-1); signal irq_in : irq_in_array_type(0 to cpu_cnt-1); signal irq_out : irq_out_array_type(0 to cpu_cnt-1); signal exc_req : exception_array_type(0 to cpu_cnt-1); -- -- IO interface -- signal ser_in : ser_in_type; signal ser_out : ser_out_type; type wd_out_array is array (0 to cpu_cnt-1) of std_logic; signal wd_out : wd_out_array; -- for generation of internal reset -- memory interface signal ram_addr : std_logic_vector(17 downto 0); signal ram_dout : std_logic_vector(31 downto 0); signal ram_din : std_logic_vector(31 downto 0); signal ram_dout_en : std_logic; signal ram_ncs : std_logic; signal ram_noe : std_logic; signal ram_nwe : std_logic; -- cmpsync signal sync_in_array : sync_in_array_type(0 to cpu_cnt-1); signal sync_out_array : sync_out_array_type(0 to cpu_cnt-1); -- remove the comment for RAM access counting -- signal ram_count : std_logic; -- control channel for HW methods signal cc_out_data : std_logic_vector(31 downto 0); signal cc_out_wr : std_logic; signal cc_out_rdy : std_logic; signal cc_in_data : std_logic_vector(31 downto 0); signal cc_in_wr : std_logic; signal cc_2_rdy : std_logic; signal cc_2_data : std_logic_vector(31 downto 0); signal cc_2_wr : std_logic; signal cc_in_rdy : std_logic; begin -- -- intern reset -- no extern reset, epm7064 has too less pins -- process(clk_int) begin if rising_edge(clk_int) then if (res_cnt/="111") then res_cnt <= res_cnt+1; end if; int_res <= not res_cnt(0) or not res_cnt(1) or not res_cnt(2); end if; end process; -- -- components of jop -- pll_inst : pll generic map( multiply_by => pll_mult, divide_by => pll_div ) port map ( inclk0 => clk, c0 => clk_int ); wd <= wd_out(0); gen_cpu: for i in 0 to cpu_cnt-1 generate cmp_cpu: entity work.jopcpu generic map( jpc_width => jpc_width, block_bits => block_bits, spm_width => spm_width ) port map(clk_int, int_res, sc_arb_out(i), sc_arb_in(i), sc_io_out(i), sc_io_in(i), irq_in(i), irq_out(i), exc_req(i)); end generate; cmp_arbiter: entity work.arbiter generic map( addr_bits => SC_ADDR_SIZE, cpu_cnt => arb_cnt ) port map(clk_int, int_res, sc_arb_out, sc_arb_in, sc_mem_out, sc_mem_in -- Enable for use with Round Robin Arbiter -- sync_out_array(1) ); cmp_scm: entity work.sc_mem_if generic map ( ram_ws => ram_cnt-1, rom_ws => rom_cnt-1 ) port map (clk_int, int_res, sc_mem_out, sc_mem_in, ram_addr => ram_addr, ram_dout => ram_dout, ram_din => ram_din, ram_dout_en => ram_dout_en, ram_ncs => ram_ncs, ram_noe => ram_noe, ram_nwe => ram_nwe, fl_a => fl_a, fl_d => fl_d, fl_ncs => fl_ncs, fl_ncsb => fl_ncsb, fl_noe => fl_noe, fl_nwe => fl_nwe, fl_rdy => fl_rdy ); -- syncronization of processors cmp_sync: entity work.cmpsync generic map ( cpu_cnt => cpu_cnt) port map ( clk => clk_int, reset => int_res, sync_in_array => sync_in_array, sync_out_array => sync_out_array ); -- io for processor 0 cmp_io: entity work.scio generic map ( cpu_id => 0, cpu_cnt => cpu_cnt ) port map (clk_int, int_res, sc_io_out(0), sc_io_in(0), irq_in(0), irq_out(0), exc_req(0), sync_out => sync_out_array(0), sync_in => sync_in_array(0), txd => ser_txd, rxd => ser_rxd, ncts => ser_ncts, nrts => ser_nrts, wd => wd_out(0), l => io_l, r => io_r, t => io_t, --b => io_b -- remove the comment for RAM access counting -- ram_cnt => ram_count inhibit => '0', cc_out_data => cc_in_data, cc_out_wr => cc_in_wr, cc_out_rdy => cc_in_rdy, cc_in_data => cc_out_data, cc_in_wr => cc_out_wr, cc_in_rdy => cc_out_rdy ); -- io for processors with only sc_sys -- gen_io: for i in 1 to cpu_cnt-1 generate -- cmp_io2: entity work.sc_sys generic map ( -- addr_bits => 4, -- clk_freq => clk_freq, -- cpu_id => i, -- cpu_cnt => cpu_cnt -- ) -- port map( -- clk => clk_int, -- reset => int_res, -- address => sc_io_out(i).address(3 downto 0), -- wr_data => sc_io_out(i).wr_data, -- rd => sc_io_out(i).rd, -- wr => sc_io_out(i).wr, -- rd_data => sc_io_in(i).rd_data, -- rdy_cnt => sc_io_in(i).rdy_cnt, -- -- irq_in => irq_in(i), -- irq_out => irq_out(i), -- exc_req => exc_req(i), -- -- sync_out => sync_out_array(i), -- sync_in => sync_in_array(i), -- wd => wd_out(i) -- -- remove the comment for RAM access counting -- -- ram_count => ram_count -- ); -- -- end generate; -- HW methods cp1 : entity work.mac_coprocessor generic map ( id => x"01", version => x"1234" ) port map ( clk => clk_int, reset => int_res, sc_mem_out => sc_arb_out(1), sc_mem_in => sc_arb_in(1), cc_out_data => cc_out_data, cc_out_wr => cc_out_wr, cc_out_rdy => cc_out_rdy, cc_in_data => cc_2_data, cc_in_wr => cc_2_wr, cc_in_rdy => cc_2_rdy ); cp2 : entity work.mac_coprocessor generic map ( id => x"02", version => x"abcd" ) port map ( clk => clk_int, reset => int_res, sc_mem_out => sc_arb_out(2), sc_mem_in => sc_arb_in(2), cc_out_data => cc_2_data, cc_out_wr => cc_2_wr, cc_out_rdy => cc_2_rdy, cc_in_data => cc_in_data, cc_in_wr => cc_in_wr, cc_in_rdy => cc_in_rdy ); process(ram_dout_en, ram_dout) begin if ram_dout_en='1' then rama_d <= ram_dout(15 downto 0); ramb_d <= ram_dout(31 downto 16); else rama_d <= (others => 'Z'); ramb_d <= (others => 'Z'); end if; end process; ram_din <= ramb_d & rama_d; -- remove the comment for RAM access counting -- ram_count <= ram_ncs; -- -- To put this RAM address in an output register -- we have to make an assignment (FAST_OUTPUT_REGISTER) -- rama_a <= ram_addr; rama_ncs <= ram_ncs; rama_noe <= ram_noe; rama_nwe <= ram_nwe; rama_nlb <= '0'; rama_nub <= '0'; ramb_a <= ram_addr; ramb_ncs <= ram_ncs; ramb_noe <= ram_noe; ramb_nwe <= ram_nwe; ramb_nlb <= '0'; ramb_nub <= '0'; freeio <= 'Z'; end rtl;

     
    Copyright (c) 1999 OPENCORES.ORG. All rights reserved.