]> AND Private Git Repository - blast.git/blob - lib/implementations/apf27-wb-master_impl.xml
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
nearly finished GroupBlock VHDL gen
[blast.git] / lib / implementations / apf27-wb-master_impl.xml
1 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
2 <block_impl ref_name="apf27-wb-master.xml" ref_md5="">
3   <comments>
4     <author firstname="stephane" lastname="Domas" mail="sdomas@univ-fcomte.fr" />
5     <date creation="2015-04-27" />
6     <related_files list="interconn.vhd,clkrstgen.vhd"/>
7     <description>
8       This component is an interface between i.MX signals
9       and the interconnector component.
10     </description>
11     <notes>
12    On i.MX&lt;->FPGA connection : the WEIM part of i.MX has a 16 bits bus address
13    but only [1:12] bits are connected to FPGA pins. From the i.MX point of view
14    it means that reading in memory mapped address 0x0002 or 0x0003 gives the same
15    result since the LSB bit of the address is not transmited.
16    
17    These 12 bits are forwarded to the interconnector which is responsible to
18    determine for what IP the data and addr signals must be routed.
19
20     </notes>
21   </comments>
22
23   <libraries>
24     <library name="IEEE">
25       <package name="std_logic_1164" use="all"/>
26       <package name="numeric_std" use="all"/>
27     </library>
28   </libraries>
29
30   <architecture>
31
32   signal write      : std_logic;
33   signal read       : std_logic;
34   signal strobe     : std_logic;
35   signal writedata  : std_logic_vector(@{wb_data_width}-1 downto 0);
36   signal address    : std_logic_vector(@{wb_addr_width}-1 downto 0);
37
38 begin
39
40 -- ----------------------------------------------------------------------------
41 --  External signals synchronization process
42 -- ----------------------------------------------------------------------------
43   process(@{clk}, @{reset})
44   begin
45     if(@{reset}='1') then
46       write     &lt;= '0';
47       read      &lt;= '0';
48       strobe    &lt;= '0';
49       writedata &lt;= (others => '0');
50       address   &lt;= (others => '0');
51     elsif(rising_edge(@{clk})) then
52       strobe    &lt;= not (@{imx_cs_n}) and not(@{imx_oe_n} and @{imx_eb3_n});
53       write     &lt;= not (@{imx_cs_n} or @{imx_eb3_n});
54       read      &lt;= not (@{imx_cs_n} or @{imx_oe_n});
55       address   &lt;= @{imx_addr};
56       writedata &lt;= @{imx_data};
57     end if;
58   end process;
59
60   @{addr_o}   &lt;= address when (strobe = '1') else (others => '0');
61   @{dat_o}    &lt;= writedata when (write = '1') else (others => '0');
62   @{stb_o}    &lt;= strobe;
63   @{we_o}     &lt;= write;
64   @{cyc_o}    &lt;= strobe;
65
66   @{imx_data} &lt;= @{dat_i} when(read = '1' ) else (others => 'Z');
67   
68   </architecture>
69 </block_impl>