Aquí está mi código que usé para crear un elemento de memoria de palabras de 16kB de 16 bits en vhdl
library std;
use std.standard.all;
library ieee;
use ieee.std_logic_1164.all;
library ieee;
use ieee.numeric_std.all;
entity memory is
port(address: in std_logic_vector(15 downto 0);
data_in: in std_logic_vector(15 downto 0);
data_out: out std_logic_vector(15 downto 0);
CLK: in std_logic;
memread, memwrite, init: in std_logic);
end entity;
architecture memory_behave of memory is
subtype word is std_logic_vector(15 downto 0);
type ram is array(0 to 2048) of word;
signal fullram: ram := ((others => (others =>'0')));
begin
process(CLK, memwrite, memread, address, data_in, fullram, init)
variable ram_addr_in: natural range 0 to 2048;
begin
if(CLK = '1') then
ram_addr_in := to_integer(unsigned(address));
if(init = '1') then
-----------initializing some instructions------------
fullram(0) <= "0001000001111111"; --ADI ra, rb, 3F
fullram(1) <= "0101001011111111"; --SW rb, ra, 3F
-----------------------------------------------------
end if;
if(memwrite = '1' and memread = '0') then
fullram(ram_addr_in) <= data_in;
elsif (memwrite = '0' and memread = '1') then
data_out <= fullram(ram_addr_in);
end if;
end if;
end process;
end memory_behave;
Estoy obteniendo muchos pestillos inferidos (2048 x 16 = 32768 veces para ser precisos) que veo está bien porque este es un elemento de memoria. ¿Es esto realmente correcto o necesito quitar los pestillos?
También, al compilar en Quartus Prime versión 16.1.0, obtengo muchas declaraciones que indican Info (10041): Inferred latch for "fullram[2048][0]" at memory.vhdl(23)
lo que ralentiza el proceso significativamente. Esto lleva mucho tiempo cuando subo la memoria para decir 64kB. ¿Hay alguna forma para que el quartus NO muestre tal advertencia?