Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > vhdl:data memory

Reply
Thread Tools

vhdl:data memory

 
 
agnese.rosi@gmail.com
Guest
Posts: n/a
 
      02-29-2008
Hi,

I'm trying to writing a code suitable for a data memory but I have
some problem with the input decoder and the multiplexer:
- the decoder receives an address as input (std_logic_vector(7 downto
0)) in order to select one of 256 rows of the storage unit,which has
the typical row-column structure. Each row is formed by a 16-bit-
register (flip-flop) I've built the storage unit with e "generate"
command.
- the mux is driven by the same adress and has to choose one of the
256 rows.

The question is:how can I write the code for a mux that can accept as
input 256 16 bit-long std_logic_vector elements?And how can I write
the code for a decoder whose input is an 8 bit-long address?A for-loop
maybe?
I really don't know.

Thanks
Bye
 
Reply With Quote
 
 
 
 
Tricky
Guest
Posts: n/a
 
      02-29-2008
On Feb 29, 12:30 pm, (E-Mail Removed) wrote:
> Hi,
>
> I'm trying to writing a code suitable for a data memory but I have
> some problem with the input decoder and the multiplexer:
> - the decoder receives an address as input (std_logic_vector(7 downto
> 0)) in order to select one of 256 rows of the storage unit,which has
> the typical row-column structure. Each row is formed by a 16-bit-
> register (flip-flop) I've built the storage unit with e "generate"
> command.
> - the mux is driven by the same adress and has to choose one of the
> 256 rows.
>
> The question is:how can I write the code for a mux that can accept as
> input 256 16 bit-long std_logic_vector elements?And how can I write
> the code for a decoder whose input is an 8 bit-long address?A for-loop
> maybe?
> I really don't know.
>
> Thanks
> Bye


Convert the std_logic_vector to an integer using the numeric_std
packages:

my_int := to_integer(unsigned(my_slv));

then use my_int to index into an array. You can do this for both the
mux and the memory address.
You can quite happily do the coversion to an int as a variable inside
a process:

signal addr : std_logic_vector(7 downto 0);

type my_mux_type is array(0 to 255) of std_logic_vector(15 downto 0);
signal mux_signals : my_mux_type;
...
...
...
conv_proc : process(addr)
variable addr_int : integer range mux_signals'range; --you need
to specify range to stop the synthesiser making it a 32 bit bus
begin
addr_int := to_integer(unsigned(addr));
output <= mux_signals(addr_int);
end process;


But with a mux this wide, it is likely you will need some registering
in there somewhere, otherwise you may find it struggles to meet timing
requirements.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Patriot Memory PDC1G5600ELK Memory Review Silverstrand Front Page News 0 09-07-2005 02:24 AM
Differences between Sony Memory Stick & memory Stick Pro vs Memory Stick Duo? zxcvar Digital Photography 3 11-28-2004 10:48 PM
RAM Memory or virual memory Julián Sanz García ASP .Net 4 11-12-2004 06:25 PM
GC does not release memory...memory keeps growing!!! Mahesh Prasad ASP .Net 1 02-22-2004 08:40 AM
AspNet Process Memory Issue on Win2k Server - Peformance is fine - Memory usuage doesn't stop growing Cy Huckaba ASP .Net 1 06-26-2003 04:00 AM



Advertisments