1. 请问RAM是什么意思,
随机存取存储器(random access memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。
存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。 按照存储单元的工作原理,随机存储器又分为静态随机存储器(英文:Static RAM,SRAM)和动态随机存储器(英文Dynamic RAM,DRAM)。
中文名
随机存取存储器
外文名
random access memory
存储原理
由触发器存储数据
单元结构
六管NMOS或OS构成
简称
RAM
目录
1特点
2类别
3组成
4区别
▪只读存储器
▪内存
5存储单元
6其他
特点
随机存取
所谓“随机存取”,指的是当存储器中的数据被读取或写入时,所需要的时间与这段信息所在的位置或所写入的位置无关。相对的,读取或写入顺序访问(Sequential Access)存储设备中的信息时,其所需要的时间与位置就会有关系。它主要用来存放操作系统、各种应用程序、数据等。[1]
易失性
当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入
快速周期随机存取存储器
ECCSDRAM。
既然内存是用来存放当前正在使用的(即执行中)的数据和程序,那么它是怎么工作的呢?我们平常所提到的计算机的内存指的是动态内存(即DRAM),动态内存中所谓的“动态”,指的是当我们将数据写入DRAM后,经过一段时间,数据会丢失,因此需要一个额外设电路进行内存刷新操作。具体的工作过程是这样的:一个DRAM的存储单元存储的是0还是1取决于电容是否有电荷,有电荷代表1,无电荷代表0。但时间一长,代表1的电容会放电,代表0的电容会吸收电荷,这就是数据丢失的原因。刷新操作定期对电容进行检查,若电量大于满电量的1/2,则认为其代表1,并把电容充满电;若电量小于1/2,则认为其代表0,并把电容放电,藉此来保持数据的连续性。
存储单元
静态存储单元(SRAM)
●存储原理:由触发器存储数据
●单元结构:六管NMOS或OS构成
●优点:速度快、使用简单、不需刷新、静态功耗极低;常用作Cache
●缺点:元件数多、集成度低、运行功耗大
●常用的SRAM集成芯片:6116(2K×8位),6264(8K×8位),62256(32K×8位),2114(1K×4位)
动态存储单元(DRAM)
●存贮原理:利用MOS管栅极电容可以存储电荷的原理,需刷新(早期:三管基本单元;之后:单管基本单元)
●刷新(再生):为及时补充漏掉的电荷以避免存储的信息丢失,必须定时给栅极电容补充电荷的操作
●刷新时间:定期进行刷新操作的时间。该时间必须小于栅极电容自然保持信息的时间(小于2ms)。
●优点: 集成度远高于SRAM、功耗低,价格也低
●缺点:因需刷新而使外围电路复杂;刷新也使存取速度较SRAM慢,所以在计算机中,DRAM常用于作主存储器。
尽管如此,由于DRAM存储单元的结构简单,所用元件少,集成度高,功耗低,所以已成为大容量RAM的主流产品。
其他
手机中我们经常看到RAM4G ram512M ,我们一定不要被它误导,即使ROM再大,但是RAM小了的话,还是不能玩大型游戏。ROM是存储东西时用到的存储,RAM是运行程序时用到的存储。所以购买手机的时候一定要注意这个信息。
RAM:一种音频格式,可以用千千静听播放。RA、RAM和RM都是Real公司成熟的网络音频格式,采用了“音频流”技术,所以非常适合网络广播。在制作时可以加入版权、演唱者、制作者、Mail和歌曲名称等信息。
RA可以称为互联网上多媒体传播的霸主,适合于网络上进行实时播放,是目前在线收听网络音乐最好的一种格式。
RAM:角色/职责分配矩阵,就是将WBS(工作分解结构)中的每一项工作指派到OBS(组织分解结构)中的执行人员所形成的一个矩阵,是人力资源管理用词。
RAM: Radar absorbing Material 雷达吸波材料,是指能够通过自身的吸收作用减小目标雷达散射截面(RCS)的材料。
RAM: Relative Atomic Mass相对原子质量(原子量)
2. 哪位大神有verilog实现的双口RAM例程,就教
Verilog只能实现双口RAM的仿真模型,真的双口RAM是hard macro.不能用verilog实现的
下面是一个例子,a口写,b口读。记住这只是仿真模型。真正实现是要调用hard macro的
xx是地址位宽
yy是数据位宽
mole al_port_ram(clka, clkb, addra, wr_data, wr_en, addrb, rd_data)
input clka, clkb;
input [(xx-1):0] addra,addrb;
input [(yy-1):0] wr_data;
input wr_en;
output [yy:0] rd_data;
reg [yy:0] ram_data[(xx^2)];
always @ (posedge clka)
if(wr_en)
ram_data[addra] <=wr_data;
always @ (posedge clkb)
rd_data <= ram_data[addrb];
endmole
3. 在fpga中调用双口ram出现这种错误,哪位大侠可以帮我解决下,我还是个菜鸟
模块端口定义的信号宽度和实际接入的信号宽度不一致,一个是4位,一个是5位
4. 基于FPGA的双口RAM实现及应用怎么用
基于FPGA的双口RAM实现及应用的使用方法:
CPU并行工作(双单片机系统)方式得到广泛应用。为了使2个单片机能够快速有效交换
信息,充分利用系统资源,采用双口RAM实现存储器共享是目前较为流行的方法。
大容量、高速FPGA器件具有集成度高、体积小、灵活可重配置、实验风险小等优点,在复杂数字系统中得到越来越广泛的应用。数字电路设计采用l片FPGA器件、存储设备和一些电气接口匹配电路的解决方案已成为主流选择方案。用FPGA来实现双口RAM的功能可以很好地解决并行性和速度问题,而且其灵活的可配置特性使得基于FPGA的双口RAM易于进行修改、测试及系统升级,可降低设计成本,缩短开发周期。
双口RAM简介:
双口RAM是在1个SRAM存储器上具有两套完全独立的数据线、地址线和读写控制线,并允许两个独立的系统同时对其进行随机性访问的存储器,即共享式多端口存储器。双口RAM最大的特点是存储数据共享。1个存储器配备两套独立的地址、数据和控制线,允许两个独立的CPU或控制器同时异步地访问存储单元。因为数据共享。则必须具有访问仲裁控制。内部仲裁逻辑控制提供以下功能:对同一地址单元访问的时序控制;存储单元数据块的访问权限分配:信令交换逻辑(例如中断信号)等。双口RAM可用于提高RAM的吞吐率,适用于实时数据缓存。
5. 如何用nios控制FPGA中的双口ram读写.如果硬件完成后 软件该怎么写呢
1 NIOS增加一些地址线 数据线,直接连到ram的接口访问
2 利用avalon总线,把ram挂上去,一般需要做一个接口模块用于avalon总线协议,然后在SOPC里挂上去分配地址
1方式实现比较简单,如果ram只是给nios用,2方式比较好,可以简洁点。
6. verilog双端口读写德ram怎么写
verilog只能做一个双口读写RAM的model,可以用来仿真,不能用来综合的不然用register搭RAM面积太大了,真要用RAM还是要在综合的时候调双口RAM的lib
example: RAM model,仅供仿真使用
mole two_port_ram (
input clk,
input [7:0] wr_addr,
input [15:0] wr_data,
input wr_en,
input [7:0] rd_addr,
output reg [15:0] rd_data
);
reg [15:0] memory[256];
always @ (posedge clk)
if(wr_en)
memory[wr_addr] <= wr_data;
always @ (posedge clk)
rd_data<=memory[rd_addr];
endmole
7. 什么是单端口RAM和双单口RAM二者有何区别
双口ram有安全保护啊.里面有两个时钟哦,为了不出现亚稳态,里面有保存锁存逻辑.
8. 在网上找了下,发现都只有伪双口ram的vhdl程序,有谁知道真双口ram怎么做吗求真双口ram的vhdl程序。谢!
这是我以前写的一个标准双端口ram,可以作为单端口或者双端口用
library ieee;
use ieee.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity blk_mem is
generic(
data_width : integer := 8; -- used to change the memory data's width
addr_width : integer := 11); -- used to change the memery address' width
port (
clka : in std_logic;
dina : in std_logic_vector(data_width - 1 downto 0);
addra : in std_logic_vector(addr_width - 1 downto 0);
ena : in std_logic;
wea : in std_logic;
douta : out std_logic_vector(data_width - 1 downto 0);
clkb : in std_logic;
dinb : in std_logic_vector(data_width - 1 downto 0);
addrb : in std_logic_vector(addr_width - 1 downto 0);
enb : in std_logic;
web : in std_logic;
doutb : out std_logic_vector(data_width - 1 downto 0));
end blk_mem;
architecture blkmem of blk_mem is
type ram_template is array(2 ** addr_width - 1 downto 0) of std_logic_vector(data_width - 1 downto 0);
shared variable ram1 : ram_template;
begin -- blkmem
process (clka)
begin -- process
if clka'event and clka = '1' then -- rising clock edge
if ena = '1' then
douta <= ram1(conv_integer(addra));
if wea = '1' then
ram1(conv_integer(addra)) := dina;
end if;
else
douta <= (others => '0');
end if;
end if;
end process;
process (clkb)
begin -- process
if clkb'event and clkb = '1' then -- rising clock edge
if enb = '1' then
doutb <= ram1(conv_integer(addrb));
if web = '1' then
ram1(conv_integer(addrb)) := dinb;
end if;
else
doutb <= (others => '0');
end if;
end if;
end process;
end blkmem;
9. FPGA的双口RAM,如果读比写快很多,那读的是什么,那读的那些地址都是空吗
写入的时候有地址啊。读的时候判断一下,是否大于写入的地址就可以了。当然如果是异步读写,注意一下时钟。
读比写得快,就是说读的那个地址还没有写入数据,那么应该是读出初始化时的数据,如果没有初始化那应该是不定态,同意楼上。同时,RAM模块里有clr引用,可以清空为0。
还有,FPGA上电复位时,基本上是0(和厂商有关,altera,xilinx 的FPGA都是0).
10. 双口RAM的VHDL描述
个人觉得学好VHDL,最主要的还是实践,如果原先有一点C语言基础,VHDL就不难学,多自行练几次就没问题了!!可以先熟悉语法,了解一些逻辑功能,然后再上网或者在书上找一些小项目做做,最好是手头上自已有实验板,多做几次就OK了!!!
以下是你要求的程序,至于读写速度,主要就是看读时钟和写时钟,哪个频率快,就哪个快了!!!
library ieee;
use ieee.std_logic_1164.all; --调用常用的程序包
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity ram_test is --定义实体
generic(width:integer :=8;length:integer:=8); --根据这个来改变RAM的大小,width为数据长度,length为数据个数
port(r_clk,w_clk:in std_logic;---定义写时钟和读时钟
r_add,w_add:in std_logic_vector(2 downto 0);--写地址和读地址
r_en,w_en:in std_logic;--读使能和写使能
d_in:in std_logic_vector(width-1 downto 0);--数据输入
d_out:out std_logic_vector(width-1 downto 0));--数据输出
end entity;
architecture art of ram_test is
type memory is array (0 to length-1) of std_logic_vector(width-1 downto 0);---定义一数组类型来存储数据
signal data:memory;
begin
process(w_clk,w_add,w_en,d_in)--写数据进程
begin
if w_clk'event and w_clk='1' then--在时钟上升沿来时
if w_en='1' then --若使能为1,则写数据
data(conv_integer(w_add))<=d_in;
end if;
end if;
end process;
process(r_clk,r_add,r_en,data)--读数据进程
begin
if r_clk'event and r_clk='1' then
if r_en='1' then
d_out<=data(conv_integer(r_add));
end if;
end if;
end process;
end art;