summaryrefslogtreecommitdiffstats
path: root/fpga/hp_lcd_driver/fb_ram.vhdl
blob: 89c1a1abdb549b92c3e3b74174707cf1964e30d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;
use work.all;

entity fb_ram is
  Port ( 
    clka : in STD_LOGIC;
    ena : in STD_LOGIC;
    wea : in STD_LOGIC_VECTOR ( 3 downto 0 );
    addra : in STD_LOGIC_VECTOR ( 15 downto 0 );
    dina : in STD_LOGIC_VECTOR ( 31 downto 0 );
    douta : out STD_LOGIC_VECTOR ( 31 downto 0 );
    clkb : in STD_LOGIC;
    web : in STD_LOGIC_VECTOR ( 3 downto 0 );
    addrb : in STD_LOGIC_VECTOR ( 15 downto 0 );
    dinb : in STD_LOGIC_VECTOR ( 31 downto 0 );
    doutb : out STD_LOGIC_VECTOR ( 31 downto 0 )
  );
end fb_ram;

architecture Behavioural of fb_ram is
type t_d is array (0 to 3) of std_logic_vector(2 downto 0);

signal s_dina:t_d;
signal s_dinb:t_d;
signal s_douta:t_d;
signal s_doutb:t_d;

begin


  g_fbram: for i in 0 to 3 generate

    s_dina(i)(2) <= dina((8*i)+7);
    s_dina(i)(1) <= dina((8*i)+4);
    s_dina(i)(0) <= dina((8*i)+1);

    douta((8*i)+7) <= s_douta(i)(2);
    douta((8*i)+6) <= s_douta(i)(2);
    douta((8*i)+5) <= s_douta(i)(2);
    douta((8*i)+4) <= s_douta(i)(1);
    douta((8*i)+3) <= s_douta(i)(1);
    douta((8*i)+2) <= s_douta(i)(1);
    douta((8*i)+1) <= s_douta(i)(0);
    douta((8*i)+0) <= s_douta(i)(0);

    s_dinb(i)(2) <= dinb((8*i)+7);
    s_dinb(i)(1) <= dinb((8*i)+4);
    s_dinb(i)(0) <= dinb((8*i)+1);

    doutb((8*i)+7) <= s_doutb(i)(2);
    doutb((8*i)+6) <= s_doutb(i)(2);
    doutb((8*i)+5) <= s_doutb(i)(2);
    doutb((8*i)+4) <= s_doutb(i)(1);
    doutb((8*i)+3) <= s_doutb(i)(1);
    doutb((8*i)+2) <= s_doutb(i)(1);
    doutb((8*i)+1) <= s_doutb(i)(0);
    doutb((8*i)+0) <= s_doutb(i)(0);


 
    fb_ram_i : entity work.blk_mem_gen_1
        port map (
            clka  => clka,
            ena   => ena,
            wea   => wea(i),
            addra => addra,
            dina  => s_dina(i),
            douta => s_douta(i),
            clkb  => clkb,
            web   => web(0),
            addrb => addrb,
            dinb  => s_dinb(i),
            doutb => s_doutb(i)
            );

    end generate;


end Behavioural;