Udsnit udnyttelse af Ram i FPGA

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;

 
Syntese i hvilken type enhed?Hvis det er en moderne Xilinx FPGA med Block RAMs, så husk at Block RAMs er synkrone.Din RAM design har behov for et ur, da det ellers vil syntetisere meget dårligt ved hjælp af logik stof.

Jeg går ud fra du er syntese ved hjælp af Xilinx ISE XST.Du skal skrive dit HDL på en bestemt måde, så XST kan udlede en blok RAM.Henvises til "XST User Guide" kapitel "HDL kodningsteknikker" afsnit "RAMs og rom'er".Det viser VHDL eksempler.
Senest redigeret af echo47 den 24 juni, 2007 10:51, edited 1 time i alt

 
thanx Echo for svar ..

RAM var målrettet til XC3s200 FPGA den Xilinx

og ur ret, jeg har ikke medtaget uret i havnen liste ...

siden im ny her jeg har kopieret koden fra Douglas Perry's bog og forsøgte at syntetisere det ...

 
Xilinx FPGA's har mange specielle funktioner, der kræver særlige kodningsteknikker.Hver ny Xilinx designeren bør læse hele XST manuel kapitlet "HDL kodningsteknikker".Et andet godt kapitel er "VHDL Language Support" eller "Verilog Language Support".

Held og lykke!

 

Welcome to EDABoard.com

Sponsor

Back
Top