《可编程逻辑设计指导原则》由会员分享,可在线阅读,更多相关《可编程逻辑设计指导原则(65页珍藏版)》请在金锄头文库上搜索。
1、可编程逻辑设计指导原则,概要,面积和速度的平衡与互换原则面积优化速度优化硬件原则系统原则同步设计原则异步电路和同步电路比较同步设计的注意事项Altera推荐的代码风格,面积和速度的平衡与互换原则,面积:指一个设计所消耗FPGA/CPLD的逻辑资源数量。速度:指设计在芯片上稳定运行时所能达到的最高频率。面积和速度是一对对立统一的矛盾体。要求一个设计同时具备面积最小、速度最高是不现实的。科学的设计目标应该是:在满足时序要求的前提下,占用最小的芯片面积。或者:在所规定的面积下,使设计的时序余量更大。面积和速度要求冲突时,采用速度优先的原则。,面积优化,模块复用串行化,模块复用,如果同样结构的模块需要
2、被重复调用,且该模块占用资源很多,如多位乘法器、快速进位加法器等,可通过选择、复用的方式共享该模块。,串行化,把原来耗用资源巨大、单时钟周期内完成的并行执行逻辑块分割开来,提取相同的逻辑模块(一般为组合逻辑模块),在时间上复用该逻辑模块,用多个时钟周期完成相同的功能,代价是工作速度大为减低。,串行化,例:设计乘法累计器 yout=a0*b0+a1*b1+a2*b2+a3*b3采用并行逻辑设计,需4个8位乘法器和1个4输入16位加法器,共耗用576个LC。,串行化,采用并行逻辑设计,需4个8位乘法器和1个4输入16位加法器,共耗用576个LC。,串行化,采用串行逻辑设计,只需1个8位乘法器和1个
3、2输入16位加法器,共耗用203个LC。,速度优化,面积复制乒乓操作香农扩展运算流水线设计寄存器配平优化关键路径,面积复制,通过复制模块,并行处理来提高速度。,乒乓操作,利用乒乓操作可以达到用低速模块处理高速数据流的效果,实现数据流的无缝缓冲和处理。,香农扩展运算,香农扩展即布尔逻辑扩展,是卡诺逻辑化简的反向运算:例:F=(8late|in0)+in1)=in2)&en若信号late是本逻辑运算的关键路径信号,延时最大,使用香农扩展: F=late.F(late=1)+late.F(late=0) =late. (81b1|in0)+in1)=in2)&en + late. (81b0|in0
4、)+in1)=in2)&en =late. (8b1+in1)=in2)&en + late. (in0+in1)=in2)&en,香农扩展运算,例:,回顾:同步电路数据传递模型与最高时钟频率,最小时钟周期:T=Tco+Tdelay+Tsetup-Tpd 最高时钟频率:F= 1/T 因为Tco、Tsetup由具体器件和工艺决定,所以缩短触发器间组合逻辑的延时是提高同步电路时钟频率的关键。,流水线设计,将较大的组合逻辑分解为若干较小的组合逻辑,中间插入触发器。,寄存器配平,平均分配组合逻辑,避免在两个触发器之间出现过大的组合逻辑延时,消除速度瓶颈。,优化关键路径,要使电路稳定工作,时钟周期必须满
5、足最大延时路径(即关键路径)的延时要求,因此优化关键路径是提高电路工作频率的关键。,概要,面积和速度的平衡与互换原则面积优化速度优化硬件原则系统原则同步设计原则异步电路和同步电路比较同步设计的注意事项Altera推荐的代码风格,硬件原则,硬件描述语言(HDL)同软件语言(如C等)有本质的区别: HDL的作用是描述硬件,最终实现结果是芯片内部的实际电路。评判HDL代码优劣的标准是其描述并实现的硬件电路的性能(包括面积和速度两方面)。片面追求代码的整洁、简短是错误的。正确的编码方法是,首先做到对所要实现的硬件电路“胸有成竹”,对该部分硬件的结构与连接十分清晰,然后再用适当的HDL语句表达出来。“并
6、行”和“串行”的概念:HDL描述的硬件系统中各个单元的运算是独立的,信号流是并行的。而C语言编译后,其机器指令在CPU的高速缓冲队列中基本是顺序执行的。这也是一般来说硬件系统比软件系统速度快、实时性高的重要原因。硬件描述语言对系统行为的建模是分层次的: HDL在高层次(如系统级、算法级)和C语言更相似,可用的语法和表现形式更丰富。而在寄存器传输级以下的层次, HDL的功能越来越侧重于对硬件电路的描述,可用的语法和表现形式的局限性越大。,概要,面积和速度的平衡与互换原则面积优化速度优化硬件原则系统原则同步设计原则异步电路和同步电路比较同步设计的注意事项Altera推荐的代码风格,系统原则,单板系
7、统层面:一块单板如何进行模块划分与任务分配,什么样的算法和功能适合放在FPGA里实现,什么样的算法和功能适合放在DSP、CPU里实现,或者在使用内嵌CPU和DSP Block的FPGA中如何划分软硬件功能,以及FPGA的规模估算、数据接口设计等。FPGA设计层面:应该对芯片内部的各种底层硬件资源、可用的设计资源有一个较深刻的认识。根据设计类型与资源评估合理地完成器件选型,然后充分发挥所选器件的各个部分的最大性能,对器件整体上有个优化的组合与配置方案。对设计的全局有个宏观上的合理安排,如时钟域、模块复用、约束、面积和速度等问题。,概要,面积和速度的平衡与互换原则面积优化速度优化硬件原则系统原则同
8、步设计原则异步电路和同步电路比较同步设计的注意事项Altera推荐的代码风格,异步电路和同步电路比较,异步电路电路的核心逻辑用组合电路实现。电路的主要信号、输出信号等,不是由时钟信号驱动触发器产生的。容易产生毛刺。不利于器件移植。不利于静态时序分析。同步电路电路的核心逻辑用各种触发器实现。电路的主要信号、输出信号等都是由时钟信号驱动触发器产生的。可以避免产生毛刺。利于器件移植。利于静态时序分析,验证电路的时序性能。,异步电路和同步电路比较,目前大多数综合、实现等EDA工具都是基于时序驱动优化策略的。异步时序电路增加了时序分析的难度,需要确定最佳时序路径的计算量超出想像,所需时序约束相当繁琐,而
9、且对于异步电路很多综合、实现工具的编译会带来歧义。而对于同步时序设计则恰恰相反,其时序路径清晰,相关时序约束简单明了,综合、实现优化容易,布局布线计算量小。现代PLD设计推荐采用同步时序设计方式。,回顾:,同步设计中,稳定可靠的数据采样必须遵循两个基本原则:Setup时间原则:在有效时钟沿到达前,数据输入至少已经稳定了采样寄存器的Setup时间之久。Hold时间原则:在有效时钟沿到达后,数据输入至少还要保持稳定采样寄存器的Hold时间之久。,同步设计的注意事项,异步时钟域的数据同步亚稳态异步时钟域的表现形式不推荐的异步时钟域操作方法异步时钟域数据同步常用方法同步时序电路的延迟避免用Buffer
10、等组合逻辑产生延时,改用分频或倍频的时钟或者同步计数器完成所需延迟。Verilog定义为reg型,不一定综合成寄存器。,异步时钟域数据同步(数据接口同步)问题,如何在两个时钟不同步的数据域之间可靠地进行数据交换。,亚稳态,概念异步时钟域转换的核心就是要保证下级时钟对上级数据采样的Setup时间和Hold时间。如果触发器的Setup时间或Hold时间不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间内处于不确定的状态,在这段时间内Q端产生毛刺并不断振荡,最终固定在某一电平值,此电平值不一定等于原来数据输入端D的值,而是随机的。危害:破坏系统的稳定性。逻辑误判亚稳态传播使
11、用两级寄存器采样可有效减少亚稳态继续传播的概率。不过不能保证第二级寄存器输出的稳态电平就是正确电平。,亚稳态,异步时钟域的表现形式,同频异相:两个域的时钟频率相同,但是相差不固定,或者相差固定但是不可测。异频:两个域的时钟频率不相同。,不推荐的异步时钟域操作方法,通过增加Buffer等组合逻辑延时调整采样时间。使用组合逻辑方法产生延时,容易产生毛刺,且时序余量较差,一旦外界条件变化,采样时序就有可能紊乱。另外,一旦芯片更新换代,或移植到其他器件组的芯片上,延时必须重新调整,电路的可维护性、移植性、继承性都很差。盲目使用时钟正负沿调整数据采样。如果在一个时钟周期内,使用时钟的双沿同时操作,则使用
12、该时钟的同相倍频时钟也能实现相同的功能。FPGA中,一般PLL和DLL都能较好地保证某个时钟沿的Jitter、Skew和占空比等各种参数指标,而对于另一个沿的指标控制并不是那么严格。对于综合、实现等EDA软件,如果没有明确对另一个沿进行相关,则这个沿的时序分析不一定完善,其综合实现结果就不一定能满足用户期望的时序要求,往往造成在该沿操作不稳定的结果。,异步时钟域数据同步常用方法,同频异相问题:用后级时钟对前级数据采样两次。该方法可以有效减少亚稳态的传播,使后级电路数据都是有效电平值,但不能保证两级寄存器采样后的数据是正确电平值。该方法适用于对少量错误不敏感的功能单元。,异步时钟域数据同步常用方
13、法,同频异相问题:用DPRAM或FIFO。将上级的数据随路时钟作为写时钟,将数据写入DPRAM或FIFO,然后用本级的采样时钟将数据读出。由于时钟频率相同,所以DPRAM或FIFO两端的数据吞吐率一致,实现起来相对简单。,异步时钟域数据同步常用方法,异频问题:使用DPRAM或FIFO。用上级随路时钟写入数据,然后用本级时钟读出数据。由于时钟频率不同,所以两个端口的数据吞吐率不一致,设计时要开好缓冲区,并通过监控(Full、Empty等指示)确保数据流不会溢出。,概要,面积和速度的平衡与互换原则面积优化速度优化硬件原则系统原则同步设计原则异步电路和同步电路的异同同步设计的注意事项Altera推荐
14、的代码风格,Altera推荐的代码风格,以下讨论针对寄存器传输级而言、不依赖于综合、实现工具和器件类型的一般性代码风格。结构层次化编码模块划分的技巧组合逻辑的注意事项时钟设计的注意事项条件语句case和ifelse的优先级操作进程always的信号敏感表状态机设计的一般原则Altera Megafunction资源的使用三态信号的使用,结构层次化编码,采用结构层次化编码风格,可以提高代码的可读性,易于模块划分,易于分工协作,易于设计仿真测试激励。,结构层次化编码,结构层次化编码注意事项:结构的层次不易太深,一般为3到5层即可。顶层模块最好仅仅包含对所有模块的组织和调用,而不应完成比较复杂的逻辑
15、功能。较为合理的顶层模块由输入输出管脚声明、模块的调用与实例化、全局时钟资源、全局置位/复位、三态缓冲和一些简单的组合逻辑等构成。所有的I/O信号,如输入、输出、双向信号等的描述在顶层模块完成。子模块之间也可以有接口,但最好不要建立子模块间跨层次的接口。子模块的合理划分非常重要,应该综合考虑子模块的功能、结构、时序、复杂度等多方面的因素。,结构层次化编码,顶层模块示例,模块划分的技巧,将相关的逻辑或者可以复用的逻辑划分在同一模块内。将不同优化目标的逻辑分开。将松约束的逻辑归到同一模块。将存储逻辑独立划分成模块。对每个同步时序设计的子模块的输出使用寄存器。合适的模块规模。,组合逻辑的注意事项,避
16、免组合逻辑反馈环路替换延迟链替换异步脉冲产生单元慎用锁存器,避免组合逻辑反馈环路,组合逻辑反馈环路示例:,避免组合逻辑反馈环路,组合逻辑反馈环路的危害:组合逻辑反馈环路最容易因振荡、毛刺、时序违规等引起整个系统的不稳定和不可靠,是一种高风险设计,原因如下:组合反馈环的逻辑功能完全依赖于其反馈环路上组合逻辑的门延迟和布线延迟等,如果这些延迟有任何改变,则该组合反馈环的整体逻辑功能将彻底改变,而且改变后的逻辑功能很难确定。组合反馈环的时序分析是无穷循环的时序计算,EDA工具迫不得已一般必须主动割断其时序路径,以完成相关的时序计算,而不同的EDA工具对组合反馈环的处理方法各不相同,所以组合反馈环的最终实现结果有很多不确定因素。,