]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/lx-dad.git/blob - hw/bus_sensor.vhd
Clean DAD test code a little to use symbolic names for registers and bits.
[fpga/lx-cpu1/lx-dad.git] / hw / bus_sensor.vhd
1 library ieee;\r
2 \r
3 use ieee.std_logic_1164.all;\r
4 use ieee.numeric_std.all;\r
5 use work.lx_dad_pkg.all;\r
6 \r
7 -- Connects sampling memory and SPI interface\r
8 \r
9 entity bus_sensor is\r
10         port\r
11         (\r
12                 -- Clock\r
13                 clk_i        : in std_logic;\r
14                 -- Chip enable\r
15                 ce_i         : in std_logic;\r
16                 -- Global Reset\r
17                 reset_i      : in std_logic;\r
18                 -- Master CPU peripheral bus\r
19                 bls_i        : in std_logic_vector(3 downto 0);\r
20                 address_i    : in std_logic_vector(10 downto 0);\r
21                 data_i       : in std_logic_vector(31 downto 0);\r
22                 data_o       : out std_logic_vector(31 downto 0);\r
23 \r
24                 led             : out std_logic;\r
25                 -- Memory wiring for internal state automata use\r
26                 ce_a_i   : in std_logic;\r
27                 adr_a_i  : in std_logic_vector(10 downto 0);\r
28                 bls_a_i  : in std_logic_vector(3 downto 0);\r
29                 dat_a_i  : in std_logic_vector(31 downto 0)\r
30                 -- Non bus signals\r
31                 --\r
32                 -- Add there external component signals\r
33   );\r
34 end bus_sensor;\r
35 \r
36 architecture Behavioral of bus_sensor is\r
37 \r
38         signal sensor_mem_ce_s   : std_logic;\r
39         signal sensor_mem_ce_r   : std_logic;\r
40         signal sensor_mem_bls_s  : std_logic_vector(3 downto 0);\r
41         signal sensor_mem_dout_s : std_logic_vector(31 downto 0);\r
42         \r
43         signal led_i: std_logic:='1';\r
44 begin\r
45 \r
46 \r
47 \r
48                         led <= led_i;\r
49 \r
50 sensor_mem_instance: sensor_mem\r
51         port map\r
52         (\r
53                 -- Memory wiring for internal state automata use\r
54                 clk_i  => clk_i,\r
55                 ce_i   => ce_a_i,\r
56                 adr_i  => adr_a_i,\r
57                 bls_i  => bls_a_i,\r
58                 dat_i  => dat_a_i,\r
59                 dat_o  => open,\r
60                 -- Memory wiring for Master CPU\r
61                 clk_m  => clk_i,\r
62                 en_m   => sensor_mem_ce_s,\r
63                 we_m   => sensor_mem_bls_s,\r
64                 addr_m => address_i(10 downto 0),\r
65                 din_m  => data_i,\r
66                 dout_m => sensor_mem_dout_s\r
67         );\r
68 \r
69 decoder_logic: process(ce_i, address_i, bls_i)\r
70         begin\r
71                 sensor_mem_ce_s <= '0';\r
72                 sensor_mem_bls_s <= (others => '0');\r
73 \r
74                 if ce_i = '1' then --and address_i(11 downto 10) = "00" then\r
75                         sensor_mem_ce_s <= '1';\r
76                         sensor_mem_bls_s <= bls_i;\r
77                 end if;\r
78         end process;\r
79 \r
80 output_multiplexer: process(sensor_mem_ce_r, sensor_mem_dout_s)\r
81         begin\r
82                 data_o <= (others => '0');\r
83 \r
84                 if sensor_mem_ce_r = '1' then\r
85                         data_o <= sensor_mem_dout_s;\r
86                 end if;\r
87         end process;\r
88 \r
89 sync_update:\r
90         process\r
91         begin\r
92                 wait until clk_i = '1' and clk_i'event;\r
93 \r
94                 sensor_mem_ce_r <= sensor_mem_ce_s;\r
95         end process;\r
96 \r
97 \r
98 end Behavioral;\r