Expose ram init file and memory size through toplevel
authorOlof Kindgren <olof.kindgren@gmail.com>
Fri, 23 Aug 2019 11:18:39 +0000 (13:18 +0200)
committerOlof Kindgren <olof.kindgren@gmail.com>
Fri, 23 Aug 2019 11:18:39 +0000 (13:18 +0200)
fpga/pp_soc_memory.vhd
fpga/toplevel.vhd

index 1a5ca8175c5771720681a731d5f31aeea0b97b33..bdb1882715291afeb9a10dee4572bf9742cc863b 100644 (file)
@@ -11,7 +11,8 @@ use work.pp_utilities.all;
 --! @brief Simple memory module for use in Wishbone-based systems.
 entity pp_soc_memory is
        generic(
-               MEMORY_SIZE : natural := 4096 --! Memory size in bytes.
+               MEMORY_SIZE   : natural := 4096; --! Memory size in bytes.
+               RAM_INIT_FILE : string
        );
        port(
                clk : in std_logic;
@@ -48,7 +49,7 @@ architecture behaviour of pp_soc_memory is
         return temp_ram;
     end function;
 
-    signal memory : ram_t := init_ram("firmware.hex");
+    signal memory : ram_t := init_ram(RAM_INIT_FILE);
 
        attribute ram_style : string;
        attribute ram_style of memory : signal is "block";
index 4a124fa0bfb59a2c718c3ef7c2cedd706500e808..17842c884143d0b908fd5490035a3c2a05c28cee 100644 (file)
@@ -3,13 +3,18 @@
 
 library ieee;
 use ieee.std_logic_1164.all;
+use ieee.math_real.all;
 
 library work;
 use work.wishbone_types.all;
 
+
 -- 0x00000000: Main memory (1 MB)
 -- 0xc0002000: UART0 (for host communication)
 entity toplevel is
+  generic (
+    MEMORY_SIZE   : positive := 1048576;
+    RAM_INIT_FILE : string   := "firmware.hex");
        port(
                clk       : in  std_logic;
                reset_n   : in  std_logic;
@@ -54,7 +59,7 @@ architecture behaviour of toplevel is
        signal uart0_ack_out : std_logic;
 
        -- Main memory signals:
-       signal main_memory_adr_in  : std_logic_vector(19 downto 0);
+       signal main_memory_adr_in  : std_logic_vector(positive(ceil(log2(real(MEMORY_SIZE))))-1 downto 0);
        signal main_memory_dat_in  : std_logic_vector(63 downto 0);
        signal main_memory_dat_out : std_logic_vector(63 downto 0);
        signal main_memory_cyc_in  : std_logic;
@@ -190,7 +195,8 @@ begin
 
        main_memory: entity work.pp_soc_memory
                generic map(
-                       MEMORY_SIZE => 1048576
+                       MEMORY_SIZE   => MEMORY_SIZE,
+                       RAM_INIT_FILE => RAM_INIT_FILE
                ) port map(
                        clk => system_clk,
                        reset => reset,