新聞中心

        EEPW首頁 > 嵌入式系統 > 牛人業話 > FPGA研發之道(13)-設計不是湊波形(三)RAM

        FPGA研發之道(13)-設計不是湊波形(三)RAM

        作者: 時間:2014-11-03 來源:網絡 收藏

          在內部資源中,是較為常用的一種資源。

        本文引用地址:http://www.104case.com/article/264820.htm

          通常實例化中,一種使用為BLOCK 也就是塊RAM 。另外資源可以通過寄存器搭,也就是分布式RAM。前者一般用于提供較大的存儲空間,后者則提供小的存儲空間。

          在實際應用過程中,一般使用的包括,單端口、雙端口RAM,等形式等不同的形式。 實際應用中FIFO也是利用RAM和邏輯一起實現的。

          對于一塊RAM中,其能夠例化的深度是有限的。例如cyclone4的RAM9k中可以例化的資源如下所示:

          

         

          因此:例化化深度<256的RAM,其同樣也需要占用一塊BLOCKRAM的資源,例如例化寬度為64 深度為128的RAM,其資源為8K 。但是仍然需要占用兩塊BOCK RAM。也就是說,只要例化RAM深度少于256.則對于本器件9K來說,剩下的資源也是浪費。

          

         

          那是不是可以例化成雙端口RAM,通過高位地址區分,變為兩個單端口RAM(width:32,depth:128)來使用,這樣就可以節省資源了?

          而對于雙端口RAM來說,每個M9K能夠配置是的最小深度就變成是512,而最大寬度為18,如下圖所示,因此作為真雙端口RAM使用,深度小于512的話,仍然會占用1塊RAM。且寬度》18就會多占用額外的一塊RAM,因此上述的節省資源的方式是不正確的。

          

         

          通過查看datasheet的中RAM能夠配置的方式,從而能夠正確的使用RAM資源,從而達到高的利用效率。可以看出,RAM9K其應用方式受限,主要是因為RAM的端口的連接信號受限,例如:該RAM9K的讀端口最大支持36根信號線,因此對于單端口其支持的寬度為36,雙端口為18(兩個端口,總共36根數據線),作為來說,其布線資源是有限的,不可能無限制的增加其端口數。

          RAM例化時,有時需要初始化RAM,ALTERA和XLINX的初始化方法如下所示:

          (1)ALTERA RAM中,例化時為MIF文件,其格式為:

          DEPTH = 32; -- The size of memory in words

          WIDTH = 8; -- The size of data in bits

          ADDRESS_RADIX = HEX; -- The radix for address values

          DATA_RADIX = HEX; -- The radix for data values

          CONTENT -- start of (address : data pairs)

          BEGIN

          00 : 0; -- memory address : data

          01 : 1;

          END;

          (2)在XILINX的RAM中,RAM出示化文件為COE文件,其格式為:

          MEMORY_INITIALIZATION_RADIX=2; 設定進制

          MEMORY_INITIALIZATION_VECTOR= 初始化向量

          值得注意的是:XILINX的RAM初始化后會自動生成MIF文件,而此mif文件與ALTERA mif文件格式不同。不能用于初始化ALTERA的 RAM。

          鑒于例化不同IP的復雜性,現在編譯工具也支持利用VERILOG語言來描述RAM,而編譯工具自動識別為RAM,自動產生相應的IP核,下面以XILINX的EDA工具為例簡要介紹。

          module ram(

          clk, wr,addr,din,dout

          );

          input clk;

          input [7:0] addr;

          input wr;

          input [31:0] din;

          output [31:0] dout;

          reg [31:0] mem [0:255];

          reg [31:0] dout;

          always@(posedge clk)

          if(wr)

          mem[addr] <= din;

          always @(posedge clk)

          dout = mem[addr] ;

          endmodule

          上述描述可以被描述成RAM,自動產生RAM.其例化的報告為:

          =========================================================================

          * HDL Synthesis *

          =========================================================================

          Performing bidirectional port resolution...

          Synthesizing Unit .

          Related source file is "ram.v".

          Found 256x32-bit single-port RAM for signal .

          Found 32-bit register for signal .

          Summary:

          inferred 1 RAM(s).

          inferred 32 D-type flip-flop(s).

          Unit synthesized.

          =========================================================================

          HDL Synthesis Report

          Macro Statistics

          # RAMs : 1

          256x32-bit single-port RAM : 1

          # Registers : 1

          32-bit register : 1

          =========================================================================

          綜上: RAM作為內部一種基本資源,掌握RAM的特性和基本用法,則是FPGA工程師的基本技能,能夠充分利用FPGA內部的資源,畢竟對于FPGA來說“資源就是金錢”,節省資源就是省錢。

        fpga相關文章:fpga是什么




        關鍵詞: FPGA RAM ROM

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 抚顺市| 保德县| 沙河市| 永善县| 宜川县| 紫金县| 贵德县| 罗源县| 阿合奇县| 玉林市| 阜新市| 池州市| 安丘市| 武汉市| 方城县| 东山县| 禹城市| 无为县| 即墨市| 亳州市| 托克托县| 富川| 三原县| 孝昌县| 达尔| 仪陇县| 浦县| 霍邱县| 华池县| 西乡县| 礼泉县| 漠河县| 淅川县| 丹寨县| 调兵山市| 阿巴嘎旗| 南昌市| 天台县| 开平市| 台山市| 凤翔县|