ROM(只读存储器)VHDL

ROM(只读存储器)

图给出了ROM的结构。因为它是只读存储器,所以不需要时钟信号和写使能信号。可以看出,电路内部包括预先存储的内容,并且由输入的地址(addr)来选择将哪个存储空间中的内容传送到输出端。对于这个设计,在一个寻址单元里可以存储一个8位的“字”。
在这里插入图片描述
实现ROM的代码如下所示。words(第7行)表示存储在ROM中的字的数量,而bits(第6行)表示每个字的大小。为了实现ROM,使用了一个常数数组(第15行~第22行)。代码中首先定义了一个新的类型vector_array(第14行),接着它被用来声明一个名为memory(第15行)的常量。这个例子展示的是一个8×8的R0M,下面的值(十进制):0,2,4,8,16,32,64和128分别被存储到地址0-7所选定的地址空间里(第15行-第22行)。第24行给出了使用ROM的例子。输出(data)等于memory存储在相应地址中的数据。当实现ROM时,由于没有使用时钟信号,所以没有占用寄存器资源。ROM是通过使用逻辑门构成查找表(LUT:Look Up Table)的方式来实现的。

-------------------------------------
library ieee;
use ieee.std_logic_1164.all;
-------------------------------------
entity rom is 
    generic (bits: integer := 8;   --# of bits per word
	         words: integer := 8);  --# of words in the memory 
	port  (addr: in integer range 0 to words-1;
	       data: out std_logic_vector(bits-1 downto 0)
		   );
end rom;
--------------------------------------
architecture rom of rom is 
    type vector_array is array (0 to words-1) of std_logic_vector (bits-1 downto 0);
	constant memory : vector_array :=  ("00000000",
	                                    "00000010",
										"00000100",
										"00001000",
										"00010000",
										"00100000",
										"01000000",
										"10000000");
begin
    data <= memory(addr);
end rom;

ROM的仿真工作波形在下图中给出。可以看见,地址从0到7连续改变,存储在相应位置上的数据可以相应地连续正确输出。
在这里插入图片描述

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值