FPGA是英文Field-Programmable Gate Array的缩写,即现场可编程门阵。FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。随着FPGA的发展,为了满足对信号处理和片上储存的需要,FPGA又增加了块RAM,时钟管理单元和硬件乘法器。之后又在部分的系列里增加了PPC和高速串行IO。最新的Virtex5的片内结构资源如图1.3.1所示。

图1.3.1 Virtex5的片内资源
对于FPGA的开发,XILINX 公司已经提供了集成开发环境ISE, 支持VHDL和VERILOG及电原理图。 所以对于初学FPGA的用户而言, 并不需要细致的了解FPGA片内资源的所有细节。客户只需要用高级语言描述好自己的逻辑,工具即可以自动调用相应的逻辑资源并按要求进行互连。下面就基于,Virtex5分别介绍一下FPGA片内最常用的资源:CLB和BRAM。
1.3.1CLB
在Virtex5中一个CLB由2个SLICE组成 如图7所示。SLICE是由4个查找表和4个D触发器组成.如图1.3.2所示。
查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。它把数据事先写入RAM后,每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。对于任意逻辑,只要将其真值表写入查找表。就能实现其逻辑功能。Virtex5的查找表是6输入的。所以对于任意的6输入1输出逻辑。只要一个查找表就可以实现了。这个是FPGA开发和ASIC开发一个重要区别。在FPGA的代码中增加逻辑的复杂度并不会增加资源和降低速度,而主要取决于逻辑的输入和输出个数。

图1.3.2

图1.3.3
在Virtex5部分SLICE中的查找表不仅可以作为逻辑,还可以用作分布式RAM和32位移位寄存器。我们把这样的SLICE 叫做SLICEM. 把仅可以做逻辑的SLICE叫做SLICEL.
在查找表和触发器的中间位置是2选1的选择器和快速进位链。主要用于宽输入的逻辑和加法中构成进位链。
1.3.2BRAM
在Virtex5,块RAM的大小是36kbit. 每个块RAM都是双端口的。两个端口是可以同时对BRAM里面的数据进行读写,而且两个端口可以工作在不同的时钟频率下。当两个端口同时读写同一地址时,可能会发生冲突。但是不会损坏器件。在本节避免冲突中会具体说明这种情况。此外在Virtex5中,BRAM还可以用做FIFO。
Virtex4/Spartan3 中每块RAM 也是双口的,不过和Virtex5相比大小是其一半为18Kbits。Virtex5每个块RAM可以在绝大多数情况下等价于Virtex4/Spartan3中的两块BRAM。
-
写入模式
BRAM有三种不同的写入模式,写入模式决定了在一个新数据写入后在输出端口上数据的情况。
这三种模式分别是WRITE_FIRST, READ_FIRST, and NO_CHANGE. 默认的模式是WRITE_FIRST。 双口BRAM的两个口可以独立的设置写入模式。
WRITE_FIRST 输出口上出现新的数据当新数据写入;READ_FIRST 输出口上维持旧的数据当新数据写入时;NO_CHANGE 输出口上一直维持读操作时候读取得数据。

图1.3.4 WRITE_FIRST时序示意图

图1.3.5 READ_FIRST时序示意图

图1.3.6 NO_CHANGE时序示意图.
- 避免冲突
Virtex-5 的块RAM是一个双口RAM, 两个口都可以在任意时间访问任何的地址。 当两个端口同时读一处空间是允许的,对于同时读写一处地址空间是有限制的。 下面就分两种情况来讨论:两个端口是用同步的时钟;两个端口使用的是异步时钟。
对于异步的时钟, 当一个口在写入一个地址空间的瞬间,另一个是不可以读取或写人同一空间的,否则会导致读出错误的数据或写入的数据错误。
对于同步时钟,当一个口在写入一个地址空间的瞬间,另一个是不可以写人同一空间的,否则会导致读出错误的数据或写入的数据错误。如果这个端口是配置成READ_FIRST 或WRITE_FIRST 模式,可以同时读出有效的数据;配置成NO_CHANGE 模式会得到无效的数据。
- 硬件FIFO支持
许多FPGA设计需要使用FIFO. 在VIRTEX5中的BRAM可用用做FIFO。VIRTEX5 的BRAM中内建了FIFO的逻辑,所以当用VIRTEX5的BRAM做FIFO的时候不需要使用额外的CLB资源。VIRTEX5中的BRAM可以用作同步的FIFO,也可以用作异步的FIFO。 同时VIRTEX5的BRAM还可以配置成标准的FIFO或FWFT(first-word fall-through)的FIFO


