architecture Behavioral of bus_example is
+ signal example_mem_ce_s : std_logic;
+ signal example_mem_ce_r : std_logic;
+ signal example_mem_bls_s : std_logic_vector(3 downto 0);
+ signal example_mem_dout_s : std_logic_vector(31 downto 0);
begin
- data_o <= (others => '0');
+example_mem_instance: lx_example_mem
+ port map
+ (
+ -- Memory wiring for internal state automata use
+ clk_i => clk_i,
+ ce_i => '0',
+ adr_i => (others => '0'),
+ bls_i => (others => '0'),
+ dat_i => (others => '0'),
+ dat_o => open,
+ -- Memory wiring for Master CPU
+ clk_m => clk_i,
+ en_m => example_mem_ce_s,
+ we_m => example_mem_bls_s,
+ addr_m => address_i(9 downto 0),
+ din_m => data_i,
+ dout_m => example_mem_dout_s
+ );
+
+decoder_logic: process(ce_i, address_i)
+ begin
+ example_mem_ce_s <= '0';
+ example_mem_bls_s <= (others => '0');
+
+ if ce_i = '1' and address_i(11 downto 10) = "00" then
+ example_mem_ce_s <= '1';
+ example_mem_bls_s <= bls_i;
+ end if;
+ end process;
+
+output_multiplexer: process(example_mem_ce_r, example_mem_dout_s)
+ begin
+ data_o <= (others => '0');
+
+ if example_mem_ce_r = '1' then
+ data_o <= example_mem_dout_s;
+ end if;
+ end process;
+
+sync_update:
+ process
+ begin
+ wait until clk_i = '1' and clk_i'event;
+
+ example_mem_ce_r <= example_mem_ce_s;
+ end process;
+
end Behavioral;
);
end component;
+ -- Dualported memory for example componenet
+ component lx_example_mem
+ port
+ (
+ -- Memory wiring for internal state automata use
+ clk_i : in std_logic;
+ ce_i : in std_logic;
+ adr_i : in std_logic_vector(9 downto 0);
+ bls_i : in std_logic_vector(3 downto 0);
+ dat_i : in std_logic_vector(31 downto 0);
+ dat_o : out std_logic_vector(31 downto 0);
+ -- Memory wiring for Master CPU
+ clk_m : in std_logic;
+ en_m : in std_logic;
+ we_m : in std_logic_vector(3 downto 0);
+ addr_m : in std_logic_vector(9 downto 0);
+ din_m : in std_logic_vector(31 downto 0);
+ dout_m : out std_logic_vector(31 downto 0)
+ );
+ end component;
+
-- Measurement interconnect
component bus_measurement
port
vhdl work "lx_crosdom_ser_fifo.vhd"
vhdl work "bus_measurement.vhd"
vhdl work "bus_example.vhd"
+vhdl work "lx_example_mem.vhd"
vhdl work "lx_dad_top.vhd"
--- /dev/null
+library ieee;
+
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+use ieee.std_logic_unsigned.all;
+use ieee.numeric_std.all;
+use work.lx_dad_pkg.all;
+
+-- 8 kB data memory for internal state automata
+-- Can be accessed from the Master CPU
+
+entity lx_example_mem is
+ port
+ (
+ -- Memory wiring for internal state automata use
+ clk_i : in std_logic;
+ ce_i : in std_logic;
+ adr_i : in std_logic_vector(9 downto 0);
+ bls_i : in std_logic_vector(3 downto 0);
+ dat_i : in std_logic_vector(31 downto 0);
+ dat_o : out std_logic_vector(31 downto 0);
+ -- Memory wiring for Master CPU
+ clk_m : in std_logic;
+ en_m : in std_logic;
+ we_m : in std_logic_vector(3 downto 0);
+ addr_m : in std_logic_vector(9 downto 0);
+ din_m : in std_logic_vector(31 downto 0);
+ dout_m : out std_logic_vector(31 downto 0)
+ );
+end lx_example_mem;
+
+architecture rtl of lx_example_mem is
+begin
+
+I_RAMB: xilinx_dualport_bram
+ generic map
+ (
+ we_width => 4,
+ byte_width => 8,
+ address_width => 10,
+ port_a_type => READ_FIRST,
+ port_b_type => READ_FIRST
+ )
+ port map
+ (
+ -- Internal state automata port
+ clka => clk_i,
+ rsta => '0',
+ ena => ce_i,
+ wea => bls_i,
+ addra => adr_i,
+ dina => dat_i,
+ douta => dat_o,
+
+ -- Master CPU port
+ clkb => clk_m,
+ rstb => '0',
+ enb => en_m,
+ web => we_m,
+ addrb => addr_m,
+ dinb => din_m,
+ doutb => dout_m
+ );
+
+end rtl;