FPGA内部的CLB分为SLICE L和SLICE M,SLICE M与SLICE L大同小异,只是SLICE M里的LUT可以作为RAM来存储而已。说起RAM,不得不提起FPGA内部的重要资源-SRAM。笔者使用的Xilinx Virtex 6系列的SRAM被称为M18K,即每个Block RAM的资源为18K bits,有时候也以两个M18K组成一个M36K来称呼FPGA内部的SRAM基本组成单元。
那么什么叫做SRAM呢?RAM大家都明白,那么这个“S”是什么意思?"S"事实上是Synchronous即同步的意思,意思就是对这种RAM的操作(读,写)都是以时钟为基准,而且对于内部的存储阵列来说,都是一个时钟周期就可以把数据写入,一个时钟周期就可以把数据读出。其时序图如下图所示:
如上图所示,跟clk时钟信号同步,wr_en有效两个周期,此时wr_en有效时的datain被写入到sram此时的addr对应的地址中。当rd_en有效时(有效两个周期),此时rd_en有效时对应的地址数据里的内容被读出(读出需要一个时钟周期的延时)。
在高速设计中,一般使用block ram而非基于LUT的分布式ram,其中一个重要原因就是block ram在一般情况下更容易跑高时钟频率。