CORE Generator里有很多的IP核,適合用于各方面的設計。一般來說,它包括了:基本模塊,通信與網絡模塊,數字信號處理模塊,數字功能設計模塊,存儲器模塊,微處理器,控制器與外設,標準與協議設計模塊,語音處理模塊,標準總線模塊,視頻與圖像處理模塊等。
在Xilinx的IP核里有xilinx core generator 里面的memory interface generator 和block ram,使用這兩個可以使用FPGA內部和外部的RAM。memory interface generator 是 ddr2/ddr3/qdr2 這些外部存儲器的接口,block ram 是 fpga 芯片內部片上的存儲器。接下來介紹一下block ram。
block ram有三種:單口RAm、簡化雙口RAM和真雙口RAM。
單口:
簡化雙口,A寫入,B讀出:
真雙口,A和B都可以讀寫:
使用IP核,確定數據位寬和深度:(超出地址范圍將返回無效數據,在對超出地址范圍的數據進行操作的時候,不能夠set或者reset)。這里我選擇的是16位的位寬,128的深度。
設置操作模式:(寫優先,讀優先,不改變)
這里的寫優先的意思就是你寫入的數據,會出現在輸出端口,不管你給的地址是什么。這種好處就是保證了你讀出的數據是最新的。
讀優先指的就是:不管你寫入的數據,是先把你要讀的數據讀出。
不改變模式就是正常的模式,該讀的時候讀,改寫的時候寫:(一般沒有特殊要求就是選這個)
接著寫coe文件,打開txt,輸入:
MEMORY_INITIALIZATION_RADIX=10;
MEMORY_INITIALIZATION_VECTOR=
512,515,518,522,525,528,531,535,538,54,......12,23;
保存之后為coe格式。
這個如果很少就自己輸入,如果比較大,比如一幅圖片,那就使用matlab吧!
舉個例子,你要生成ROM:
% 生成 ROM 的 .coe文件
clc clear all close all x = linspace(0, pi/2 ,1024); % 在區間[0,2pi]之間等間隔地取1024個點 y_cos = cos(x); y_sin = sin(x); y_cos = y_cos * 2^16; y_sin = y_sin * 2^16; fid = fopen('D:/cos_coe.txt','wt'); fprintf(fid, ' .0f ' , y_cos); fclose(fid); fid = fopen('D:/sin_coe.txt','wt'); fprintf(fid, ' .0f ' , y_sin); fclose(fid);
比特寫功能(byte_write):
當使用8bit一字節的時候沒有優先級,而存儲在寬度限定為8bit的倍數。當使用9bit一字節的時候,每一個字節都包含一個優先級位,存儲限定為9bit的倍數。9bit的一般不用于NO_CHANGE模式。對于雙口的RAM,只能是讀優先或者寫優先。
我們要設置為primitive原語的模式,還可以選擇增加復位等功能,但是復位不能異步,只能同步實現。
最后生成了IP核之后,點擊你的IP核的下方,然后可以看到你的instance,你就知道怎么用這個IP核了。另外對于IP核的使用,其實你看datasheet那就更好了。
原文標題:FPGA開發之RAM IP的使用
文章出處:【微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
-
FPGA
+關注
關注
1630文章
21796瀏覽量
606003 -
Xilinx
+關注
關注
71文章
2171瀏覽量
122134 -
generator
+關注
關注
0文章
57瀏覽量
33089 -
Block
+關注
關注
0文章
26瀏覽量
14725
原文標題:FPGA開發之RAM IP的使用
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論