华为FPGA设计高级技巧(Xilinx篇)
Xilinx fpga 设计培训中文教程-10_1
在当前源文件进程窗口 点击靠近实现设计进程的 + 以展开该进程 展开布局布线进程 展开生成布局布线后静态时序报告进程 双击布局布线后静态时序报告
图 10b-1. 布局布线后静-XLX-CLAS
Ch.10b-4
? 1. 多少路径约束是失败的 时序错误的数目 本实现的时序积分是多少
图 10b-6. 端口选项卡
实现选项实验
1-877-XLX-CLAS
Ch.10b-8
点击 I/O 配置选项选择框. 一些附加的列将出现在窗口的上部 你也许需要将它们向 右翻以便查看
确定信号名称按照字母顺序排列 如果不是 点击端口名称方框以将这些信号名称按 字母排序
向下翻并点击 rd_data<0>
在当前源文件进程窗口 右击布局布线 Place & Route 性 Properties (图 10b-2)
然后从菜单中选择属
图 10b-2. 当前源文件进程窗口
在进程属性对话框中 点击靠近布局布线尝试级别的方框 一个箭头将出现在方框的 右边 指示着下拉的一系列选项
实现选项实验
1-877-XLX-CLAS
过程
你可以利用给定的约束文件(myucf.ucf)及缺省的软件选项来开始实现一个项目 然后你 可以通过调整进程属性和 I/O 配置选项来改进设计性能 注意 当使用 Toolwire 执行本实验时 所有的软件程序 文件以及项目都放在卷标 U:\ 下面而不是 C:\下面
实现选项实验
1-877-XLX-CLAS
欲退出时序分析器 可以选择下列方法中的一个 选择文件 File → 退出 Exit , 并点击出现的弹出式对话框中的 Yes 点击时序分析器窗口右上角的 X 并点击出现的弹出式对话框中的 Yes
FPGA编程技巧分享
FPGA编程技巧分享FPGA(Field-Programmable Gate Array)是一种集成电路芯片,它具有可编程的逻辑单元和可编程的连线资源,能够根据用户的需求重新配置其功能。
FPGA广泛应用于数字信号处理、图像处理、通信等领域,具有灵活、快速的特点。
在进行FPGA编程时,掌握一些技巧能够帮助开发者更高效地完成工作。
首先,合理的资源利用是FPGA编程的关键。
在进行FPGA设计时,要考虑到芯片的资源限制,合理分配资源,避免资源的浪费。
可以通过细致的代码优化和逻辑设计,实现资源的最大化利用,提高性能和功耗效率。
其次,熟练掌握常用的FPGA编程语言和工具对于开发者至关重要。
VHDL和Verilog是FPGA编程中常用的硬件描述语言,开发者需要对这两种语言有深入的了解,并能熟练运用。
此外,熟悉常用的FPGA开发工具如Xilinx ISE、Vivado、Quartus等,能够帮助开发者高效地完成设计和调试工作。
另外,要注重时序约束的设置和优化。
时序约束是指对时钟周期、时钟时序等关键时序参数进行设定,以保证FPGA设计的正常工作。
合理的时序约束能够避免时序违反问题,保证设计的稳定性和性能。
优化时序约束可以提高设计的时序容错率和稳定性,降低时序违反的风险。
此外,模块化设计是提高FPGA编程效率的重要手段。
将复杂的设计拆分成多个模块,每个模块负责不同的功能,有助于降低设计复杂度,提高代码的可读性和维护性。
模块之间的接口设计要清晰明了,避免出现功能模块之间的冲突和耦合,保证设计的稳定性和可靠性。
最后,持续学习和积累经验也是提高FPGA编程水平的重要途径。
FPGA领域发展迅速,不断涌现新的技术和工具,开发者需要保持学习的热情,及时了解最新的发展动态,不断积累实践经验,提高自身的技术水平。
总的来说,FPGA编程是一项复杂而有挑战性的工作,需要开发者具备坚实的硬件设计基础和编程技能。
通过合理的资源利用、掌握常用的编程语言和工具、时序约束的设置和优化、模块化设计和持续学习,开发者可以提高FPGA设计的效率和质量,实现更好的工程目标。
FPGA设计的四种常用思想与技巧
FPGA设计的四种常用思想与技巧FPGA(Field-Programmable Gate Array)是一种可编程逻辑设备,可以通过重新配置内部电路来实现不同的功能。
在FPGA设计中,有许多常用的思想和技巧,可以帮助设计者提高效率和性能。
本文将介绍四种常用的FPGA设计思想与技巧。
第一种常用思想与技巧是模块化设计。
模块化设计是将大型的FPGA设计划分为多个小的功能模块,每个模块负责一个具体的功能。
通过将设计划分为多个模块,可以提高设计的可维护性和复用性。
设计者可以单独对每个模块进行测试和调试,然后再将它们整合到一起。
此外,模块化设计还能够提高设计的并行性和性能。
每个模块可以在FPGA中独立运行,并且可以通过并行处理来提高设计的执行速度。
第二种常用思想与技巧是流水线设计。
流水线设计是将一个复杂的计算过程划分为多个阶段,并且在每个阶段中并行处理多个数据。
通过流水线设计,可以提高设计的吞吐率和时钟频率。
每个阶段可以在不同的时钟周期中执行,从而实现数据的并行处理。
此外,流水线设计还能够降低设计的时延和资源占用。
每个阶段的计算量可以被均匀地分布到多个时钟周期中,从而减少每个时钟周期的计算量,提高设计的时延和资源占用。
第三种常用思想与技巧是优化技巧。
优化技巧包括逻辑优化、时钟优化和资源优化。
逻辑优化是通过精简逻辑电路来减少资源的使用。
可以通过合并逻辑门、消除冗余逻辑和合并常量来实现逻辑优化。
时钟优化是通过减少时钟延迟和减小时钟功率消耗来提高设计的性能和功耗。
可以通过选择适当的时钟结构、减少时钟的分频和优化时钟路径来实现时钟优化。
资源优化是通过合理利用FPGA中的资源来减少资源的使用。
可以通过共享资源、适当分配资源和使用低功耗资源来实现资源优化。
第四种常用思想与技巧是并行设计。
并行设计是将多个功能模块同时执行,从而提高设计的执行速度和吞吐率。
可以通过并行处理来减少设计的执行时间,提高设计的性能。
可以通过使用多个时钟域、多个时钟频率和复杂分频来实现并行设计。
FPGA设计技巧与案例开发详解
FPGA设计技巧与案例开发详解FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,它可以根据用户的需求重新配置其内部的电路结构,从而实现不同的功能。
在FPGA设计中,有一些技巧和案例开发的经验可以帮助设计者提高设计效率和设计质量。
本文将详细介绍一些常用的FPGA设计技巧和案例开发的方法。
一、FPGA设计技巧1. 合理分配资源:FPGA拥有有限的资源,包括逻辑单元(LUTs)、寄存器、DSP(Digital Signal Processing)等。
在设计过程中,需要合理分配这些资源,以充分利用FPGA的性能。
可以通过对设计进行优化,如减少逻辑层数、使用更小的数据宽度等,来减少资源的使用。
2.使用IP核:FPGA提供了许多现成的IP核,如UART、SPI、I2C等。
使用这些IP核可以减少设计的复杂性,加快设计的速度。
同时,使用IP核还可以提高设计的可重用性,便于后续的维护和升级。
3.时序约束:FPGA设计中的时序是一个重要的考虑因素。
通过合理设置时序约束,可以确保时序要求的满足,避免出现时序失效的问题。
时序约束包括时钟频率、时钟延迟、数据到达时间等方面的要求。
4.时钟域划分:在FPGA设计中,会存在多个时钟域的情况。
为了确保时钟域之间的同步和数据的正确流动,需要进行时钟域划分。
可以使用时钟域划分器件(如时钟分频器、时钟锁相环等)来实现时钟域的划分和同步。
5.状态机设计:FPGA设计中经常会使用状态机来实现复杂的控制逻辑。
在状态机设计中,需要考虑状态的转移条件、状态的数量、状态的稳定性等因素。
合理设计状态机可以使设计更加简洁、高效。
1. UART通信:UART(Universal Asynchronous Receiver Transmitter)是一种常用的串行通信接口。
在FPGA设计中,可以使用UART实现FPGA与外部设备的通信。
具体实现过程包括接收和发送数据的时序控制、数据格式的解析等。
fpga设计技巧
fpga设计技巧FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,它具有灵活性和可重构性,可以用于许多不同的应用领域。
在进行FPGA 设计时,有一些技巧可以帮助设计者提高设计效率和性能。
下面将介绍一些常用的FPGA设计技巧。
1.分层设计:将设计划分为多个层次,每个层次中包含不同的模块和功能。
这样可以使设计更加结构化和模块化,提高可维护性和重用性。
2.时钟域划分:将设计中的不同模块和功能划分到不同的时钟域中,以避免时钟相关问题。
时钟域划分可以减少时序问题的影响,并简化时序分析。
3.时钟分频和时钟使能:在设计中使用合适的时钟频率和时钟使能信号可以降低功耗,并提高性能。
合理的时钟分频和时钟使能策略可以减少功耗,并减少时钟延迟。
4.信号同步:在设计中,当跨时钟域传递信号时,需要进行信号同步以避免时序问题。
常用的信号同步方法包括使用双边沿触发器和同步器。
5.时序约束:在进行FPGA设计时,需要对时序进行约束,以确保设计满足时序要求。
时序约束可以通过设置时钟分配、路径延迟和约束路径等方式来实现。
6.使用硬件优化:在FPGA设计中,可以使用硬件优化技术来提高性能和资源利用率。
例如,使用DSP模块来实现复杂的算法,使用硬件加速器来提高计算性能等。
7.并行处理:FPGA具有并行处理的能力,可以对设计中的一些计算任务进行并行处理,以提高性能和吞吐量。
设计者可以使用并行处理器和流水线技术来实现并行计算。
8.时序优化:在进行FPGA设计时,时序优化是一个重要的步骤。
时序优化可以通过调整时钟分配、路径延迟和设计结构等方式来实现。
时序优化可以提高设计的工作频率和性能。
9.状态机设计:在FPGA设计中,状态机是一个常见的设计元素。
设计者可以使用状态机来实现复杂的控制逻辑和状态转换。
状态机设计应该尽量简化和优化,以提高性能和可维护性。
10.测试和调试:在进行FPGA设计时,测试和调试是一个必不可少的步骤。
fpga设计技巧
FPGA设计技巧引言Field Programmable Gate Arrays(FPGA)是一种可编程的逻辑器件,广泛应用于数字电路设计。
它们提供了快速原型设计以及灵活的硬件实现能力。
在设计FPGA 时,有一些关键的技巧可以帮助设计师提高效率、减少开发时间并优化设计。
本文将介绍一些常用的FPGA设计技巧,旨在帮助读者在FPGA项目中取得更好的结果。
优化电路结构在设计FPGA时,优化电路结构是提高性能的重要一步。
以下是一些常见的电路优化技巧:1.减少信号延迟:在FPGA设计中,信号延迟是一个关键问题。
通过适当的设计方法,如合适的时钟分配、减少信号路径等,可以最小化信号延迟并提高系统性能。
2.减少功耗消耗:尽量减少不必要的功耗消耗对于优化FPGA设计是很重要的。
在设计过程中,可以使用低功耗模式、灵活的时钟管理和适当的电源设计来降低功耗。
3.适当的时钟分配:在FPGA设计中,时钟分配是至关重要的。
正确的时钟分配可以确保电路的稳定性和可靠性。
建议使用时钟缓冲器和时钟分频器来优化时钟分配。
4.良好的布局规划:合理的布局规划可以提高电路的性能和可靠性。
良好的布局可以减少信号跳变和互相干扰,从而优化FPGA设计。
选择合适的逻辑元件在FPGA设计中,选择合适的逻辑元件是至关重要的。
以下是一些常见的逻辑元件选择技巧:1.选择适当的门级元件:根据设计需求,选择合适的门级元件可以提高性能和效率。
常见的门级元件包括与门、或门、非门等。
2.选择适当的触发器:在FPGA设计中,触发器是常用的逻辑元件。
根据设计需要,选择合适的触发器类型(如D触发器、JK触发器等)可以优化性能。
3.选择适当的多路选择器:多路选择器在FPGA设计中经常使用。
选择适当的多路选择器可以简化电路结构并提高性能。
使用合适的设计工具在FPGA设计中,使用合适的设计工具可以提高设计效率和准确性。
以下是一些常见的设计工具技巧:1.使用仿真工具:在FPGA设计之前进行仿真测试是非常重要的。
XilinxFPGA编程技巧之常用时序约束详解
Xilinx FPGA编程技巧之常用时序约束详解i.基本的约束方法为了保证成功的设计,所有路径的时序要求必须能够让执行工具获取。
最普遍的三种路径为: .输入路径(In put Path ),使用输入约束.寄存器到寄存器路径(Register-to-Register Path ),使用周期约束.输出路径(Output Path ),使用输出约束.具体的异常路径(Path specific exceptio ns ),使用虚假路径、多周期路径约束1.1. 输入约束In put Co nstrai ntOFFSET IN约束限定了输入数据和输入时钟边沿的关系。
1.1.1. 系统同步输入约束System Sy nchron ous In put在系统同步接口中,同一个系统时钟既传输数据也获取数据。
考虑到板子路径延时和时钟抖动,接口的操作频率不能太高。
1-1简化的系统同步输入SDR接口电路图1-2SDR系统同步输入时序上述时序的约束可写为:NET "SysCIk" TNM_NET = "SysCIk";TIMESPEC "TS_SysClk" = PERIOD "SysClk" 5 ns HIGH 50%;OFFSET = IN 5 ns VALID 5 ns BEFORE "SysClk";1.1.2. 源同步输入约束Source Syn chro nous In put在源同步接口中,时钟是在源设备中和数据一起产生并传输。
1-3简化的源同步输入DDR接口电路1-4DDR源同步输入时序上图的时序约束可写为:NET "SysCIk" TNM_NET = "SysCIk";TIMESPEC "TS_SysCIk" = PERIOD "SysCIk" 5 ns HIGH 50%;OFFSET = IN 1.25 ns VALID 2.5 ns BEFORE "SysClk" RISING;OFFSET = IN 1.25 ns VALID 2.5 ns BEFORE "SysClk" FALLING;1.2. 寄存器到寄存器约束Register-to-Register Constraint寄存器到寄存器约束往往指的是周期约束,周期约束的覆盖范围包括:.覆盖了时钟域的时序要求.覆盖了同步数据在内部寄存器之间的传输.分析一个单独的时钟域内的路径.分析相关时钟域间的所有路径.考虑不同时钟域间的所有频率、相位、不确定性差异1.2.1. 使用DLL, DCM, PLL, and MMCM 等时钟器件自动确定同步关系使用这一类时钟IP Core,只需指定它们的输入时钟约束,器件将自动的根据用户生成IP Core时指定的参数约束相关输出,不需用户手动干预。
第六章 Xilinx FPGA硬件设计方法
En(SW1) Up/Dn(SW0) clk 1/5000000 2选1
BTN_SOUTH SW2
4.4 片上逻辑分析仪
• 调试和验证非常重要
– 调试和验证占FPGA设计时间的40%以上.
传统调试方式—面临挑战
• 内部信号难以访问
– 嵌入式系统总线 – 硬IP核
• 专用设备 • 将信号定义到I/O • 不灵活
• 分类
4.1 Xilinx的IP核介绍
• Xilinx FPGA可用IP核
– LogiCore:由Xilinx原厂设计
• FIR滤波器、累加器、乘法器、积分器、RAM、 FIFO、PCI控制器等。可配置,通常免费。
– AllianceCore:Xilinx的第三方合作伙伴设 计 – DMA控制器、可编程终端控制器、通用串口 控制器、ATM编码器等。通常,不能进行参 数配置。
– 概念,用法
• 时钟管理IP
• ChipScope IP
– 虚拟输入输出端口; – 产生激励信号
• Integrated Logic Analysis Core(ILA)
– 访问内部节点和信号 – 调试验证信号行为 – 定义触发条件
– 总线分析核 – 协议检测 – 调试、验证控制总线、地址总线和数据总线
• Agilent Trace Core 2(ATC2)
= 输入时钟周期/phase_shift
• 两种工作模式
– 固定模式 – 变量模式
应用实例—— 1/10分频器
• • • • 1) 新建工程 2) 配置DCM 3)编写测试向量 4)仿真
演示Core Generato r用法
仿真结果
应用实例—— 计数器
Xilinxfpga设计培训中文教程7.pdf
解答
• 如果箭头涵盖的部分是约束的路径 那么在此电路中路径终点 是什么 是否所有的寄存器都有相同点
– 路径终点是触发器
– 触发器的时钟都为同一个信号 以此网络为参考的约束将会约束 在此设计中的所有寄存器之间的时延路径
ADATA
CLK BUFG
FLOP1 DQ
– 这个设计的最高系统时钟频 率为50 MHz
全局时序约束 - 7-6
© 2002 Xilinx公司版权所有
有时序约束的情况
• 同一个设计 只是用约束编 辑器输入了三个全局时序约 束
• 最高系统时钟频率达60 MHz • 注意一下 大部分的逻辑都
离器件中分配了管脚的那一 侧更近
全局时序约束 - 7-7
© 2002 Xilinx公司版权所有
更多关于时序约束
• 时序约束应该被用来定义你的性能目标
– 加较紧的时序约束会增加编译的时间 – 加不现实的约束会导致实现工具停止运行 – 在布局布线前 利用综合工具的时序估计能力或映射后静态时
序报告 以确定你的时序约束是否现实 参见“获取时序逼近I” 模块
全局时序约束 - 7-8
全局时序约束
© 2002 Xilinx公司版权所有
目标
完成此模块的学习后 你将会 • 为一个简单的同步设计加全局时序约束 • 用约束编辑器加全局时序约束和管脚配置
全局时序约束 - 7-3
© 2002 Xilinx公司版权所有
概览
• 简介 • 周期约束与管脚-到-
管脚约束 • 偏置 OFFSET 约束 • 约束编辑器 • 总结
全局时序约束 - 7-4
© 2002 Xilinx公司版权所有
fpga现代数字系统设计教程——基于xilinx可编程逻辑
fpga现代数字系统设计教程——基于xilinx可编程逻辑在当今的数字系统设计领域中,基于现场可编程门阵列(Field-Programmable Gate Array,FPGA)技术的应用日益普遍。
Xilinx是其中一家领先的FPGA厂商,其可编程逻辑芯片被广泛应用于各个领域。
本教程旨在介绍FPGA现代数字系统设计的基本概念与技术,重点关注基于Xilinx可编程逻辑的实践应用。
一、引言FPGA是一种可重构的硬件平台,具有高度的灵活性与可定制性。
通过不同的配置,FPGA可以实现各种数字电路功能,比如逻辑运算、数字信号处理、嵌入式系统等等。
Xilinx提供了一套完整的开发工具与设计流程,使得FPGA的设计与实现更加高效与简便。
二、FPGA基础知识介绍1. FPGA的基本结构与工作原理在FPGA中,逻辑资源(如逻辑门、寄存器)通过可编程的内部连接资源相互连接,形成不同的数字电路。
FPGA采用按位编程的方式,通过配置存储器将逻辑连接进行设定,从而实现不同的功能实现。
2. Xilinx系列FPGA概述Xilinx公司生产的FPGA主要分为Artix、Kintex、Virtex等系列,每个系列有不同的性能与资源规模适用于不同的应用场景。
本节将介绍主要的Xilinx系列FPGA及其特点。
三、FPGA设计实践1. 集成开发环境(Integrated Development Environment,IDE)概述设计FPGA系统需要使用特定的软件工具,例如Xilinx提供的Vivado开发环境。
本节将介绍Vivado的基本功能与使用方法。
2. 基于Xilinx可编程逻辑的数字电路设计通过Vivado IDE,我们可以使用硬件描述语言(HDL)如VHDL或Verilog来描述数字电路。
本节将介绍如何使用HDL进行FPGA设计,包括逻辑门设计、时序控制、状态机设计等。
3. FPGA系统集成设计除了单个模块的设计,FPGA设计还需要进行系统级集成。
FPGA设计技巧与案例开发详解
FPGA设计技巧与案例开发详解FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,它具有广泛的应用领域,包括数字信号处理、图像处理、网络通信等。
为了充分发挥FPGA的潜力,设计师需要掌握一些技巧和案例开发经验。
以下是对FPGA设计技巧与案例开发的详细解释。
1.划分模块和时序在FPGA设计中,划分模块和时序非常重要。
模块化设计可以提高系统的可维护性和复杂性管理,同时也使得不同的模块可以并行开发。
时序是指操作在FPGA中执行的时间顺序,如果时序不正确,可能会导致系统功能错误或性能下降。
设计师应该考虑到模块之间的接口和时序要求,并进行正确的划分和管理。
2.选择合适的算法和数据结构FPGA设计中的算法和数据结构选择也非常重要。
设计师应该根据具体的应用和需求选择合适的算法和数据结构,以实现高效的计算和存储。
例如,对于图像处理应用,使用合适的算法和数据结构可以减少计算和存储资源的使用,提高系统性能。
3.优化性能和资源使用优化性能和资源使用是FPGA设计中的关键课题之一、设计师应该针对设计的关键部分进行性能和资源的优化,以提高系统的吞吐量和减少资源消耗。
例如,使用流水线技术可以提高系统的并行性,使用片上存储器可以减少对外部存储器的访问次数。
4.进行仿真和验证在FPGA设计过程中,进行仿真和验证是必不可少的步骤。
设计师应该使用合适的仿真工具和验证方法,对设计进行全面的功能和性能验证。
这可以帮助设计师发现和修复潜在的问题,并提高系统的可靠性和正确性。
5.案例开发经验除了上述的设计技巧,案例开发经验也非常重要。
设计师可以参考已有的FPGA设计案例,了解并学习其中的设计思路和技巧。
这些案例可以包括各种应用领域,如数字信号处理、图像处理、网络通信等。
通过分析和借鉴这些案例,设计师可以提高自己的设计能力,并在实际项目中应用。
综上所述,FPGA设计技巧与案例开发需要设计师具备一定的知识和经验。
FPGA设计的四种常用思想与技巧
FPGA设计的四种常用思想与技巧FPGA(Field-Programmable Gate Array)设计是一种在可编程逻辑器件中实现数字电路的方法。
FPGA设计的目标是实现高性能和可重配置性。
在进行FPGA设计时,有一些常用的思想和技巧可以帮助提高设计效率和性能。
下面将介绍四种常用的FPGA设计思想和技巧。
一、级联式管脚规划级联式管脚规划是一种在FPGA设计中常用的思想和技巧。
FPGA器件通常具有多个I/O管脚,而每个管脚都有特定的功能。
合理地规划管脚可以提高设计的可重用性和可维护性。
一种常用的级联式管脚规划方法是按照功能对管脚进行分组,并将每个功能组的管脚连接到同一位置。
例如,可以将所有时钟信号管脚连接到一个区域,将所有输入信号管脚连接到另一个区域,将所有输出信号管脚连接到另一个区域。
这样做可以使设计更加清晰,方便信号的布线和修改。
二、状态机设计状态机设计是一种常用的FPGA设计思想和技巧。
状态机是一种特殊的数字电路,在FPGA设计中可以用于实现复杂的逻辑控制。
在进行状态机设计时,首先需要确定状态机的状态数和状态转换条件。
然后,可以使用状态图或状态表来描述状态机的行为。
接下来,可以使用具体的硬件描述语言(如VHDL或Verilog)来实现状态机。
状态机设计可以极大地简化控制逻辑的复杂性,提高设计的可读性和维护性。
它还可以实现更高的性能和时序要求。
三、并行处理并行处理是一种常用的FPGA设计思想和技巧。
FPGA器件通常具有多个可并行计算的资源,如DSP(Digital Signal Processor)模块、片上RAM(Random Access Memory)和多路复用器等。
在进行并行处理时,可以使用这些资源来提高设计的性能和吞吐量。
例如,可以使用DSP模块进行乘法运算,使用片上RAM进行数据存储,使用多路复用器实现多路选择等。
并行处理可以充分利用FPGA器件的并行计算能力,提高设计的运算速度和效率。
华为fpga设计高级技巧
华为fpga设计高级技巧随着人工智能、5G等领域的持续发展,FPGA(Field-Programmable Gate Array)在数字电路设计中的应用也越来越广泛。
作为一种灵活、高性能的可编程逻辑器件,FPGA在加速数据处理和算法执行等方面具有独特的优势。
华为作为全球领先的通信技术公司,也在FPGA设计方面积累了丰富的经验和技巧。
本文将介绍一些华为FPGA设计的高级技巧,帮助开发者更好地利用FPGA实现各种复杂功能和优化性能。
一、优化FPGA资源利用1. 多功能模块设计:在FPGA设计中,经常会遇到需要多种功能的模块,此时可以设计一个通用的多功能模块,通过配置参数来实现多种功能。
这样可以减少开发时间和资源占用,提高设计的灵活性和通用性。
2. 时序约束优化:在FPGA设计中,时序约束是非常关键的一环,准确而合理的时序约束可以确保设计的正常工作,并且提高系统的稳定性和可靠性。
因此开发者需要仔细分析时序要求,对时序约束进行优化,以达到最佳性能。
3. IP核使用:FPGA设计中经常会用到各种IP核,如DDR控制器、PCIE控制器等,这些IP核可以大大简化设计,减少开发时间和提高设计可靠性。
因此开发者应充分利用FPGA厂商提供的IP核或自行设计IP核,以更好地实现所需功能。
4. 资源共享:在FPGA设计中,资源是有限的,因此需要合理地利用资源来实现各种功能。
开发者可以通过资源共享的方式来提高资源利用率,如多个模块共享一个资源、复用电路等,以减少资源浪费和提高设计效率。
二、优化FPGA性能1. 并行计算:FPGA具有并行计算的能力,可以同时执行多个操作,提高计算速度和性能。
因此开发者应充分利用FPGA的并行计算能力,将任务划分成多个子任务,并行执行,以提高系统的性能和效率。
2. 流水线设计:流水线设计是一种有效提高FPGA性能的方法,可以将一个操作划分成多个阶段,并行执行,减小每个阶段的延迟时间,提高设计的时钟频率和数据处理速度。
fpga高级设计技巧
fpga高级设计技巧FPGA(现场可编程门阵列)的高级设计技巧包括以下几点:1. 时钟树设计:时钟树是FPGA设计中非常关键的部分,因为它决定了系统的运行速度和稳定性。
要遵循单一时钟、时钟域划分、跨时钟域信号同步处理等原则,并尽可能使用FPGA内部的PLL、DLL和MMCM等工具来产生时钟。
2. 面积与速度的平衡:面积和速度是FPGA设计的两个重要指标,它们之间需要达到平衡。
在满足设计时序要求的前提下,应尽量占用最小的芯片面积,或者在规定面积下使设计的时序余量更大、频率更高。
3. 异步设计避免:尽可能采用同步设计,因为异步设计可能导致时序问题和其他难以预料的问题。
4. 功能模块复用:如果一个设计有较大的时序余量,可以通过功能模块的复用来减少整个设计消耗的芯片面积。
5. 数据流串并转换与并行复制:如果设计的时序要求很高,无法达到设计频率,可以通过将数据流进行串并转换,并行复制多个操作模块,采取乒乓操作和串并转换的思想运行。
6. 充分理解硬件语言:深入理解硬件描述语言(如VHDL或Verilog)以及它们是如何映射到FPGA上的逻辑资源的。
这有助于更好地优化设计,使其更有效地使用FPGA的资源。
7. 代码优化:优化硬件描述语言代码以减少资源使用和提高性能。
这可能包括减少不必要的逻辑门、优化算法、使用流水线设计等。
8. 仿真和测试:在设计过程中进行充分的仿真和测试,确保设计的正确性和性能。
这可以尽早发现并修复问题,减少后期调试的时间和成本。
9. 工具的使用:利用FPGA厂商提供的EDA(电子设计自动化)工具进行设计、布局和布线。
这些工具通常包括一些高级特性,如时序分析、功耗分析、布局优化等。
10. 文档和规范编写:在设计过程中及时编写和更新文档,记录设计决策、模块接口、时序约束等重要信息。
这有助于维护设计的可读性和可维护性,方便后续的修改和扩展。
遵循这些高级技巧,可以帮助您更有效地进行FPGA设计,提高系统的性能、稳定性和可维护性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
共62页产品名称Xilinx 篇yyyy/mm/dd日期2001/09/15日期深圳市华为技术有限公司版权所有 不得复制修订记录内部公开请输入文档编号FPGA 设计高级技巧目 录414.3 减少关键路径的逻辑级数.............................................404.2IF 语句和Case 语句揭开逻辑级数未变速度更快SRLVirtexIIXilinx篇626.3.3 专有资源的利用................................................616.3.2 Distributed RAM 代替通道计数器...................................616.3.1 Distributed RAM 代替BlockRAM ....................................616.3 如何降低芯片面积..................................................616.2.9 迂回策略为关键路径腾挪空间进行位置约束.....................................616.2.7 关键路径单独综合.......................................616.2.5 专有资源的利用................................................616.2.4 基本设计技巧..................................................616.2.3 采用BUFGS ...................................................616.2.2 对线延时比较大的netTIG 和Multi-Cycle-Path ...................606.2 如何提高芯片速度..................................................606.1 可能成为关键路径的电路.............................................606 综合运用..............................................................605.4 TimingAnalyzer 的作用...............................................595.3 FloorPlanner 的作用..................................................595.2 FPGA Editor 的作用..................................................595.1.3 正确看待map 之后的资源占用报告..................................585.1.2 布局布线策略设计方案阶段对关键电路的处理.......................585.1 布局布线..........................................................585 如何使用后端工具.......................................................574.16 LFSR 加1计数器...................................................574.15 SRL 的使用.......................................................574.14 Block SelectRAM 的使用.............................................564.13 Distributed RAM 的使用.............................................554.12 高效利用IOB ......................................................544.11 利用LUT 四输入特点减少扇出巧妙地延时................................494.7 组合逻辑和时序逻辑分离.............................................474.6流水线................................................464.5.4 综合工具与资源共享............................................464.5.3 子表达式共享..................................................454.5.2 loop 语句......................................................444.5.1 if 语句........................................................444.5 资源共享..........................................................434.4 合并if 语句赋予关键路径最高优先级............................内部公开请输入文档编号FPGA设计高级技巧627 感谢 (62)6.3.4 基本设计技巧..................................................表目录33表5 VirtexII 的DCM 分布表.................................................27表4 VirtexII乘法器速度表.......................................25表3 带奇偶校验位的Block RAM 配置表........................................24表2 VirtexII 的BlockRAM 分布表顶部上半部分58图65 15位基本型LFSR 计数器在VIRTEX 器件中的实现...........................57图64 采用Distributed RAM 实现多路加1计数器..................................55图63 输入输出寄存器移入IOB 中............................................55图62 VirtexE IOB 结构示意图...............................................54图61 采用三态电路实现电路选择............................................54图60 多路选择..........................................................53图59 扇出较小..........................................................53图58 扇出较大..........................................................52图57 组合逻辑在前..............................................52图56 组合逻辑在后..............................................49图55 Mealy 状态机的基本结构...............................................49图54 采用流水线之后的电路结构............................................48图53 采用流水线之前电路结构..............................................46图52 资源共享后一个加法器................................................45图51 资源共享前4个加法器................................................45图50 资源共享后2个加法器...............................................42图48 critical 信号只经过一级逻辑............................................42图47 critical 信号经过2级逻辑...............................................41图46 case 语句完成电路选择................................................40图45 if-else 完成多路选择..................................................39图44 并行加法电路.......................................................39图43 串行加法电路.......................................................39图42 超前进位..........................................................38图41 串行进位..........................................................37图40 No-read-on-write mode ................................................37图39 Write first mode ......................................................36图38 Read first mode ......................................................36图37 完整的单端口Block Select RAM .........................................35图36 门数增加但资源占用减少FPGA设计高级技巧关键词速度与面积压缩线延时腾挪空间摘 要以速度和面积为主题缩略语清单:ASICConfigurable Logic Block DCIDigital Clock ManagerDDRDelay-Locked Loop FPGAGeneral Routing MatrixIOBLinear Feedbak Shift RegisterLUTSum of Product SRLCustom Constraints File 参考资料清单:内部公开请输入文档编号FPGA 设计高级技巧时钟资源1 前言随着HDL 硬件描述语言综合工具及其它相关工具的推广连线等工作解脱开来极大地提高了工作效率有利就有弊现在越来越多的工程师不关心自己的电路实现形式我只要将功能描述正确工程师在用HDL 语言描述电路时或者非常模糊映射到芯片中又会是什么样子遇到问题容量更大的FPGA 器件更为要命的是更不了解与器件结构紧密相关的设计技巧工具不行导致问题迟迟不能解决导致开发成本急剧上升我们的设计规模越来越庞大几百万门的电路屡见不鲜我们所采用的器件工艺越来越先进而在对待深亚微米的器件上要更多地关注以前很少关注的线延时ASIC 设计以后也会如此此时设计技巧上有所提高而且从节约公司成本角度出发本文从澄清一些错误认识开始以速度和面积为主题本文对读者的技能基本要求是如加法器RAM 等熟悉基本的同步电路设计方法对FPGA 的结构有所了解2 综合工具与代码风格硬件描述语言和综合工具的产生然而一种不好的现象也在逐步蔓延只关注功能是否实现很少考虑电路到底是如何实现的如速度如果将设计看成是一个化学变化我们所掌握的背景知识才是参加化学反应的分子因此不能完全指望工具只有我们才是决定设计成败的关键一般包括如下两个过程前者是把行为级的描述通过一定的算法转化成门级的描述与用户约束无关通过算法映射到相应的工艺库中的器件上是映射到厂商的Gate 库中是映射到FPGA器件的单元结构中当设计代码的的风格不一样时对ASIC来说器件库一般也是GateÎÒÃDz»ÄÑÀí½âCode Style 对FPGA设计的重要性如下的16选1MUXÈçcase语句后者使用BUFT的描述图2 使用内部三态线描述的Mux2.2不同综合工具的性能不同综合工具的针对目标不一致和各综合工具的不同性能目前Design CompilerFC2Leonardo 其中DC主要是用于ASIC的综合工具其中Leonardo 是做FPGA 综合工具的先驱Synplicity公司出品但无论哪家综合工具都必须紧密结合各FPGA厂家的FPGA结构从目前来看优选Synplify 或Leonardo 综合工具到目前为止如Virtex 系列的进位链目前是这样因为综合工具一直在升级因此无法得到更好的性能则可综合出来Synplicity公司的综合工具比较优秀一点不过价格太贵导致设计性能变差若想得到更好的性能但这种基于FPGA器件的代码设计FPGA设计与ASIC设计的兼容性因此要采取恰当的风格对FPGA设计而言1. 资源共享的应用限制在同一个module里综合工具才能最大限度地发挥其资源共享综合作用这样3. Critical path所在的module与其它module分别综合对其它module采用面积优先的综合策略4. 尽可能Register所有的Output¶Ô¼ÓÔ¼Êø±È½Ï·½±ãÕâ¶Ô×ۺϷdz£ÓÐÀûËÙ¶ÈË«Ó®µÄÄ¿µÄ¾ßÌå´óС6. 一个module尽量只有一个时钟更多的代码风格verilog代码书写规范3 FPGA器件结构许多工程师在做设计时不关心自己的电路是怎么实现的并且认为至于它是如何实现的这实际是轻实现其结果是在我们的设计中人为地制造了一大堆第一个设计有20~30µ±È»Èç¹û´ó¼ÒÔÚÒ»¸ö¸ßÊÖÈëÔƵĻ·¾³Ï½øÐÐѬÌÕÎÒÃÇÔÚÇ°ÃæÌáµ½¶øÇÒ¹¤¾ß±¾ÉíÒ²²»Ò»¶¨·Ç³£ÖÇÄÜÏëÒ»ÏëÄÇôËü»¹ÓÐÓÅ»¯µÄÓàµØÂðÎÊÌâ×Ü»áÔ½À´Ô½¶àÔÚÕâÖÖÇé¿öÏÂÁ˽âÎÒÃǵÄÉè¼ÆÊÇÈçºÎʵÏÖµÄÈç½øλÁ´IOB中的register等如果没有如修改代码或者是一个非常行之有效的手段只有工具与大脑完美结合主要目的是想让读者知道了解FPGA器件结构对做好FPGA设计有多么重要可参见一书3.1器件结构对Coding Style的影响3.1.1 FPGA结构Altera 的FPGA一般的结构都是由一些CLB 的宏单元组成LUT时序单元如Altera 的FPGA和Xilinx的FPGA都采用4输入的查找表Component的延时是固定的我们知道对FPGAÈçÀûÓÃÁ˶àÉÙ¼¶µÄ²éÕÒ±íÏßÑÓʱÔò·´Ó³ÔÚCLB与CLB的互连上就需要越长的互连线在FPGA中如进位链等目的是减少对CLB数目的使用如Virtex 系列中但不占用LUT的资源可以用来实现快速进位的加法器或宽输入的函数因此就应该考虑如何更好地利用FPGA器件中的这些特点或标准单元其线延时不象FPGA那样因此深亚微米级时但更多的是与门因此3.1.3 Coding Style的对比由于器件结构的不同针对ASIC和FPGAFPGA器件的设计性能很大程度依赖于Coding ¶ÔGate Array或shandard cellÉè¼ÆÒ²²»±ØÒªÇóºÜ¸ßµÄCoding 技术66M 就很容易实现我们很少看见几十层逻辑级的设计8 级逻辑级一般只能实现到50M左右因此要达到高速和好的性能则需要好的代码风格和好的设计策略那就是提到Code Style 时往往忽略了对器件结构的了解对FPGA而言是以减少LUT的个数为主要手段不一定能提高速度和降低面积注意门数和面积不一定成正比至于为什么自然会明白可提供如下功能提供更高密度的FPGA资源xc2v40xc2v10000最高支持420M内部时钟频率和840Mb/s 的I/O支持19 种 single-ended 标准的IO 和 9种差分IO 标准VirtexII 具有XCITE 功能IOB中集成了DDR 寄存器支持可编程的sink current在RAM上 对外RAM接口性能提高400M b/s DDR-SDRAM 接口400Mb/s FCRAM 接口333Mb/sQDR-SRAM 接口600Mb/s Sigma RAM 接口567ÔöÇ¿ÁËÒÔÍùDLL 功能16个全局时钟8.15um 技术3.3 结构概述VirtexII 器件结构示意图如下3 VirtexII 结构示意图VirtexII 器件在结构上与Virtex 和VirtexE 是相似的但增加了一个专有乘法器结构在IOB 和CLB 中也有点不同3.3.1 CLBVirtexII 的CLB 与Virtex Family 和VirtexE Family 结构有点不一样在结构的安排上如下示意图Xilinx篇图4 VirtexII 的CLB结构示意图与以往不同的是4个Slice 按照如上图的阵列排布GRM在CLB中保证4个slice 之间快速的互联每列两个slice µ«Á½Áй²ÓÃÒ»¸öÒÆλÁ´3.3.2 SliceSlice基本元件包括G函数FFX一般用做D触发器另外Slice中还集成了carry logicmultiplexers等元件高性能电路图5 SLICE结构示意图内部公开请输入文档编号FPGA设计高级技巧值得大家注意的是由于设计者没有注意利用Slice中的一些高速特性或者FPGA资源实际利用率不高图6 VirtexII 的Slice 结构图VirtexII 的Slice 增加了不少的结构3.3.3 LUT每个Slice 包含两个4输入的LUT4000系列的功能也就是当做组合逻辑电路这两个功能在随后的章节会详细介绍它的4个输入G1F函数F4通过对RAM中各存储单元进行配置4输入任意组合逻辑这本身就是它原来的特点也可配置成双端口RAM1与此有关详情参见本章部分要提醒大家注意的是不管你是几输入的函数还可参见本章补充说明部分SRL从而大大节省线延时和面积如下图所示CLB的4个Slice的的SRL16移位输出可串成一个大的移位链LUT的MC15就是移位的输出作为F函数移存器的shiftin图7 SRL的移位链在使用SRL时请注意一个Shift Registers LUT只能有一个数据输出和一个数据输入VirtexII 的Slice 增加了MUXF7MUXF5F的输出可在一个CLB中实现4选一的MUXMUXFX MUXF7ÊäÈëΪFXINA输出为FX F7或F8要看Slice 具体位置用于MUX相邻两个Slice 的MUXF5的输出X1Y0两个Slice 的MUXFX可例化成MUXF6两个Slice¼´¿ÉÔÚÒ»¸öCLB中实现8选1的MUXMUXF7Òò´ËÖ»ÄÜÊÇX0Y1 这个Slice 的MUXFX可例化成MUXF7ʵÏÖ´óÓÚ8选1的MUX般工具无法直接利用该功能但通过F7可在一个CLB 中的4个Slice 实现一个16选1 的MUX用于MUX 相邻两个Slice 的F7通过MUXF8实现更宽的函数MUXF5FFF F 图8 VirtexII 的MUXFX 连接图3.3.6 Carry Logic 和Arithmetic Logic GatesArithmetic Logic Gates 包括一个XOR 和一个MULTIAND VirtexII 的Slice 结构图与基本Slice 中的进位链结构一样数据流从下往上进位链结构如下图所示图9 进位链结构示意图下图是一个采用进位链实现3bit全加器示意图图10 使用进位链实现加法器采用进位链如下图所示图11 使用进位链级联实现高速宽函数运算由于乘法器可看成累加器使用专有进位链还可实现乘法器与以往的器件不同的是如下图所示图12 VirtexII 的两个独立进位链注意3.3.7 SOPVirtexII 的每个Slice 中有一个OR 用于把Slice 中的进位链在水平方向上级联起来灵活的SOP链内部公开请输入文档编号FPGA设计高级技巧图13 VirtexII 的SOP 链上图中横向的ORCY连接成4输入的或门只是提供了4个attribute SRLOW前两者用于描述SR¿ØÖƵĸ´Î»ÊôÐÔ后两者用于描述在没有外部复位信号时configuration 或通过全局的GSR网络复位为0或为1´æ´¢µ¥Ôª½á¹¹ÈçÏÂʾÒâ14 FFX/FFY结构示意图上图的DY是G函数发生器输出信号Y在Slice 外部直接反馈进来的信号VirtexII 的Slice 结构示意图当配置成单端RAM时当配置成双端RAM时且是一端口可读可写一个VirtexII的CLB含4个Slice下面两图是Distributed RAM的应用例子图15 单端口32x1 RAM图16 双端口16x1 RAM3.4.2 Block RAMVirtexII 的Block RAM资源比以往的增加很多在整个VirtexII 系列中4列或6列的规律进行分布图17 VirtexII 的Block RAM 分布规律其中的N 等于该器件CLB的列数除以4±í2 VirtexII 的BlockRAM 分布表由于块RAM有18bit ÿ¸ö¶Ë¿Ú¿ÉÅä³ÉÈçϽṹ表3 带奇偶校验位的Block RAM 配置表VirtexII 的block RAM支持三种写模式new data is written 图18 Write first 模式Read first图19 Read first 模式NO CHANGE图20 No Change 模式关于Block RAM 更多的内容sp_block_mem.pdf3.5 乘法器资源VirtexII 系列提供有专门的乘法器结构VirtexII 的乘法器资源分布图与Block RAM 的分布图一样共用4个 开关矩阵内部公开请输入文档编号FPGA 设计高级技巧图21 乘法器与Block RAM器件中乘法器位置如下图图23 乘法器块乘法器可实现高速的低工耗的乘法器速度如下表Xilinx篇表4 VirtexII 乘法器速度表3.6 IOB一般的IOB I/Obuf存储单元包括输出寄存输入三态控制线也可以不经过寄存IOB中提供5中I/O Buf IBUF输出buf OBUFT双向buf IBUFGVirtex II 的IOB 基本结构与基本的IOB一样增加了一些IO标准和DCI功能IOB的位置有较大的改变VirtexII的所有用户IO 可配成差分信号因此5个IOB共用一个开关矩阵如下示意图图24 VirtexII的IOBVirtexII的IOB与基本的IOB结构相似I/Obuf 和输入延时线DELAY构成用于实现DDRÁ½¸ö´æ´¢µ¥ÔªÍ¨¹ýDDR MUX来实现DDRÒªÇóͨ¹ýDCM来产生DDR的正反沿时钟信号图25 VirtexII 的IOB中的DDR具体的结构如下26 VirtexII 的IOB 实际结构3.6.2 Select I/OVirtexII 的Select I/O 支持的标准有所增加每个banks 提供VRN和VRP参考电压VirtexII 提供19 种signal-ended IO 标准--LVTTL, LVCMOS (3.3V, 2.5V, 1.8V, and 1.5V)--PCI-X at 133MHz, PCI (3.3V at 33MHz and 66MHz)--GTL, GTLP--HSTL (Class I, II, III, and IV)--SSTL (3.3V and 2.5V, Class I and II)--AGP-2X提供如下的差分标准VirtexII 集成了DCI功能在芯片内部提供IO管脚的特定匹配电阻简化单板设计3.7 Clock ResourceVirtexII 的时钟资源比以往增加了很多如果想要了解更多的信息Virtex³õ¸å8个分布在芯片的顶部这些时钟管脚还可以当作普通管脚使用以顶部时钟为例由开关矩阵切换出16个时钟信号线16根时钟信号线通过8个时钟MUXÓëµ×²¿µÄ8个全局时钟信号组成全芯片的16个全局时钟信号图27 VirtexII 的Clock Pads具体的结构如下图各有一个开关矩阵8个时钟信号连到顶部的开关矩阵切换出16个时钟信号连到下面的8个时钟MUX 上28 VirtexII 的时钟在VirtexII 的器件中可以保证芯片的4个区域内最多都可以获得8个全局时钟信号在安排时钟管脚时必须考虑一下图29 VirtexII 的时钟资源分布原理3.7.2 CLK MUX在VirtexII 的器件中因此全局时钟资源可由时钟管脚BUFGMUX 的结构如下顶部Xilinx篇图30 VirtexII 的BUFGMUX该BUFGMUX 可有如下几种配置即普通的全局时钟BUFͼ31 VirtexII 的BUFGBUFGCE如下结构图图32 VirtexII 的BUFGCEBUFGMUX如下结构图内部公开请输入文档编号FPGA设计高级技巧图33 VirtexII 的BUFGCE3.7.3 DCMVirtexII 器件结构对Virtex 的DLL做了增强Digital Clock Manager DCM一般分布在芯片的底部和顶部如下画出V2250芯片的8个DCM4个在底部图34 VirtexII 250 的DCM 位置VirtexII 系列器件的DCM分布表如下表5 VirtexII 的DCM分布表VirtexII 的DCM 的符号如下35 VirtexII 的DCMDCM是对DLL的增强DLL延时锁相环通过该延时锁相环可保证DCM的输入DPS数字相移器DFS数字频率合成器DSS数字扩频本节所有内容来自个人推测3.8.1 LUT 如何配置成组合逻辑电路门数增加但资源占用减少之谜前面本文提到它的4个输入其实是RAM 的地址线它是怎么实现组合电路的呢以LUT 中的F函数为例F3F= F4F2F4F2表示非运算.or时1其它的值都是F4与门F4LUTÎÒÃÇÖ»Òª½«µØַΪ和的存储单元置为则该RAM 的功能实际就是F3与门在实际实现时111111101ͬʱF1固定接或我们可以得出结论在实际实现时都会变成4输入的组合电路对于在一个LUT 内可以实现的组合电路对LUT 而言3. 只要是在一个LUT 内实现的逻辑逻辑延时基本一样面积优化对Xilinx 而言根据上述结论如果想速度更快而不是逻辑级数则应当努力减少LUT 的个数这一点与ASIC 设计完全不一样内部公开请输入文档编号FPGA设计高级技巧图36 门数增加但资源占用减少我们知道一个LUT 只有一个输出后面的2个三输入或门要各占用一个LUTLUT 级数是2级虽然增加了一个2输入与门也是2级它只占用2个LUTÏÔÈ»ÃÅÊýÔö¼Óµ«×ÊÔ´Õ¼ÓüõÉÙµäÐÍ°¸ÀýÎÒÃÇÖ»ÒªÕÆÎÕÁ˵¥¶Ë¿ÚRAM本节以单端口RAM 为例进行说明Xilinx篇图37 完整的单端口Block Select RAM上图是一个完整的单端口RAM结构我们这里准备讲的单端口RAM是上图中的核心部分Block MemoryËüµÄдÓÐÈýÖÖ²Ù×÷ģʽRead FirstNo Change根据其输入输出信号相位关系图38 Read first mode图39 Write first mode图40 No-read-on-write mode图中可以等价看成Distributed RAM¾-³£Óöµ½ËٶȻòÃæ»ýÎÊÌâÉè¼ÆҪôËٶȲ»Âú×ãÒªÇó»òÕßÁ½Õ߶¼²»Âú×ãÉè¼ÆÒªÇó±¾ÕÂ×ÅÖØ´ÓËٶȺÍÃæ»ý½Ç¶È³ö·¢ÒÔ»ñµÃ×î¼ÑµÄЧ¹ûÓÐЩ·½·¨ÊÇÒÔÎþÉüÃæ»ýÀ´»»È¡ËÙ¶ÈÒ²ÓÐЩ·½·¨¿Éͬʱ»ñµÃËٶȺÍÃæ»ýµÄºÃ´¦Ó¦µ±ÒÀ¾Ýʵ¼ÊÇé¿ö¶ø¶¨向关键路径要时间部分为了获得更高的速度尽量压缩线延时在非关键路径上尽量优化电路结构特别提醒本文提到的一些设计技巧可能在绝大部分情况下已经失效在一些复杂电路因此是为了让大家在遇到困难时可以尝试本文所提供的设计技巧注意本章节所举的代码都采用的是VHDL语言我们认为语言是次要的另外可参见每一个VHDL信号赋值每个信号代表一条信号线能将不同的实体连接起来下面的VHDL实例为加法器的进位链电路的两种可能的描述串行进位链-- A is the addend-- B is the augend-- C is the carry-- Cin is the carry inC0 <= (A0 and B0) or((A0 or B0) and Cin);C1 <= (A1 and B1) or((A1 or B1) and C0);图41 串行进位例并行结构c1 <= g1 or (p1 and g0) or(p1 and p0 and cin);图42 超前进位显然但面积大但面积小从其实现结构来看由于进位链是FPGA的专有资源4.1.2使用圆括号处理多个加法器控制设计结构的另一种方法是使用圆括号来定义逻辑分组例图43 串行加法电路用圆括号重新构造的加法器分组如下所示Z <= (A + B) + (C + D);图44 并行加法电路上述两种方法的在速度和面积上的区别是第一种方法但整体速度慢如果信号D 是关键路径或者BD无关第二种方法但整体速度快BD的时序要求都比较苛刻4.2IF 语句和Case 语句而Case 语句生成的逻辑是并行的IF 语句可以包含一套不同的表达式通常但占用面积较大IF-Else 结构速度较慢如果对速度没有特殊要求则可用IF-Else 语句完成编解码为了避免较大的路径延时用IF 语句实现对延时要求苛刻的路径时Critical Signal有时可以将IF 和Case 语句合用用IF-Then-Else 完成8选1多路选择器MUX6to1:process(sel,in)beginif(sel= "000") then out <= in(0); elseif(sel = "001") then out <= in(1); elseif(sel = "010") then out <= in(2); elseif(sel = "011") then out <= in(3); elseif(sel = "100") thenout <= in(4);else out <= in(5); end if;end process;内部公开请输入文档编号FPGA设计高级技巧图45 if-else 完成多路选择下面的例子是用Case 语句完成8选1多路选择器的VHDL 实例Virtex 可以在单个CLB 中完成一个8选1的多路选择器因此例process( C, D, E, F, G, H, I, J, S )begin case S iswhen 000 => Z <= C;when 001 => Z <= D;when 010 => Z <= E;when 011 => Z <= F;when 100 => Z <= G;when 101 => Z <= H;when 110 => Z <= I;when others => Z <= J; end case;end process;图46 case 语句完成电路选择4.3 减少关键路径的逻辑级数在FPGA 中critical pathΪÁ˱£Ö¤ÄÜÂú×ãʱ¼äÔ¼Êø¼õÉٹؼü·¾¶ÑÓʱµÄ³£Ó÷½·¨ÊǸø×î³Ùµ½´ïµÄÐźÅ×î¸ßµÄÓÅÏȼ¶ÏÂÃæµÄʵÀýÃèÊöÁËÈçºÎ¼õÉٹؼü·¾¶ÉϵÄÂß¼-¼¶ÊýÇ°ÃæÌáµ½µÄ´®Ðмӷ¨Æ÷Ò²ÊÇÒ»¸ö°¸Àý4.3.1 通过等效电路此例中critical 信号经过了2级逻辑if (clk'event and clk ='1') then内部公开请输入文档编号FPGA设计高级技巧if (non_critical='1' and critical='1') thenout1 <= in1;elseout1 <= in2;end if;end if;图47 critical信号经过2级逻辑为了减少critical路径的逻辑级数critical信号只经过了一级逻辑图48 critical信号只经过一级逻辑注意4输入LUT特点但对ASIC而言4.3.2调整if语句中条件的先后次序设计者习惯用if语句来描述电路功能也采用有优先级概念的if语句来描述If 条件1 thenDo action1Else if 条件2 thenDo action2Else if 条件3 thenDo action3在实际情况中条件2ÔòÉÏÊöif语句无所谓谁优先是关键路径应当改成提高设计速度前面提到即便是在没有优先级的电路中例如信号置1Else if 条件2 then信号置0Else if 条件3 then信号置1Else if 条件4 then信号置0如果上述条件没有优先级我们建议合并if语句中各条件否则下面的VHDL实例说明如何使用资源共享来减少逻辑模块的数量没有资源共享时用了4个加法器完成if (...(siz = "0001")...) thencount <= count + "0001";else if (...((siz = "0010")...) thencount <= count + "0010";else if (...(siz = "0011")...) thencount <= count + "0011";else if (...(siz == "0000")...)thencount <= count + "0100";end if;利用资源共享可以节省2个加法器if (...(siz = "0000")...) thencount <= count + "0100";else if (...) thencount <= count + siz;end if;例if (select = '1') thensum<=A +B;elsesum<=C +D;end if;图49 资源共享前利用资源共享只用2个选择器和1个加法器实现if (sel ='1') thentemp1 <=A;temp2 <=B;elsetemp1 <=C;temp2 <=D;end if;sum <= temp1 + temp2;图50 资源共享后运算符占用更多的资源综合工具必须对所有的条件求值综合工具用4个加法器和一个选择器实现req²Å½¨Òé²ÉÓÃÕâÖÖ·½·¨end if;end loop;图51 资源共享前4个加法器如果信号不是关键信号这样在执行加法运算前修改代码如下for i in 0 to 3 loopif (req(i)='1') thenoffset_1 <= offset(i);end if;end loop;sum <= vsum + offset_1;图52 资源共享后一个加法器4.5.3子表达式共享一个表达式中子表达式包含2个或更多的变量应共享这些运算通过声明一个临时变量存储子表达式下面的VHDL实例描述了用相同的子表达式完成一组简单的加法运算4.5.4 综合工具与资源共享通过设置FPGA CompilerII/FPGA Express的相应选项而不需声明一个临时变量存储子表达式如下sum1 <= A + B + C;sum2 <= D + A +B;sum3 <= E + (A +B);则sum1和sum3 可共享(A +B),但与sum2不共享3. 必须在同一block中如下但与S1不可共享最好尽量自行编写共享资源代码所采用的综合工具在FPGA 阶段和转ASIC 阶段可能不同PipeliningËüµÄ»ù±¾Ë¼ÏëÊÇ°ÑÔ-À´±ØÐëÔÚÒ»¸öʱÖÓÖÜÆÚÄÚÍê³ÉµÄ²Ù×÷·Ö³É¶à¸öÖÜÆÚÍê³ÉÒò´ËÌá¸ßÁËÊý¾ÝÍÌÍÂÁ¿ËùÒÔ¶ÔFPGA 设计而言而又不耗费过多的器件资源采用流水线后必须特别考虑设计的其余部分在定义这些路径的延时约束时必须特别小心其延时为源触发器的clock-to-out 时间多级逻辑的走线延时和目的寄存器的建立时间之和采用流水线最终的结果是系统的工作频率提高了采用流水线前的电路内部公开请输入文档编号FPGA设计高级技巧process(clk, a, b, c) begin if(clk'event and clk = '1') thena_temp <= a;b_temp <= b;c_temp <= c;end if;end process;Process(clk, a_temp, b_temp, c_temp)beginif(clk'event and clk = '1') thenout <= (a_temp * b_temp) + c_temp;end if;end process;图53 采用流水线之前电路结构例Xilinx篇c_temp2 <= c_temp1;end if;end process;process(clk, mult_temp, c_temp2)beginif(clk'event and clk = '1') thenout <= mult_temp + c_temp2;end if;end process;图54 采用流水线之后的电路结构4.7组合逻辑和时序逻辑分离包含寄存器的同步存储电路和异步组合逻辑应分别在独立的进程中完成这样在综合后面积和速度指标较高Mealy状态机的基本结构如下图所示图55 Mealy状态机的基本结构内部公开请输入文档编号FPGA设计高级技巧由图可看出当前状态寄存器和输出逻辑三部分组成当前状态寄存器为时序逻辑Mealy 机可由三个进程实现例Xilinx篇。