热度 31
2013-12-8 11:13
5320 次阅读|
9 个评论
1 .概述 ALTERA的器件手册虽然介绍了LE,但是有些非常细节的内容在器件的handbook里是找不到的。实际上,大部分应用中FPGA工程师是没有必要详细了解这些细节的,只是如果了解这些细节对于FPGA的设计显然是有帮助的,比如当你进行诸如TDC的设计的时候。 Cyclone II的逻辑单元(Logic Cell)是在Cyclone基础上进行了成本优化,它们之间的主要区别有: a、没有了取反端口(.inverta) b、寄存器没有了异步加载(load)端口 c、简化了进位电路,没有了内部进位信号 根据我们以前对于FPGA中最小逻辑单元的了解(比如Stratix II中的ALM),基本的逻辑单元将主要分为两部分。一部分是组合逻辑部分,另一部分是寄存器部分。Cyclone II器件中的任一个LE都包含一个组合逻辑和一个寄存器模块。 同时,和Stratix II家族器件使用相同的WYSIWYG原理,基本上逻辑单元的每一个端口都是能够连接的,且功能必须直接由参数指示。 本文将主要包含以下几段内容: 组合逻辑WYSIWYG模块描述 寄存器WYSIWYG模块描述 描述逻辑单元中WYSIWYG模块的连接 2 . LE 组合逻辑原语 cycloneii_lcell_comb ( .dataa(), .datab(), .datac(), .datad(), .cin( ), .combout(), .cout() ); defparam .lut_mask = ; defparam lcell_name .sum_lutc_input = sum lut input choice; 2.1 LE 组合逻辑输入端口 :逻辑单元(Logic Cell)的唯一标识符。这只是一个命名而已,任何在HDL合法的标识都可以在这里使用,该标识是必须的。 .dataa (), … . datad ( ):逻辑单元的LUT输入端口。不同的LUT输入端口有不同的运行速度。Quartus II的fitter将会为设计选择最终的地连接。(注:在有关基于FPGA的TDC设计文章中,笔者介绍过其实可以通过ECO修改LUT的输入端口连接)。 .cin ():逻辑单元的进位输入信号端口。该信号应该来自于另一个逻辑单元的.cout端口,它不能直接设置为GND,或者被取反,但是它能直接接VCC,后面会介绍如何连接.cin。 2.2 LE 组合逻辑输出端口 .combout ( ):逻辑单元的组合逻辑输出。 .cout ( ):逻辑单元的进位输出。需要注意的是当.cout连接到其它逻辑单元,那么它必须连接到其它逻辑单元的.cin端口。 2.3 LE 组合逻辑模式 为连接到{datac,cin}中的一个。这里的模式(mode)表现的是什么连接到了求和LUT(sum LUT)中的“datac”,独立于逻辑单元的模式。如果“模式”是datac,那么上级LUT(或者全四输入LUT)的datac端口由datac上的信号驱动。如果是模式为cin,那么上一级LUT(upper LUT)(或者全四输入LUT)的datac端口由cin上的信号驱动。 是一个可选项,如果.cin端口连接了,那么默认为cin模式,否则默认为datac模式。 2.4 LE 组合逻辑结构框图 图1展示了逻辑单元组合逻辑模块完整的功能框图。我们看到有五个输入和两个输出,下一节将详细介绍其最通常的应用。 图1:逻辑单元组合逻辑模块完整功能框图 2.5 LE 组合逻辑使用 LE的组合逻辑模块可以工作于普通(Normal)或者算术(Arithmetic)两种模式。 2.5.1 普通模式 当LE配置为普通模式时,四输入查找表LUT能实现四输入变量的所有功能,其实是由四个数据输入描述的查找表LUT掩码决定。普通模式方程式如下所示: Combout = F(dataa, datab, datac or cin, datad ) 图2显示了普通模式下的LE的组合逻辑模块。 图2:普通模式下LE的组合逻辑模块 2.5.2 算术模式 在这个模式下,除了正常的查找表输出(即combout)外,还有第二个查找表用于计算进位输出。请注意这里两个查找表不是完全独立的,实际上,当你将上述组合逻辑输出(combout)方程式F中的datad固定为0时,你将得到的就是进位输出(carryout)功能。 通常,.datad是连接到VCC,那么正常的查找表的输出是通过统计.dataa,.datab,以及根据sum_lutc_input的值选择.datac或.cin这三者的和得到。而第二个查找表通过实现基于.dataa,.datab以及.cin的方程式来计算进位信号。上述两个方程式分别表示如下: Combout = F1(dataa, datab, datac or cin) datad # F0(dataa, datab, datac or cin) ! datad Cout = F0(dataa, d a tab, cin) 图3显示了工作于算术模式的LE组合逻辑模块。 图3:算术模式 2.6 LUT 掩码推导 指明了逻辑单元中查找表LUT中的值。这些值是属于由4个十六进制数字组成的数字,或者16位二进制数值。 注:Quartus II编译器可以使用LUT掩码的任何格式,包括十六进制、二进制或者常数形式。如果使用Verilog为了兼容仿真模型以及第三方工具,最好给分配一个常数形式(十六进制或者二进制根均可)。比如,使用 defparam in stan ce_name .lut_mask = 16'hFF00; 或者 defparam instan ce_name .lut_mask = 16'b 111 111 11000000 00; 而不是使用 defparam instan ce_name .lut_mask = "FF00"; 或者 defparam instan ce_name .lut_mask = "1111111 100 000000"; 查找表掩码使用正逻辑数,其组成格式如表1所示,表1显示了当这16-bit顺序如O 15 O 14 O 13 …O 2 O 1 O 0 这样时数据是如何组成的。 表1:正常模式查找表掩码数据组成 四输入查找表就像一个二选一树一样,LUT的第一个输入控制第一级的二选一,第四个输入控制最后一级二选一(即在0和1之间选择),整个组合的输出就是LUT的输出。 如果我们设定LUT的第四个输入为0或者1,那么16-bit的LUT掩码天然地被分为两个8-bit部分,即F0和F1,每一个表现如一个三输入LUT。这对于逻辑单元工作于算术模式非常有用。在这种情况下,LUT第四个输入为0时对应的8个LUT输出位对应于F0方程式输出,第四个输入为1时对应的8个LUT输出位那么就对应于F1方程式输出。图4显示了LUT掩码AA34是如何映射到F0和F1查找表的。 图4:16-bit查找表掩码如何分别映射到F0和F1查找表中 2.7LE 组合逻辑模块极性以及极性默认值 表2描述了LE所有输入端口的极性及其可编程取反硬件特性。能被可编程取反的端口信号具有双重极性。 表2:LE组合逻辑模块输入端口极性 如果在原语实例中没有明确的设置,那么逻辑单元中的端口信号默认是未连接任何信号的。