背景
RAM和ROM也是類似的,由于這也是常用的IP核,所有完全有必要在這里記錄一下,以后用到了實(shí)際后,再補(bǔ)充到實(shí)際工程中。隨機(jī)存儲(chǔ)器(RAM),它可以隨時(shí)從任一指定地址讀出數(shù)據(jù),也可以隨時(shí)把數(shù)據(jù)寫入任何指定的存儲(chǔ)單元,且讀寫的速度與存儲(chǔ)單元在存儲(chǔ)芯片的位置無關(guān)。RAM主要用來存放程序及程序執(zhí)行過程中產(chǎn)生的中間數(shù)據(jù)、運(yùn)算結(jié)果等。RAM按照存儲(chǔ)單元的工作原理可以分為靜態(tài)RAM和動(dòng)態(tài)RAM,也就是常說的SRAM和DRAM。
SRAM速度非??欤悄壳白x寫最快的存儲(chǔ)設(shè)備,比如CPU的一級(jí)緩沖,二級(jí)緩沖。而計(jì)算機(jī)內(nèi)存就是DRAM,比SRAM便宜。這里要說明的是,DRAM與SRAM相比較速度慢,但是它與ROM相比較速度還是很快的。
RAM IP核同ROM IP核一樣,xilinx也提供了兩種:一種是單端口的RAM IP,另一種是雙端口的RAM IP。
IP核之RAM的配置
在這個(gè)頁面中,有3個(gè)可供修改的標(biāo)簽“option output resisters”(可選輸出寄存器)的“portA”(端口A)、“memory Initialization”(存儲(chǔ)器初始化)和“File Remaining Memory Locations”(填補(bǔ)剩余的內(nèi)存位置)。
在“port A”(端口A)欄有兩個(gè)可修改項(xiàng):
“register port A output of memory primitives”:表示源于的輸出端口A處增加寄存器級(jí)。
“Register port A output of memory core”:表示在IP核的輸出端口A處增加寄存器級(jí)。
在“memory Initialization”(存儲(chǔ)器初始化)欄中,我們可以載入coe文件對(duì)ROM IP核進(jìn)行初始化。在“Fiie Remaining Memory Locations”(填補(bǔ)剩余的內(nèi)存位置)欄中,我們可以將剩余內(nèi)存填充上我們指定的數(shù)值。
在這個(gè)頁面中,有2個(gè)可供修改的標(biāo)簽,“power estimate options”(功耗估計(jì)選項(xiàng))的“output reset options”(輸出復(fù)位選項(xiàng))的“port A”(端口A)可以選擇是否添加一個(gè)“RSTA”引腳。“output reset valure(Hex)”設(shè)置復(fù)位輸出值(十六進(jìn)制)。
創(chuàng)建好了RAM 后,進(jìn)行例化。
代碼:
`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 09:44:24 05/23/2019 // Design Name: // Module Name: RAM_top // Project Name: // Target Devices: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // //下述功能描述了寫入一個(gè)地址為0~511的地址,從512~1023 不寫入數(shù)據(jù) ////////////////////////////////////////////////////////////////////////////////// module RAM_top( input clk, input rst, output reg ram_en, //RAM IP核的使能信號(hào) output reg wren, //RAM IP核的寫使能信號(hào) //RAM IP核的地址信號(hào) output reg [7 : 0] wrdata, //RAM IP核的寫數(shù)據(jù)信號(hào) output [7 : 0] rddata //RAM IP核的讀數(shù)據(jù)信號(hào) //用來產(chǎn)生地址和數(shù)據(jù)的計(jì)數(shù)器 ); reg [8 : 0] addr=0; reg [7 : 0] time_cnt=0; always @ (posedge clk or negedge rst) begin if(!rst) time_cnt<=0; else if(time_cnt=='d1023) time_cnt<=1'd0; else time_cnt<=time_cnt+1; end //用來產(chǎn)生RAM IP核的寫使能信號(hào) always @ (posedge clk or negedge rst) begin if(!rst) wren<=0; else if (time_cnt
下面來說一下該代碼主要實(shí)現(xiàn)了什么功能,該代碼主要實(shí)現(xiàn)了先往RAM IP核中的0 ~ 511地址寫入0 ~511 數(shù)據(jù),每個(gè)地址對(duì)應(yīng)一個(gè)數(shù)據(jù),比如0地址對(duì)應(yīng)0數(shù)據(jù),1地址對(duì)應(yīng)1數(shù)據(jù),以此類推。寫完了512個(gè)數(shù)據(jù)之后,讀數(shù)據(jù)時(shí),我們需要將寫使能拉低,而ram_en信號(hào)在操作RAM的過程中需要一直拉高。(雖然在這里,我們沒有設(shè)置ranm_en)。再寫完512個(gè)數(shù)據(jù)后,然后進(jìn)行讀數(shù)據(jù),此時(shí),輸入一個(gè)地址,讀取一個(gè)對(duì)應(yīng)地址的數(shù)據(jù),此時(shí)將wren保持為低,這樣就沒法寫入數(shù)據(jù),只能讀取數(shù)據(jù)了。給一個(gè)地址,讀取一個(gè)對(duì)應(yīng)地址的數(shù)據(jù)。
我們放大來看看,也可以看到,在地址為0,讀取數(shù)據(jù)為0,然后地址為1,讀取數(shù)據(jù)為1.以此類推。
note:仿真失敗的,要注意添加ISE的庫到modelsim中,或者編譯庫文件,再調(diào)用modelsim。
-
DRAM
+關(guān)注
關(guān)注
40文章
2320瀏覽量
183689 -
sram
+關(guān)注
關(guān)注
6文章
768瀏覽量
114757 -
RAM
+關(guān)注
關(guān)注
8文章
1369瀏覽量
114818 -
Xilinx
+關(guān)注
關(guān)注
71文章
2169瀏覽量
121781 -
波形
+關(guān)注
關(guān)注
3文章
379瀏覽量
31608
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論