Subversion Repositories f9daq

Rev

Blame | Last modification | View Log | RSS feed

  1. ----------------------------------------------------------------------------------
  2. -- Company:
  3. -- Engineer:
  4. --
  5. -- Create Date: 13.10.2018 11:17:24
  6. -- Design Name:
  7. -- Module Name: single_port_bram - Behavioral
  8. -- Project Name:
  9. -- Target Devices:
  10. -- Tool Versions:
  11. -- Description:
  12. --
  13. -- Dependencies:
  14. --
  15. -- Revision:
  16. -- Revision 0.01 - File Created
  17. -- Additional Comments:
  18. --
  19. ----------------------------------------------------------------------------------
  20.  
  21.  
  22. library IEEE;
  23. use IEEE.STD_LOGIC_1164.ALL;
  24.  
  25. -- Uncomment the following library declaration if using
  26. -- arithmetic functions with Signed or Unsigned values
  27. use IEEE.NUMERIC_STD.ALL;
  28.  
  29. -- Uncomment the following library declaration if instantiating
  30. -- any Xilinx leaf cells in this code.
  31. --library UNISIM;
  32. --use UNISIM.VComponents.all;
  33.  
  34. entity single_port_bram is
  35.    
  36.     generic (
  37.               bit_num : natural := 10; --number of data bits
  38.               buffer_size : natural := 26); -- buffer size in bits, 5 bit gets 32 different values
  39.    
  40.     port (
  41.            clk: in std_logic;
  42.            bram_en: in std_logic;
  43.            wr_en: in std_logic;
  44.            addr: in unsigned ( (buffer_size - 1) downto 0 );
  45.            data_in : in unsigned ( (bit_num - 1) downto 0 ); --data from ADC
  46.            data_out : out unsigned ( (bit_num - 1) downto 0 ) -- data for PE_unit
  47.           );
  48.        
  49. end single_port_bram;
  50.  
  51. architecture Behavioral of single_port_bram is
  52.  
  53.    
  54.     type BRAM_ARRAY is array ( 0 to (2**buffer_size - 1)  ) of unsigned ( (bit_num - 1) downto 0 ); -- bin_num * bit num array for hist storage
  55.     signal bram : BRAM_ARRAY := (others => (others => '0'));
  56.  
  57.  
  58.  
  59. begin
  60.  
  61.     BRAM_handle: process(clk)
  62.        
  63.     begin
  64.    
  65.         if rising_edge(clk) then
  66.             if (bram_en = '1') then
  67.                 if (wr_en = '1') then
  68.                     bram(to_integer(addr)) <= data_in;
  69.                 end if;
  70.                 data_out <= bram(to_integer(addr));
  71.             end if;
  72.         end if;
  73.     end process;
  74.        
  75.  
  76. end Behavioral;
  77.