1. 程式人生 > >Vivado中Block Memory Generator v8.3的使用

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