1 -------------------------------------------------------------------------------
4 -- Chip toplevel design with MMC feature set
6 -- $Id: chip-mmc-a.vhd,v 1.6 2005/04/07 20:44:23 arniml Exp $
8 -- Copyright (c) 2005, Arnim Laeuger (arniml@opencores.org)
10 -- All rights reserved, see COPYING.
12 -- Redistribution and use in source and synthezised forms, with or without
13 -- modification, are permitted provided that the following conditions are met:
15 -- Redistributions of source code must retain the above copyright notice,
16 -- this list of conditions and the following disclaimer.
18 -- Redistributions in synthesized form must reproduce the above copyright
19 -- notice, this list of conditions and the following disclaimer in the
20 -- documentation and/or other materials provided with the distribution.
22 -- Neither the name of the author nor the names of other contributors may
23 -- be used to endorse or promote products derived from this software without
24 -- specific prior written permission.
26 -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27 -- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
28 -- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 -- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
30 -- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31 -- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32 -- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33 -- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34 -- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 -- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36 -- POSSIBILITY OF SUCH DAMAGE.
38 -- Please report bugs to the author, but before you do so, please
39 -- make sure that this is not a derivative work and that
40 -- you have the latest version of this file.
42 -- The latest version of this file can be found at:
43 -- http://www.opencores.org/projects.cgi/web/spi_boot/overview
45 -------------------------------------------------------------------------------
48 use ieee.std_logic_1164.all;
51 architecture mmc of chip is
55 width_set_sel_g : integer := 4;
56 width_bit_cnt_g : integer := 6;
57 width_img_cnt_g : integer := 2;
58 num_bits_per_img_g : integer := 18;
59 sd_init_g : integer := 0;
60 mmc_compat_clk_div_g : integer := 0;
61 width_mmc_clk_div_g : integer := 0;
62 reset_level_g : integer := 0
66 reset_i : in std_logic;
67 set_sel_i : in std_logic_vector(width_set_sel_g-1 downto 0);
68 spi_clk_o : out std_logic;
69 spi_cs_n_o : out std_logic;
70 spi_data_in_i : in std_logic;
71 spi_data_out_o : out std_logic;
72 spi_en_outs_o : out std_logic;
73 start_i : in std_logic;
74 mode_i : in std_logic;
75 config_n_o : out std_logic;
76 detached_o : out std_logic;
77 cfg_init_n_i : in std_logic;
78 cfg_done_i : in std_logic;
79 dat_done_i : in std_logic;
80 cfg_clk_o : out std_logic;
81 cfg_dat_o : out std_logic
85 signal spi_clk_s : std_logic;
86 signal spi_cs_n_s : std_logic;
87 signal spi_data_out_s : std_logic;
88 signal spi_en_outs_s : std_logic;
90 signal set_sel_s : std_logic_vector(3 downto 0);
94 set_sel_s <= not set_sel_n_i;
98 width_set_sel_g => 4, -- 16 sets
99 width_bit_cnt_g => 12, -- 512 bytes per block
100 width_img_cnt_g => 2, -- 4 images
101 num_bits_per_img_g => 18, -- 256 kByte per image
102 sd_init_g => 0, -- no SD specific initialization
103 mmc_compat_clk_div_g => 13, -- MMC compat 400 kHz > 10 MHz / (13*2)
104 width_mmc_clk_div_g => 4 -- need 5 bits for MMC compat divider
109 set_sel_i => set_sel_s,
110 spi_clk_o => spi_clk_s,
111 spi_cs_n_o => spi_cs_n_s,
112 spi_data_in_i => spi_data_in_i,
113 spi_data_out_o => spi_data_out_s,
114 spi_en_outs_o => spi_en_outs_s,
117 config_n_o => config_n_o,
118 detached_o => detached_o,
119 cfg_init_n_i => cfg_init_n_i,
120 cfg_done_i => cfg_done_i,
121 dat_done_i => dat_done_i,
122 cfg_clk_o => cfg_clk_o,
123 cfg_dat_o => cfg_dat_o
126 -----------------------------------------------------------------------------
127 -- Three state drivers for SPI outputs.
128 -----------------------------------------------------------------------------
129 spi_clk_o <= spi_clk_s
130 when spi_en_outs_s = '1' else
132 spi_cs_n_o <= spi_cs_n_s
133 when spi_en_outs_s = '1' else
135 spi_data_out_o <= spi_data_out_s
136 when spi_en_outs_s = '1' else
142 -------------------------------------------------------------------------------
145 -- $Log: chip-mmc-a.vhd,v $
146 -- Revision 1.6 2005/04/07 20:44:23 arniml
147 -- add new port detached_o
149 -- Revision 1.5 2005/03/09 19:48:34 arniml
150 -- invert level of set_sel input
152 -- Revision 1.4 2005/03/08 22:07:12 arniml
153 -- added set selection
155 -- Revision 1.3 2005/02/18 06:42:13 arniml
156 -- clarify wording for images
158 -- Revision 1.2 2005/02/16 18:54:39 arniml
159 -- added tri-state drivers for spi outputs
161 -- Revision 1.1 2005/02/08 20:41:32 arniml
164 -------------------------------------------------------------------------------