N
Nikolai
Guest
hej ..
Jeg har skrevet følgende kode for et 64x16 ram ..
efter sammenfattende rapporter viser, at udsnittet udnyttelsesgraden er 41%.
Isnt at for meget ..Kan jeg minimere området besat.?
Im nye begrænsninger, så har det fået noget at gøre med området begrænsninger.?
Her er koden
library IEEE;
brug IEEE.STD_LOGIC_1164.ALL;
brug IEEE.STD_LOGIC_ARITH.ALL;
brug IEEE.STD_LOGIC_UNSIGNED.ALL;
enhed Ram_1k er
Port (addr: i std_logic_vector (15 downto 0);
sel: i STD_LOGIC;
RW: i STD_LOGIC;
klar: out STD_LOGIC;
data: InOut std_logic_vector (15 downto 0));
ende Ram_1k;
architecture Behavioral af Ram_1k er
begynd
proces (addr, SEL, RW)
type t_mem er array (0 til 63) i std_logic_vector (15 downto 0);
variabel mem_data: t_mem: =
( "0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000");
begynd
data <= "ZZZZZZZZZZZZZZZZ";
klar <= '0 ';
Hvis SEL = '1 'så
hvis rw = '1 'så
data <= mem_data (CONV_INTEGER (adr (15 downto 0))) efter 1 ns;
klar <= '1 ';
elsif rw = '0 'så
mem_data (CONV_INTEGER (adr (15 downto 0))): = data;
end if;
anden
data <= "ZZZZZZZZZZZZZZZZ" efter 1 ns;
end if;
end process;
ende Behavioral;
Jeg har skrevet følgende kode for et 64x16 ram ..
efter sammenfattende rapporter viser, at udsnittet udnyttelsesgraden er 41%.
Isnt at for meget ..Kan jeg minimere området besat.?
Im nye begrænsninger, så har det fået noget at gøre med området begrænsninger.?
Her er koden
library IEEE;
brug IEEE.STD_LOGIC_1164.ALL;
brug IEEE.STD_LOGIC_ARITH.ALL;
brug IEEE.STD_LOGIC_UNSIGNED.ALL;
enhed Ram_1k er
Port (addr: i std_logic_vector (15 downto 0);
sel: i STD_LOGIC;
RW: i STD_LOGIC;
klar: out STD_LOGIC;
data: InOut std_logic_vector (15 downto 0));
ende Ram_1k;
architecture Behavioral af Ram_1k er
begynd
proces (addr, SEL, RW)
type t_mem er array (0 til 63) i std_logic_vector (15 downto 0);
variabel mem_data: t_mem: =
( "0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000");
begynd
data <= "ZZZZZZZZZZZZZZZZ";
klar <= '0 ';
Hvis SEL = '1 'så
hvis rw = '1 'så
data <= mem_data (CONV_INTEGER (adr (15 downto 0))) efter 1 ns;
klar <= '1 ';
elsif rw = '0 'så
mem_data (CONV_INTEGER (adr (15 downto 0))): = data;
end if;
anden
data <= "ZZZZZZZZZZZZZZZZ" efter 1 ns;
end if;
end process;
ende Behavioral;