24.03.2013 Views

ModelSim SE User's Manual - Electrical and Computer Engineering

ModelSim SE User's Manual - Electrical and Computer Engineering

ModelSim SE User's Manual - Electrical and Computer Engineering

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

UM-104 4 - VHDL simulation<br />

’02 example<br />

<strong>ModelSim</strong> <strong>SE</strong> User’s <strong>Manual</strong><br />

end loop;<br />

return x;<br />

end natural_to_sulv;<br />

end conversions;<br />

---------------------------------------------------------------------------<br />

---<br />

-- Source: sp_syn_ram_protected.vhd<br />

-- Component: VHDL synchronous, single-port RAM<br />

-- Remarks: Various VHDL examples: r<strong>and</strong>om access memory (RAM)<br />

---------------------------------------------------------------------------<br />

---<br />

LIBRARY ieee;<br />

U<strong>SE</strong> ieee.std_logic_1164.ALL;<br />

U<strong>SE</strong> ieee.numeric_std.ALL;<br />

ENTITY sp_syn_ram_protected IS<br />

GENERIC (<br />

data_width : positive := 8;<br />

addr_width : positive := 3<br />

);<br />

PORT (<br />

inclk : IN std_logic;<br />

outclk : IN std_logic;<br />

we : IN std_logic;<br />

addr : IN unsigned(addr_width-1 DOWNTO 0);<br />

data_in : IN std_logic_vector(data_width-1 DOWNTO 0);<br />

data_out : OUT std_logic_vector(data_width-1 DOWNTO 0)<br />

);<br />

END sp_syn_ram_protected;<br />

ARCHITECTURE intarch OF sp_syn_ram_protected IS<br />

TYPE mem_type IS PROTECTED<br />

PROCEDURE write ( data : IN std_logic_vector(data_width-1 downto 0);<br />

addr : IN unsigned(addr_width-1 DOWNTO 0));<br />

IMPURE FUNCTION read ( addr : IN unsigned(addr_width-1 DOWNTO 0))<br />

RETURN<br />

std_logic_vector;<br />

END PROTECTED mem_type;<br />

TYPE mem_type IS PROTECTED BODY<br />

TYPE mem_array IS ARRAY (0 TO 2**addr_width-1) OF<br />

std_logic_vector(data_width-1 DOWNTO 0);<br />

VARIABLE mem : mem_array;<br />

PROCEDURE write ( data : IN std_logic_vector(data_width-1 downto 0);<br />

addr : IN unsigned(addr_width-1 DOWNTO 0)) IS<br />

BEGIN<br />

mem(to_integer(addr)) := data;<br />

END;<br />

IMPURE FUNCTION read ( addr : IN unsigned(addr_width-1 DOWNTO 0))<br />

RETURN<br />

std_logic_vector IS<br />

BEGIN

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!