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

Private GIT Repository
finalized analysis with clkconvert + started testbench 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     <log creation="2018-05-02">
6       <modification id="1" date="2018-05-02">
7         changed to comply with new structure
8       </modification>
9     </log>
10     <notes>
11         On i.MX&lt;->FPGA connection : the WEIM part of i.MX has a 16 bits bus address
12         but only [1:12] bits are connected to FPGA pins. From the i.MX point of view
13         it means that reading in memory mapped address 0x0002 or 0x0003 gives the same
14         result since the LSB bit of the address is not transmited.
15         
16         These 12 bits are forwarded to the interconnector which is responsible to
17         determine for what IP the data and addr signals must be routed.
18     </notes>
19   </comments>
20
21   <libraries>
22     <library name="IEEE">
23       <package name="std_logic_1164" use="all"/>
24       <package name="numeric_std" use="all"/>
25     </library>
26   </libraries>
27
28   <architecture>
29
30   signal write      : std_logic;
31   signal read       : std_logic;
32   signal strobe     : std_logic;
33   signal writedata  : std_logic_vector(@{wb_data_width}-1 downto 0);
34   signal address    : std_logic_vector(@{wb_addr_width}-1 downto 0);
35
36 begin
37
38 -- ----------------------------------------------------------------------------
39 --  External signals synchronization process
40 -- ----------------------------------------------------------------------------
41   process(@{clk}, @{reset})
42   begin
43     if(@{reset}='1') then
44       write     &lt;= '0';
45       read      &lt;= '0';
46       strobe    &lt;= '0';
47       writedata &lt;= (others => '0');
48       address   &lt;= (others => '0');
49     elsif(rising_edge(@{clk})) then
50       strobe    &lt;= not (@{imx_cs_n}) and not(@{imx_oe_n} and @{imx_eb3_n});
51       write     &lt;= not (@{imx_cs_n} or @{imx_eb3_n});
52       read      &lt;= not (@{imx_cs_n} or @{imx_oe_n});
53       address   &lt;= @{imx_addr};
54       writedata &lt;= @{imx_data};
55     end if;
56   end process;
57
58   @{addr_o}   &lt;= address when (strobe = '1') else (others => '0');
59   @{dat_o}    &lt;= writedata when (write = '1') else (others => '0');
60   @{stb_o}    &lt;= strobe;
61   @{we_o}     &lt;= write;
62   @{cyc_o}    &lt;= strobe;
63
64   @{imx_data} &lt;= @{dat_i} when(read = '1' ) else (others => 'Z');
65   
66   </architecture>
67 </block_impl>