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;