Vivado中Block Memory Generator v8.3的使用
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 \n ' , y_cos);
fclose(fid);
fid = fopen('D:/sin_coe.txt','wt');
fprintf(fid, ' .0f \n ' , y_sin);
fclose(fid);
位元寫功能(byte_write):
當使用8bit一位元組的時候沒有優先順序,而儲存在寬度限定為8bit的倍數。當使用9bit一位元組的時候,每一個位元組都包含一個優先順序位,儲存限定為9bit的倍數。9bit的一般不用於NO_CHANGE模式。對於雙口的RAM,只能是讀優先或者寫優先。
我們要設定為primitive原語的模式,還可以選擇增加復位等功能,但是復位不能非同步,只能同步實現。
最後生成了IP核之後,點選你的IP核的下方,然後可以看到你的instance,你就知道怎麼用這個IP核了。另外對於IP核的使用,其實你看datasheet那就更好了。
參考資料:
初始化檔案寫法:http://www.openhw.org/guozhiyang/blog/14-03/302478_4c05f.html
http://www.openhw.org/guozhiyang/blog/14-03/302479_5e3a4.html#articletop
http://bbs.eetop.cn/thread-291962-1-1.html
http://blog.sina.com.cn/s/blog_6f3d37ff01012fea.html
RAM的用法指南:http://wenku.baidu.com/view/b98307ddce2f0066f5332283.html
IP核的使用: http://wenku.baidu.com/view/6256fa4e767f5acfa1c7cd44.html?re=view
Block ram設計: http://wenku.baidu.com/link?url=O5AfZGnBEbW68cMpLbxI1vQ0MgsAiZD2dyIw9NFDRnjlcRgU_ZdDvjidH-ZasUz7Yw8I4RdA2TtvOz7FQK87nhgb0Pz3brhjfcIb100Hc4O
一些問題: http://xilinx.eetrend.com/forum/627
http://xilinx.eetop.cn/viewthread-304021
綜合時使用BR: http://www.eefocus.com/utoo/blog/10-03/185645_ed1e3.html