tag 标签: le

相关博文
  • 热度 23
    2015-10-12 16:29
    2679 次阅读|
    1 个评论
    对于FPGA的学习者而言,怎样学习FPGA是大家争论不断的。有的认为要先学习语言,也就是HDL硬件描述语言;也有的说要先学习数电、模电,没有这些知识,就算学会了语言,以后的学习也会非常艰难。但是唯一大家都认可的是掌握FPGA的基本结构。 我们先来看看FPGA的家谱。什么电子工艺的发展,电子管、晶体管、集成电路这些就不说了。直接从ASIC(专用集成电路)开始,它的出现,降低了产品的成本、缩小的设计的物理尺寸、增加了系统的稳定性(低、小、稳)。但是它也有一定的局限性(剧情往往就是这么发展的,哈哈),设计周期长,灵活性差,改版投资大(贵、繁、久)。人们希望有一种更灵活的设计方法,在实验室就能设计、更改大规模数字逻辑,研制自己的ASIC,并马上投入使用,因此就有了可编程逻辑的基本思想。 一.可编程逻辑器件 可编程逻辑器件指通过软件手段,更改、配置器件内部连接结构和逻辑单元,完成既定设计功能的数字集成电路。 可编程逻辑器件可以分为:PAL/GAL、CPLD、FPGA。 PAL/GAL :(Programmable Array Logic)可编程阵列逻辑,(Generic Array Logic)通用可编程阵列逻辑。大多基于E^2CMOS工艺,结构简单,逻辑单元密度低,仅能适用于一些简单的数字逻辑电路。 CPLD :(Complex Programmable Array Logic)复杂的可编程阵列逻辑。它是在PAL/GAL的基础上发展起来的,多数采用E^2COMS工艺、少数采用Flash工艺。当然它的逻辑功能有了大幅度的提升,可以完成逻辑设计中较高速、较复杂的逻辑功能。 FPGA :(Field Pragrammable Gate Array)现场可编程逻辑阵列。它是在CPLD的基础上发展起来的,一般采用SRAM工艺,有的也采用Flash工艺或反熔丝工艺。它的集成度很高。可以完成极其复杂的时序与组合逻辑电路功能,适用与高速、高密度的高端数字逻辑电路设计领域。 二.FPGA的基本结构 简化的FPGA基本由6部分组成:可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元、内嵌专用硬核。下面分别来解释说明这几个部分。 1. 可编程输入/输出单元: 简称I/O单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配需求。目前大多数FPGA的I/O单元被设计为可编程模式,即可通过软件的配置,适配不同的电气标准与I/O物理特性;可以调整匹配阻抗特性,上下拉电阻;可以调整输出驱动电流的大小等。 上面的一些概念,现在读不懂没关系,随着学习的深入,再回过头来看,会加深理解。现在只需要知道FPGA的灵活性其中一方面体现在I/O接口上面,原因是可通过软件编程配置。 2. 基本可编程逻辑单元: 它是可编程逻辑的主体,可以根据设计灵活地改变其内部连接与配置,完成不同的逻辑功能。FPGA的基本可编程逻辑单元几乎都是由查找表LUT和寄存器Reg组成的。FPGA一般 依赖 查找表完成组合逻辑功能,依赖寄存器完成同步时序逻辑设计。Altera可编程逻辑单元通常被称为LE(logic Element,逻辑单元),1个LUT+1个Reg构成。若干个LE有机的组合起来,构成更大的功能单元,逻辑阵列模块LAB(Logic A rray Bolck),LAB中除了LE还包含LE间的进位链、LAB控制信号、局部互联线资源、LUT级联链,寄存器级联链等连线与控制资源。Xilinx的可编程逻辑单元叫Slice,被称为LC(Logic Cell,逻辑单元)。Lattice的底层逻辑单元叫PFU(Programmable Function Unit,可编程功能单元)。 这段大家只需要知道FPGA是基于LUT和寄存器的就可以了,当然你或许之前就已经知道这点,但我相信你看过之后的理解和之前是不一样的。 3. 嵌入式块RAM: FPGA内部嵌入可编程RAM模块,大大拓展了FPGA的应用范围和使用的灵活性。体现为单口RAM、双口RAM、CAM、FIFO等常用的存储结构,想必大家已经十分熟悉了。FPGA中没有ROM资源,ROM的实现本质也是RAM。 4. 丰富的布线资源: 布线资源连通FPGA内部所有单元,连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。  a.全局性的专用布线资源:用以完成器件内部的全局时钟和全局复位/置位的布线。  b.长线资源:完成器件Bank(分区)间的一些高速信号和一些第二全局时钟信号的布线。  c.短线资源:完成基本逻辑单元之间的逻辑互联与布线。 另外还有各式各样的布线资源和专用时钟、复位等控制信号线。 5. 底层嵌入功能单元: 底层嵌入功能单元的概念比较笼统,这里指那些通用程度较高的嵌入式功能模块、入PLL、DSP、CPU等。随着FPGA的发展,这些模块越来越多地嵌入到FPGA的内部,以满足不同场合的需求。 6. 内嵌专用硬核: 这里说的硬核主要指那些通用性较弱,不是所有FPGA器件都包含硬核(Hard Core)。FPGA和CPLD为通用逻辑器件是相对于集成电路ASIC而言的。FPGA内部也有两个阵营:一方面是通用性较强,目标市场范围很广,价格适中的FPGA;两一方面是针对性较强,目标市场明确,价格较高的FPGA。
  • 热度 24
    2013-9-14 10:48
    6758 次阅读|
    0 个评论
    本文结构 -----一般FPGA的构成 -----cyclone II 结构 -----cyclone II  LE   逻辑单元介绍 -----cyclone II  LAB  逻辑阵列介绍   目前主流FPGA都采用了基于SRAM工艺的查找表结构,也有一些军品和宇航级FPGA采用Flash或者熔丝与反熔丝工艺的查找表结构。通过烧写文件改变查找表内容的方法来实现对FPGA的重复配置。    根据数字电路的基本知识可以知道,对于一个n输入的逻辑运算,不管是与或非运算还是异或运算等等,最多只可能存在2n种结果。所以如果事先将相应的结果存放于一个存贮单元,就相当于实现了与非门电路的功能。FPGA的原理也是如此,它通过烧写文件去配置查找表的内容,从而在相同的电路情况下实现了不同的逻辑功能。    查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的 的RAM。 当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能结果,并把真值表(即结果)事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。  由于基于LUT的FPGA具有很高的集成度,其器件密度从数万门到数千万门不等,可以完成极其复杂的时序与逻辑组合逻辑电路功能,所以适用于高速、高密度的高端数字逻辑电路设计领域。其组成部分主要有可编程输入/输出单元、基本可编程逻辑单元、内嵌SRAM、丰富的布线资源、底层嵌入功能单元、内嵌专用单元等,主要设计和生产厂家有Xilinx、Altera、Lattice、Actel、Atmel和QuickLogic等公司,其中最大的是Xilinx、Altera、Lattice三家。 四输入与门实例。 如前所述,FPGA是由存放在片内的RAM来设置其工作状态的,因此工作时需要对片内RAM进行编程。用户可根据不同的配置模式,采用不同的编程方式。FPGA有如下几种配置模式: 并行模式:并行PROM、Flash配置FPGA; 主从模式:一片PROM配置多片FPGA; 串行模式:串行PROM配置FPGA; 外设模式:将FPGA作为微处理器的外设,由微处理器对其编程。 目前,FPGA市场占有率最高的两大公司Xilinx和Altera生产的FPGA都是基于SRAM工艺的,需要在使用时外接一个片外存储器以保存程序。上电时,FPGA将外部存储器中的数据读入片内RAM,完成配置后,进入工作状态;掉电后FPGA恢复为白片,内部逻辑消失。这样FPGA不仅能反复使用,还无需专门的FPGA编程器,只需通用的EPROM、PROM编程器即可。Actel、QuickLogic等公司还提供反熔丝技术的FPGA,只能下载一次,具有抗辐射、耐高低温、低功耗和速度快等优点,在军品和航空航天领域中应用较多,但这种FPGA不能重复擦写,开发初期比较麻烦,费用也比较昂贵。Lattice是ISP技术的发明者,在小规模PLD应用上有一定的特色。早期的Xilinx产品一般不涉及军品和宇航级市场,但目前已经有Q Pro-R等多款产品进入该类领域。  目前主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、时钟管理和DSP)的硬核(ASIC型)模块。   FPGA芯片主要由6部分完成,分别为:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。   每个模块的功能如下:   1. 可编程输入输出单元(IOB)    可编程输入/输出单元简称I/O单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配要求。FPGA内的I/O按组分类,每组都能够独立地支持不同的I/O标准。通过软件的灵活配置,可适配不同的电气标准与I/O物理特性,可以调整驱动电流的大小,可以改变上、下拉电阻。目前,I/O口的频率也越来越高,一些高端的FPGA通过DDR寄存器技术可以支持高达2Gbps的数据速率。   外部输入信号可以通过IOB模块的存储单元输入到FPGA的内部,也可以直接输入FPGA 内部。当外部输入信号经过IOB模块的存储单元输入到FPGA内部时,其保持时间(Hold Time)的要求可以降低,通常默认为0。      为了便于管理和适应多种电器标准,FPGA的IOB被划分为若干个组(bank),每个bank的接口标准由其接口电压VCCO决定,一个bank只能有一种VCCO,但不同bank的VCCO可以不同。只有相同电气标准的端口才能连接在一起,VCCO电压相同是接口标准的基本条件。    2. 可配置逻辑块(CLB)  CLB是FPGA内的基本逻辑单元。CLB的实际数量和特性会依器件的不同而不同,但是每个CLB都包含一个可配置开关矩阵,此矩阵由4或6个输入、一些选型电路(多路复用器等)和触发器组成。 开关矩阵是高度灵活的,可以对其进行配置以便处理组合逻辑、移位寄存器或RAM。在Xilinx公司的FPGA器件中,CLB由多个(一般为4个或2个)相同的Slice和附加逻辑构成。每个CLB模块不仅可以用于实现组合逻辑、时序逻辑,还可以配置为分布式RAM和分布式ROM。 Slice是Xilinx公司定义的基本逻辑单位,一个Slice由两个4输入的函数、进位逻辑、算术逻辑、存储逻辑和函数复用器组成。算术逻辑包括一个异或门(XORG)和一个专用与门(MULTAND),一个异或门可以使一个Slice实现2bit全加操作,专用与门用于提高乘法器的效率;进位逻辑由专用进位信号和函数复用器(MUXC)组成,用于实现快速的算术加减法操作;4输入函数发生器用于实现4输入LUT、分布式RAM或16比特移位寄存器(Virtex-5系列芯片的Slice中的两个输入函数为6输入,可以实现6输入LUT或64比特移位寄存器);进位逻辑包括两条快速进位链,用于提高CLB模块的处理速度。 3. 数字时钟管理模块(DCM)  业内大多数FPGA均提供数字时钟管理(Xilinx的全部FPGA均具有这种特性)。Xilinx推出最先进的FPGA提供数字时钟管理和相位环路锁定。相位环路锁定能够提供精确的时钟综合,且能够降低抖动,并实现过滤功能。    4. 嵌入式块RAM(BRAM)  大多数FPGA都具有内嵌的块RAM,这大大拓展了FPGA的应用范围和灵活性。块RAM可被配置为单端口RAM、双端口RAM、内容地址存储器(CAM)以及FIFO等常用存储结构。RAM、FIFO是比较普及的概念,在此就不冗述。CAM存储器在其内部的每个存储单元中都有一个比较逻辑,写入CAM中的数据会和内部的每一个数据进行比较,并返回与端口数据相同的所有数据的地址,因而在路由的地址交换器中有广泛的应用。除了块RAM,还可以将FPGA中的LUT灵活地配置成RAM、ROM和FIFO等结构。在实际应用中,芯片内部块RAM的数量也是选择芯片的一个重要因素。    单片块RAM的容量为18k比特,即位宽为18比特、深度为1024,可以根据需要改变其位宽和深度,但要满足两个原则:首先,修改后的容量(位宽 深度)不能大于18k比特;其次,位宽最大不能超过36比特。当然,可以将多片块RAM级联起来形成更大的RAM,此时只受限于芯片内块RAM的数量,而不再受上面两条原则约束。    5. 丰富的布线资源  布线资源连通FPGA内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA芯片内部有着丰富的布线资源,根据工艺、长度、宽度和分布位置的不同而划分为4类不同的类别。第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;第二类是长线资源,用以完成芯片Bank间的高速信号和第二全局时钟信号的布线;第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;第四类是分布式的布线资源,用于专有时钟、复位等控制信号线。    在实际中设计者不需要直接选择布线资源,布局布线器可自动地根据输入逻辑网表的拓扑结构和约束条件选择布线资源来连通各个模块单元。从本质上讲,布线资源的使用方法和设计的结果有密切、直接的关系。    6. 底层内嵌功能单元  内嵌功能模块主要指DLL(Delay Locked Loop)、PLL(Phase Locked Loop)、DSP和CPU等软处理核(Soft Core)。现在越来越丰富的内嵌功能单元,使得单片FPGA成为了系统级的设计工具,使其具备了软硬件联合设计的能力,逐步向SOC平台过渡。  DLL和PLL具有类似的功能,可以完成时钟高精度、低抖动的倍频和分频,以及占空比调整和移相等功能。Xilinx公司生产的芯片上集成了DLL,Altera公司的芯片集成了PLL,Lattice公司的新型芯片上同时集成了PLL和DLL。PLL 和DLL可以通过IP核生成的工具方便地进行管理和配置。   7. 内嵌专用硬核  内嵌专用硬核是相对底层嵌入的软核而言的,指FPGA处理能力强大的硬核(Hard Core),等效于ASIC电路。为了提高FPGA性能,芯片生产商在芯片内部集成了一些专用的硬核。例如:为了提高FPGA的乘法速度,主流的FPGA中都集成了专用乘法器;为了适用通信总线与接口标准,很多高端的FPGA内部都集成了串并收发器(SERDES),可以达到数十Gbps的收发速度。    IP(Intelligent Property)核是具有知识产权核的集成电路芯核总称,是经过反复验证过的、具有特定功能的宏模块,与芯片制造工艺无关,可以移植到不同的半导体工艺中。到了SOC阶段,IP核设计已成为ASIC电路设计公司和FPGA提供商的重要任务,也是其实力体现。对于FPGA开发软件,其提供的IP核越丰富,用户的设计就越方便,其市场占用率就越高。目前,IP核已经变成系统设计的基本单元,并作为独立设计成果被交换、转让和销售   Cyclone II结构 Cyclone®II devices contain a two-dimensional row- and column-based architecture to implement custom logic. Column and row interconnects of varying speeds provide signal interconnects between logic array blocks (LABs), embedded memory blocks, and embedded multipliers.   The logic array consists of LABs, with 16 logic elements (LEs) in each LAB. An LE is a small unit of logic providing efficient implementation of user logic functions. LABs are grouped into rows and columns across the device. Cyclone II devices range in density from 4,608 to 68,416 LEs.         逻辑单元介绍(LE) The smallest unit of logic in the Cyclone II architecture, the LE, is compact and provides advanced features with efficient logic utilization. Each LE features: • 4输入查找表(LUT) • 可配置寄存器 • 2运行模式 • 动态的加、减控制 • 进位选择级联逻辑 • 性能增强特性 –LUT和寄存器级联 • 面积增强特性 –寄存器封装和反馈     FPGA的基本可编程逻辑单元是由查找表(LUT)和寄存器(Register)组成的,查找表完成纯组合逻辑功能。FPGA内部寄存器可配置为带同步/异步复位和置位、时钟使能的触发器,也可以配置成为锁存器。FPGA一般依赖寄存器完成同步时序逻辑设计。一般来说, 比较经典的基本可编程单元的配置是一个寄存器加一个查找表,但不同厂商的寄存器和查找表的内部结构有一定的差异,而且寄存器和查找表的组合模式也不同。  学习底层配置单元的LUT和Register比率的一个重要意义在于器件选型和规模估算。由于FPGA内部除了基本可编程逻辑单元外,还有嵌入式的RAM、PLL或者是DLL,专用的Hard IP Core等,这些模块也能等效出一定规模的系统门,所以简单科学的方法是用器件的Register或LUT的数量衡量   LE的结构 上图中所示,每个LE的可编程寄存器可以被配置为D T JK或SR等触发器的形式。 (PS : R-S 触发器:具有置 0 、置 1 、保持功能。 2 . D 触发器:具有置 0 、置 1 功能。 3 . J-K 触发器:具有置 0 、置 1 、保持、翻转功能。 4 . T 触发器:具有保持、翻转功能。 5 . T' 触发器:具有翻转功能。)    每个可编程寄存器都有数据,时钟,时钟使能和清零输入, 任意的内部逻辑都可以作为寄存器的时钟和清零信号输入。 多功能的IO和内部逻辑都可以作为时钟使能信号的输入。 另外,LUT的输出可不经寄存器直接驱动LE的输出。(上图的Register Bypass)。   每个LE都有三个输出可以用来连接到行 列的布线资源上。LUT或寄存器的输出都可以独立的作为这个三个输出的驱动来源。 两个LE的输出驱动列或行并直接连接到内部布线连接上并且一个用来驱动内部连线资源,当可编程寄存器驱动一个输出的时候,允许LUT驱动另一个输出。这种特性提高了设备的利用率,因为我们可以用LUT和寄存器来驱动完全无关的功能。注意:当使用寄存器包装功能时,LAB的同步加载信号是不可用的。(图中LAB-Wide Synchronous Load)   另外一个特性就是,可编程寄存器的输出可以反馈到这个LE的LUT的输入,这种机制就为设计提供了更多的可配置方案。   除了上面讲的三种输出,LE还有一个寄存器的级联输出,这就使得在同一个LAB的可编程寄存器层叠在一起。可以构成一个无连接的移位寄存器,节省了内部连线资源。       LE工作模式: LE有两种工作模式:普通模式和算术模式。   每种模式使用的LE资源是不同的。在两种模式中,LE都有六个输入其中四个数据输入,LAB级联输入,寄存器级联输入。LAB可以为可编程寄存器提供时钟,异步清零,同步清零,同步加载和时钟使能信号。这些信号在两种模式下都有效。 在quartus中可以对工作模式进行配置。 普通模式 适合一般的逻辑以及逻辑组合应用场合,在这种模式下四个数据输入直接连接到LUT,quartus软件会自动选择上一个LE级联信号或者data3作为LUT的一个输入。 算术模式 主要是为了解决加法,计数,累加和比较功能。一个LE在算术模式下可作为一个2bit的全加器和基本的级联功能。 • 动态算术模式 –为下列功能设计 • 加法器 • 计数器 • 累加器 • 比较器 –使用进位级联从而获得更快的速度 • 由综合工具自动选择     逻辑阵列块 Each LAB consists of the following: ■ 16 LEs ■ LAB control signals ■ LE carry chains ■ Register chains ■ Local interconnect The local interconnect transfers signals between LEs in the same LAB.  Register chain connections transfer the output of one LE’s register to the  adjacent LE’s register within an LAB. The Quartus II Compiler places  associated logic within an LAB or adjacent LABs, allowing the use of  local, and register chain connections for performance and area efficiency.  Figure 2–5shows the Cyclone II LAB. 下图为逻辑阵列块结构 同个LAB内的LE可任意连接,另外还可以与其他LAB  M4K PLL IOE等实现连接。   LAB控制信号 Each LAB contains dedicated logic for driving control signals to its LEs.  The control signals include: ■ Two clocks ■ Two clock enables ■ Two asynchronous clears ■ One synchronous clear ■ One synchronous load
  • 热度 25
    2013-4-8 12:10
    8440 次阅读|
    0 个评论
    ECO那些事之LE与ALM 王敏志 概述   这里继续《ECO那些事之属性编辑器》一文,描述下如何在属性编辑器里对LE以及ALM进行手动修改。重点比较一下LE与ALM在属性编辑器中的区别,通过这些比较就可以很容易地理解为何在ALTERA的高端FPGA中实现TDC功能的难度要比其低端器件高很多。 在《基于FPGA的TDC那些事之设计资源LAB》一文中对于ALTERA高低端器件组成LAB不同的单元LE和ALM进行了介绍,同时也作了比较。本文笔者希望站在ECO处理角度再次进行比较介绍LE和ALM。   LE在属性编辑器中概览   在《ECO那些事之属性编辑器》一文中,有一节详细描述了LE的属性,由于笔者主要使用ECO修改TDC设计,所以这里重点关注LE的算术模式。在算术模式下,LUT可以理解为两个三输入子LUT。第一个三输入子LUT产生相加“和”信号输出,第二个子LUT用于产生进位输出信号。当LE配置为算术模式时,用户不仅能更改SUM方程式,还可以修改CARRY进位方程式。如图1所示,右侧的SUM等式和Carry等式都是可修改的,当然也可以通过修改SUM和Carry LUT掩码来自动更新等式。 从图1可以看出,虽然LUT分成了两个子LUT但是求和输出(Sumout)只与LUT(注意与LE的区别)的输入有关,这个从图左侧的视图或者右侧的SUM等式都可以清楚看到。这点是LE与ALM最大的区别,后面详述。 图1:配置成算术模式LE属性编辑器概览 另外,注意图1右侧等式里的符号“#”和“$”,在《ECO那些事之属性编辑器》一文中已经对其所代表的涵义进行了推导,理解其含义对于利用ECO修改LE和ALM很重要。为了便于比较,图2给出的是当LE配置为Normal模式下时,其属性编辑器的概览。可以看到,左侧只有一个LUT,而右侧的Carry掩码以及Carry等式均为“N/A”状态。 图2:配置成Normal模式LE属性编辑器概览   ALM在属性编辑器中概览   ALTERA的宣传资料在介绍ALM的时候通常如《基于FPGA的TDC那些事之设计资源LAB》一文中图3那样进行简单介绍。ALM的工作模式比LE多出了几个,其实主要模式还是Normal和算术模式。图3所示为ALM的Normal模式。 图3:Normal模式下的ALM 如果只看图3,似乎和图2的LE没什么太大区别(多个LUT,及LUT的输入更多),其实除了图3表面的这些区别之外,如果深入到属性编辑器可以发现更多细节的不同处,如图4所示。 图4:配置在Normal模式下ALM属性编辑器概览 虽然Normal模式不是本文的重点,但是这里还是有必要比较并列举出图2和图4的主要差别点,有些差异在算术模式下一样。 l  ALM包含2个ALUT,所以属性栏分别包含TOP和BOTTOM两栏 l  ALM的属性编辑器里属性栏没有显示当前察看的ALM的工作模式 l  每个ALUT被分为3个子LUT,上面的分别为1个F0 LUT和2个F0 LUT,下面分别为1个F1 LUT和2个F3 LUT l  ALM内包含有2个加法器,不象图1中的LE需要LUT自己实现加法功能 l  多出端口DATAF、DATAE,以及这两个端口和其它端口在ALM内部路径是有区别的 l  端口DATAD也和LE有些许区别 上面列举的这些差异,都是造成ALTERA高端FPGA器件中实现TDC功能难度增大的原因。那么,逻辑实现TDC功能,还是需要利用逻辑单元的算术模式,其在属性编辑器中概览如图5所示。 图5:配置在算术模式下ALM属性编辑器概览 比较图4和图5,明显区别是ALM中的加法器以及寄存器都被利用起来了,而且右侧的属性栏里多了有关register的两项。 利用属性编辑器手动修改ALM 在《ECO那些事之属性编辑器》一文里也举了几个利用属性编辑器简单的修改ALM例子,特别是在推导符号“#”和“$”功能的时候。笔者这里首先给出的一个例子是对《ALTERA FPGA/CPLD设计 – 基础篇》中关于属性编辑器一段描述的存疑。在该书的第179页的表5-1中列出了LUT掩码真值表。图6给我们展示了实际输入DATAD和DATAC的真值,即分别为“FF00”和“F0F0”,那么DATAA和DATAB的真值也很容易知道,这和该书籍上的描述不一致,该书将ABCD正好弄反了。 图6:LUT输入真值 接下来,我们注意虽然ALM有8个输入,但是每个子LUT的方程式只能包含A、B、C和D,不能包含F0 、F1、E0和 E1,而Sumout方程式和Carryout方程式中可以包含,而我们知道这两个方程式不能直接进行修改。 图7:修改前ALM上半部分 图7是图6对应的ALM原理视图,三个子LUT的输入只有DATAC和DATAD,这和图6中的求和及进位方程式相符。如果我们要把DATAC移到DATAF,会发生什么呢?如图8所示,我们发现这时候QuartusII并没有自动更新LUT掩码以及方程式。这时候如果使用ECOs得到的结果是不对的,因为方程式中使用的DATAC根本没有任何连接。所以还需要手动修改LUT方程式,使得Sumout方程式由SUM((!D)+(!C))+(!VCC)变成SUM((!D)+(!F))+(!VCC),同样的Carryout方程式也会得到自动更新。注意这里的目的不是要改变逻辑功能,只是简单将DATAC上的信号移到DATAF(这点在以后的TDC设计中非常重要,因为我们不是要改变功能,而是要改变路径,即信号path)。 图8:只是将DATAC移动到DATAF 那么应该修改那个子LUT方程式呢,分析图8,应该是修改F2子LUT方程式,但是怎么修改呢,经过尝试,发现修改方程式到“!d”即可,如图9所示,修改F2子LUT方程式导致其他方程式及掩码得到了自动更新。至于为何是“!d”还未搞清楚,反正是跟DATAD有关系。 图9:修改子LUT方程式并自动更新求和及进位方程式 上面这个例子充分回答了之前笔者所说的上述ALM与LE的差异会如何导致实现TDC功能难度的增加,同时这个例子也揭示了我们应该如何在高端FPGA中正确的进行TDC设计。   分析及结论   本文在属性编辑器的角度进一步比较了LE和ALM的异同,给普通客户揭开了一个小缝隙,使其可以了解ALTERA的编译工具是如何对逻辑单元进行布局布线的。学习ECO修改设计,从而确保TDC在高端FPGA器件成功实现。
  • 热度 21
    2012-12-21 10:45
    3117 次阅读|
    0 个评论
    上一篇博文我们认识到了 Delay 模块和 Memory Delay 模块的区别,但是,貌似我们还有个问题没有明确,认识到它们的区别到底有什么作用呢?笔者先来将一个自己在 DSP_Builder 算法设计过程中遇到的问题。笔者设计一个小波分解的算法,该算法需要把数据按次序奇偶性分离,还需要对行数据和变换后的数据进行延时,因此需要大量使用 delay 模块或者 memory delay 模块,当算法设计完成进行编译时,一个奇怪的事情发生了, memory bits 资源只占用了 60% 左右,但提示 memory 资源不够。笔者为了揭开上述错误的谜团,才进行了上述博文的实验。 本次我们就来看一下到底为什么会出现上述现象。 我们先来讲述一个 FPGA 的基础知识。我们知道,对于 Cyclone II 系列的 FPGA ,其逻辑单元( LE )是构成 FPGA 的基本单元之一,一个 LE 由一个 4 输入的 LUT 、一个寄存器及进位和互连逻辑组成。但我们设计一个由少于 4 个输入端和 1 个数据输出端组成的电路时,一个 LE 足矣,但当我们由 5 个输入端和 1 个输出端组成电路时,就必须有两个 LE 构建,但有 1 个 LE 没有得到充分利用,其他电路能否再利用这个没有得到充分利用的资源呢,答案是不能。这个也就解释了为什么 FPGA 逻辑资源不可能达到 100% 的缘故。 受此影响,我们想,既然剩余的逻辑资源不能被再利用,那未用完的 M4K 资源能否得到再利用呢,为了说明这一点,我们做个试验,就一目了然了。笔者这个实验所用的芯片是 Cyclone II 的 EP2C8Q208C8 ,该芯片有 8256 个 LE ,以及 36 个 M4Ks 资源。我们这个实验是把该芯片上 36 个 M4Ks 全部耗尽,但每个都有剩余空间,看还能否再利用。 笔者设计了一个算法,如图所示。 这个算法很明显, 36 个 M4Ks 全部消耗完毕,但至少有两个 M4Ks 资源没有得到充分利用,我们编译完查看资源消耗情况也很清楚。 接下来,我们就在上图算法基础上再加一部分,如下图。 看到了吧,笔者意图相当明显,如果能够编译通过,那可以证明,未完全使用的 M4Ks 可以得到再利用;如果编译失败,要就只能说明, M4Ks 如同 LE 一样,未完全使用的只能被丢弃。 实践证明,编译失败。由此可以说明,一个 M4Ks 被用过以后,即使有剩余空间,也不能被再利用了。这个结论揭示了笔者在算法设计中遇到的问题, memory 资源占用率仅为 60% ,但确提示没有足够的 memory 资源。 由这两篇博文也揭示出一个道理:在算法设计过程中,功能的实现是前提,但算法的优化也是必不可少的。
相关资源