11.4.9.3 SmartGen RAM

The RAM cells in the MX family supports asynchronous and synchronous dual-port RAM. The basic RAM cells can be configured as 32x8 or 64x4. However, most synthesis tools cannot infer technology specific features (such as RAM cells). The following example shows an SmartGen structural implementation for instantiation. Although the behavioral description is synthesizeable, the implementation is not optimal for speed and area. Using SmartGen, generate a 32x16 dual port RAM with the configuration shown in Figure below. Save the structured Verilog or VHDL implementations as “ram.”

Figure 11-43. RAM Cells
VHDL
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity ram32_16 is
port (WAddress, RAddress:in std_logic_vector(4 downto 0);
Data : in std_logic_vector (15 downto 0);
Aclr, WClock, RClock,WE,RE:in std_logic;
Q :out std_logic_vector (15 downto 0));
end ram32_16;
architecture rtl of ram32_16 is
component ram
port (Data : in std_logic_vector (15 downto 0);
Aclr : in std_logic;
WE : in std_logic ;
RE : in std_logic ;
WClock : in std_logic ;
RClock : in std_logic ;
WAddress : in std_logic_vector (4 downto 0);
RAddress : in std_logic_vector (4 downto 0);
Q : out std_logic_vector (15 downto 0));
end component;
begin
R_32_16: ram
port map (Data => Data,
Aclr => Aclr,
WE => WE,
WAddress => WAddress,
RE => RE,
RAddress => RAddress,
WClock => WClock,
RClock => RClock,
Q => Q);
end rtl;
Verilog
module ram (WAddress, RAddress, Data, WClock, WE,
RE, Rclock, Q);
input [4:0] WAddress, RAddress;
input [15:0] Data;
input Rclock, WClock;
input WE, RE;
output [15:0] Q;
ram R_32_16 (.Data(Data), .WE(WE), .RE(RE), .WClock(WClock),
.Rclock(Rclock), .Q(Q), .WAddress(WAddress),
.RAddress(RAddress));
endmodule