1.2.2 可配置逻辑块
CLB是FPGA内的基本逻辑单元,其实际数量和特性因器件的不同而不同。用户可以根据设计需要灵活地改变其内部连接与配置,从而完成不同的逻辑功能。FPGA一般是基于SRAM工艺的,其基本可配置逻辑块几乎都由查找表(LUT, Look Up Table)和寄存器(Register)组成。FPGA内部的查找表一般为4输入LUT。Altera公司的一些高端FPGA芯片采用了自适应逻辑块(Adaptive Logic Modules, ALM)结构,可根据设计需求由设计工具自动配置成所需的模式,如5输入和3输入的LUT,或6输入和2输入的LUT,或2个4输入的LUT等。查找表一般用于完成组合逻辑功能。
FPGA内部寄存器的结构相当灵活,可以配置为带同步/异步复位或置位、时钟使能的触发器(Flip Flop, FF),也可以配置成锁存器(Latch)。FPGA一般依赖寄存器完成同步时序逻辑设计。一般来说,比较经典的基本可配置逻辑块是一个寄存器加一个查找表,但是不同厂商的寄存器和查找表的内部结构有一定的差异,而且寄存器和查找表的组合模式也不同。例如,Intel公司的可配置逻辑块通常称为逻辑单元(Logic Element,LE),由1个寄存器和1个LUT构成。Intel公司的大多数FPGA将10个LE有机地组合起来,构成更大的功能单元-逻辑阵列模块(Logic Array Block,LAB),LAB中除LE外,还包含LE间的进位链、LAB控制信号、局部互连线、LUT链、寄存器链等连线与控制资源。典型的LAB结构示意图如图1-3所示。
图1-3 典型的LAB结构示意图
Xilinx公司的可编程逻辑单元称为Slice,它由上下两部分构成,每部分都由1个寄存器加1个LUT组成,称为逻辑单元(Logic Cell, LC),两个LC之间有一些共用逻辑,可以完成LC之间的配合与级联。Lattice公司的底层逻辑单元称为可编程功能单元(Programmable Runction Unit, PFU),它由8个LUT和8~9个寄存器构成。当然,这些可编程单元的配置结构随着器件的发展在不断更新,更新的可编程逻辑器件常常根据设计需求推出一些新的LUT和寄存器的配置比例,并优化其内部的连接构造。
了解底层配置单元的LUT和寄存器配置比例的一个重要意义在于器件选型和规模估算。很多器件手册中用器件的ASIC门数或等效的系统门数表示器件的规模。但是由于目前FPGA内部除基本CLB外,还包含有丰富的嵌入式块RAM、PLL或DLL,以及专用硬知识产权功能核(Hard IP Core,硬核)等。这些功能模块会等效出一定规模的系统门,所以用基本CLB的数量来权衡系统是不准确的,常常会使设计者混淆。比较简单科学的方法是用器件的寄存器或LUT数量来衡量(一般来说,两者的比例为1:1)。例如,Xilinx公司的Spartan-3系列中的XC3S1000有15360个LUT,而Lattice公司的EC系列中的LFEC15E也有15360个LUT,所以这两款FPGA的CLB的数量基本相当,属于同一规模的产品。同理,Intel公司的Cyclone器件簇的EP1C12的LUT数量是12060个,就比前两款FPGA芯片规模略小。需要说明的是,器件选型是一个综合性问题,需要将设计的需求、成本、规模、速度等级、时钟资源、I/O特性、封装、专用功能模块等诸多因素综合起来考虑。
LE是Altera FPGA芯片的基本逻辑单位,通常由1个4输入查找表、1个可编程触发器,以及一些辅助电路组成。LE有两种工作模式:正常模式和动态算术模式,其中正常模式用于实现普通的组合逻辑功能,动态算术模式用于实现加法器、计数器和比较器等功能。
LE正常模式的结构如图1-4所示,LUT作为通用的4输入函数,实现组合逻辑功能。LUT的组合输出可以直接输出到行、列互连线,或者通过LUT链输出到下面LE的LUT输入端,也可以经过触发器的寄存后输出到行列互连线。触发器同样可以通过触发器链串起来作移位寄存器。在不相关的逻辑功能中使用的LUT和触发器可以打包到同一个LE中,而且同一个LE中的触发器的输出可以反馈到LUT中实现逻辑功能,这样可以提高资源的利用率。
图1-4 LE正常模式的结构
LE动态算术模式的结构如图1-5所示,LE的4输入LUT被配置成4个2输入的LUT,用于计算两个数之“和”与“进位值”。
图1-5 LE动态算术模式的结构