程序清单2.8comp2bit.v//Example4:comp2bitmodule comp2bit(input wire [1:0] a,input wire [1:0] b.output wirea eq boutput wire a gt b,outputwirea It bassigna_qbb[]&b[0]&[1]&a[0]1~b[]] &b[0] &-a[1] &a[0]b[1]&-b[0]&a[1]&~[0]b1]&b0]&a[]&a[0]assignagtb-~b[1]&a[]~b[1] &~b[0] &a[0]~b[0] &a[] &a[0];gna ltb-b[]&-a[1](b[1] & b[0] &~a[0][b[0]&~[1] &-a[0];endmodule程序清单2.9comp2bittop.v1/Example4:2-bitcomparator_top-levelmodulecomp2bit_top(input wire [3:0] sw,output wire [2:0] ldcomp2bitU1(a(sw3:2),.b(sw[1:0).a_cq_b(ld[m]),a_gt b(ld[0),a_ tb(ld[2])endmodnl19
19 程序清单 2.8 comp2bit.v 程序清单 2.9 comp2bit top.v
出出店XXsooonsto0n15ooms图2.28二位比较器的仿真图20
20 图 2.28 二位比较器的仿真图
第3章现场可编程门阵列(FPGA)到了20世纪80年代中期,一个完全不同的架构被提出,它使用基于RAM的查找表而不是与或门来实现组合逻辑。这类器件被称为现场可编程门阵列(FieldProgrammableGateArrays,FPGA),。FPGA包含一个可配置逻辑块阵列(ConfigurableLogicBlocks,CLB),其周围是一个I/O块。Xilinx公司的Spartan-3E也包含一些RAM块、18X18乘法器和一个数字时钟管理器(Digital ClockManager,DCM)模块。这些DCM用于消除时钟分布延迟,同时也用于增加或减小时钟频率。Spartan-3EFPGA中的每个CLB都含有4个Slice,每个Slice又包含两个 16×1 的 RAM 查找表(Look-up Tables,LUT),可以用来实现任何4 变量的组合逻辑电路。除了两个查找表,每个Slice还包含两个D触发器,其作用就如同比特存储器件。Spartan-3EFPGA的基本构架如图3.1所示。CUTELUT三国/FFU国图3.1Spartan-3EFPGA的构架Digilent 的 BASYS 板包含一个Xilinx Spartan 3E-100 TQ144 FPGA。这个芯片包括240个CLB,分布成22行16列。因此,它含有960个Slices,共包括1920个查找表(LUT)和触发器。该芯片还包含73728位的块RAMa芯片一上有一半的查找表可用作一个最大可达15360位的分布式RAM。21
21 第 3 章 现场可编程门阵列(FPGA) 到了 20 世纪 80 年代中期,一个完全不同的架构被提出,它使用基于 RAM 的查找表而不是与或门来实现组合逻辑。这类器件被称为现场可编程 门阵列(Field Programmable Gate Arrays, FPGA ) 。FPGA 包含一个可配置逻 辑块阵列(Configurable Logic Blocks,CLB),其周围是一个 I/O 块。Xilinx 公司的 Spartan-3E 也包含一些 RAM 块、18×18 乘法器和一个数字时钟管理 器(Digital Clock Manager, DCM)模块。这些 DCM 用于消除时钟分布延迟, 同时也用于增加或减小时钟频率。 Spartan-3E FPGA 中的每个 CLB 都含有 4 个 Slice,每个 Slice 又包含两 个 16×1 的 RAM 查找表(Look-up Tables , LUT ) ,可以用来实现任何 4 变 量的组合逻辑电路。除了两个查找表,每个 Slice 还包含两个 D 触发器,其 作用就如同比特存储器件。Spartan-3E FPGA 的基本构架如图 3.1 所示。 图 3.1 Spartan-3E FPGA 的构架 Digilent 的 BASYS 板包含一个 Xilinx Spartan 3E-100 TQ144 FPGA。这 个芯片包括 240 个 CLB,分布成 22 行 16 列。因此,它含有 960 个 Slices, 共包括 1 920 个查找表(LUT)和触发器。该芯片还包含 73 728 位的块 RAM a 芯片一上有一半的查找表可用作一个最大可达 15 360 位的分布式 RAM
Digilent的NEXYS2板包含一个XilinxSpatan3E一500FG320FPGA这个芯片包含1164个CLB,分布成46行34列。因此,它含有4656个Slice,共包括9312个查找表(LUT)和触发器。该芯片还包含368640位的块RAM。芯片上有一半的查找表可用作一个最大可达74752位的分布式RAMo一般来说,FPGA可以实现比CPLD更大型的数字系统,如表3.1所示。表3.1中门数列表示的是等价门数,我们在FPGA中所看到的并不是真正的与门和或门,而是RAM查找表。注意:表4.1中的FPGA含有数百万门和好儿万触发器(每个Slice包含两个与门(AND)和两个异或门(XOR),当实现算术功能(如加法器和多路选择器)时,它们可作为进位和算术逻辑的一部分),这就意味着,对于大型的逻辑系统,即使是用Verilog实现逻辑表达式,也是不太实际的。这些可以在FPGA上实现的逻辑系统,通常可以用硬件描述语言VHDL或Verilog来设计,即描述逻辑电路的行为特性。然后,这些VHDL或Verilog代码可一以被仿真和综合。表3.1XilinxCPLD和FPGA的比较Xilinx Pa门数VO数CPLD9500 系列800~6 400FPGASpart5.000~4000016384~57344Sparan I15000~200600.006-5148434560822768~294912Spatnlll1916928Spartan7848320660005000001.60920728~66355artan076131072Virtex1240228OA512144Virtex555368519681694074162243728-3096576838161040-99832Verilog例程例5:映射报告(MapReport)我们己经知道Spartan-3EFPGA中的每个CLB都包含4个Slice,每个Slice又含有两个4输入的查找表。每个查找表可以实现任何4输入的组合逻辑功能。回想一下例1中图2.17所示的电路,它有2个输入和6个输出。你可以通过单击ISEsimulator设计流程窗口的实现设计(ImplementDesign)标签来验证它。实现设计步骤完成后,在进程(Process)窗口下,单击“ImplementDesign"前的"+"图标,展开该目录,双击Map下的“MapReport"即可#一开映射报告,显示Design Summary,如图3.2所示。22
22 Digilent 的 NEXYS2 板包含一个 Xilinx Spatan 3E—500 FG320 FPGA。 这个芯片包含 1164 个 CLB,分布成 46 行 34 列。因此,它含有 4 656 个 Slice, 共包括 9 312 个查找表(LUT)和触发器。该芯片还包含 368 640 位的块 RAM。 芯片上有一半的查找表可用作一个最大可达 74 752 位的分布式 RAM o 一般来说,FPGA 可以实现比 CPLD 更大型的数字系统,如表 3.1 所示。 表 3.1 中门数列表示的是等价门数,我们在 FPGA 中所看到的并不是真正的 与门和或门,而是 RAM 查找表。注意:表 4.1 中的 FPGA 含有数百万门和好 儿万触发器(每个 Slice 包含两个与门(AND)和两个异或门(XOR),当实现算 术功能(如加法器和多路选择器)时,它们可作为进位和算术逻辑的一部分), 这就意味着,对于大型的逻辑系统,即使是用 Verilog 实现逻辑表达式,也 是不太实际的。这些可以在 FPGA 上实现的逻辑系统,通常可以用硬件描述 语言 VHDL 或 Verilog 来设计,即描述逻辑电路的行为特性。然后,这些 VHDL 或 Verilog 代码可一以被仿真和综合。 表 3.1 Xilinx CPLD 和 FPGA 的比较 Verilog 例程 例 5:映射报告(Map Report) 我们己经知道 Spartan-3E FPGA 中的每个 CLB 都包含 4 个 Slice,每个 Slice 又含有两个 4 输入的查找表。每个查找表可以实现任何 4 输入的组合 逻辑功能。回想一下例 1 中图 2.17 所示的电路,它有 2 个输入和 6 个输出。 你可以通过单击 ISE simulator 设计流程窗口的实现设计(Implement Design) 标签来验证它。实现设计步骤完成后,在进程(Process)窗口下,单击 “Implement Design”前的“+”图标,展开该目录,双击 Map 下的“Map Report" 即可#J 一开映射报告,显示 Design Summary,如图 3.2 所示
Design SummaryNumberoferrorssNumber of wamings:Logic UtilizatiNumber of 4 input LUTs:6outof93121%LogicDistribution1%NumberofoccupiedSlices3outof4656NumberofSlices containing only related logie:3.outof13100%Numberof Slices containing unrelated logic:outof390%SeeNOTESbelowforanexplanationoftheeffectsofunrelatedlogic.Total Number of4 input LUTs:6outof93121%Number of bonded IOBs232130/8outof图3.2例1映射报告中的DesignSummary注意:在例1中,使用了9312个LUT中的6个。这6个LUT包含在3个Slice中。另外,使用了8个I/O块,有两个是用于输入的,6个是用于输出的。例2(见程序清单2.4和2.5)中,我们还是使用6个输出,但每个输出有4个输入。那么例2将需要多少个查找表(LUT)和IOB呢?打开Maprepor并检查你的答案是否正确。例3中应注意:它有4个输入和1个输出,这刚好是一个单个的查找表(LUT)。真值表中的输出被存储在一个 16X1 的 RAM 中。所以,正如图 3.3所示的映射报告所证实的那样,这个设计应当用一个LUT。另外,例3中还使用了5个IOB,为什么?23
23 图 3.2 例 1 映射报告中的 Design Summary 注意:在例 1 中,使用了 9 312 个 LUT 中的 6 个。这 6 个 LUT 包含在 3 个 Slice 中。另外,使用了 8 个 I/O 块,有两个是用于输入的,6 个是用于 输出的。 例 2(见程序清单 2.4 和 2.5 )中,我们还是使用 6 个输出,但每个输出有 4 个输入。那么例 2 将需要多少个查找表(LUT)和 IOB 呢?打开 Map report 并检查你的答案是否正确。 例 3 中应注意:它有 4 个输入和 1 个输出,这刚好是一个单个的查找表 (LUT)。真值表中的输出被存储在一个 16×1 的 RAM 中。所以,正如图 3.3 所示的映射报告所证实的那样,这个设计应当用一个 LUT。另外,例 3 中 还使用了 5 个 IOB,为什么?