打印

如何消除竞争冒险

[复制链接]
2407|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
frieng|  楼主 | 2008-11-26 20:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
armecos| | 2008-11-27 09:18 | 只看该作者

查下面资料的关键字,与毛刺和时钟有关,消除方法很多,

《快快乐乐跟我学FPGA设计》
        2008/05/11  asdjf@163.com  www.armecos.com

    “为什么在时钟触发沿变化时,波形仿真出现不可预料的结果,如何预防?”
    “请教如何提高FPGA的运行速度?我选了speed优先等编译选项,但效果不明显。”
    “为什么我的FPGA芯片工作不稳定?为什么实际运行效果和我预想的不一样?”
    “如何设计UART控制器?VGA/LCD控制器?USB控制器?FIFO?......”
    ......
    
    FPGA的设计目标就是实现我们想要的功能(时序电路/组合逻辑),并保证其稳定、高效、低功耗、加密。
    
    不同于目前市面上的其他讲义,我们以一个项目实例为线索,情景式地串讲FPGA开发会遇到的方方面面的问题。这种方式的好处是理论联系实际,便于初学者融汇贯通,真正掌握FPGA设计的精髓。
    
    项目实例:假定某公司需要开发一套局端接入设备,实现基于IP包的语音传输和交换。要求每块单板处理8路E1(计240路话音通道)的实时语音压缩/解压缩功能。每框插8块板,每机柜3框,机柜可以象搭积木一样平滑增加,满足不断增长的巨量基于IP包交换的语音接入需求。
    
    --------
     选牌子
    --------
    首先是选择FPGA品牌,主要有:Altera、Xilinx等,据说Altera在亚洲这边用的比较多,所以选择它。
    课上我们会详细讲下各公司市场排行、使用情况、代理商服务情况和使用心得,让你的选择更有依据。
    
    --------
     选型号
    --------
    其次,要根据设计要求、性能特点、资源大小、所需引脚数量和封装、供货情况、价格......来确定型号。
    课上我们会更详细地介绍CPLD/FPGA的工艺结构和特点,选型依据/策略/原则,心得体会。
    由于FPGA上电需要加载,所以,地址译码等需要一上电就起作用的电路必须采用CPLD实现,根据复杂程度,我们选择MAX7128,根据性能要求,选择7ns的那种。
    240路语音实时压缩/解压缩需要大量FPGA资源和引脚,所以,压缩和解压缩各使用一个独立的FPGA芯片,我们选择两片Flex10K100E。
    这样一块单板上就有1个MAX7128和2个Flex10K100E。
    
    --------
     定引脚
    --------
    一般来说,PCB和FPGA是同时设计的,这就要求事先将FPGA的引脚固定下来。
    
    引脚排布影响资源占用率,有时引脚分布不好会影响综合效果,这个需要经验。我们会介绍CPLD和FPGA的结构特点、路由选通、底层编辑等。
    
    充分利用FPGA的灵活性,将某些闲置引脚用于测试目的,将内部逻辑上的信号旁路输出给逻辑分析仪,便于测试。
    
    需要了解输入输出引脚是否必须外接上下拉电阻,CMOS和TTL输入不用时是否可以浮空,输出不用时要不要接负载。提示:CMOS输入浮空是不定状态,输出悬空会烧毁自己。手册上说FPGA上电时输出为高阻,但实际测试显示上电期间是低电平,而CPLD的确是高阻状态,这就说明了为什么有时老外用CPLD而不用FPGA的原因。如果这些细节没有注意到,那么出了事无法下手,光从理论上发现不了问题,容易被资料骗了。此时,切记不要盲目地拿电烙铁拆芯片。课上将详细讲述这方面的注意事项,这里只是提示一下,引脚处理大有学问。另外,注意手册上给出的JTAG加载电路上拉改下拉,否则无法烧写。
    
    FPGA上有专用的全局复位,全局时钟等引脚,切记不要使用普通IO脚引入复位和时钟。为什么呢?
    例如经过专门设计的全局时钟网络具有以下特点:1、负载能力特别强, 任何一个全局时钟驱动线都可以驱动芯片内部的触发器;2、时延差特别小; 3、时钟信号波形畸变小, 工作可靠性高。使用全局时钟将简化设计复杂度,只要保证相对于全局时钟的建立/保持时间即可,不用考虑其他情况。其他IO脚不能保证驱动能力、时延和可靠性,时序关系复杂。
    
    FPGA不是孤立存在的,还要配合PCB满足供电、上电顺序、去耦、信号完整性、匹配、时钟、EMC/EMI等,这些内容可以参考《快快乐乐跟我学高速PCB设计》培训讲义。通常,我们应该总结出一些最小系统电路模块,以后再设计时只要抄一下即可,节省时间,提高可靠性。比如:JTAG加载电路、电源供电电路、复位电路、时钟电路、各种常用功能电路等等。这些电路由FPGA专业人员来设计是设计不好的,抄袭老外的demo电路也不好,必须由专业的高速PCB专家参与配合才能接近完美。因为很多公司分工比较细,FPGA专家可能意识不到PCB设计中的精妙之处,PCB专家可能不了解FPGA设计关键,所以,很多公司或者培训班拥有的最小设计存在问题,不完备,考虑不周,甚至存在严重错误。
    
    ------------
     有限状态机
    ------------
    有限状态机是非常有用的时序电路设计方法,特别适合控制电路的实现。我们的项目范例中,语音压缩/解压缩控制算法就是用有限状态机实现的。虽然算法很复杂,但使用状态机设计,立即简化了难度,思路清晰,实现简单。课上我们会通过项目范例介绍有限状态机的常用描述、开发方法。
    
    知识点简单罗列如下:
    
    **********************
    有限状态机FSM设计方法:
    **********************
        基于时序图、状态表、状态图以及ASM图进行系统的描述与设计
    
    **********************
    状态机的两种基本类型:
    **********************
        Mealy型和Moore型。Mealy机的下一状态和输出都取决于当前状态和当前输入;Moore机的下一状态取决于当前状态和当前输入,但其输出仅取决于当前状态。
    
    **********
    状态机编码
    **********
        二进制Binary、格雷码gray-code、一热态位one-hot等
        一热态位one-hot编码的特点是:组合逻辑最少,触发器最多,工作时钟频率可以做到最高。适合FPGA这种触发器资源丰富的芯片,而不适合CPLD设计,在CPLD中应该选择二进制编码。
        IC设计中,应该综合考虑。因为One-hot编码使用触发器会大大增加设计面积(die size),因此在时序可以满足的条件下尽可能使用二进制编码。就面积与速度的折中考虑来说Gray码是最好的选择,当然Gray码还有其他很多好的特性。一般的综合工具对状态机进行综合时都可以让用户对这三种编码进行选择。

    ****************************************************
    状态机的初始化状态、默认状态、状态定义风格、编写风格
    ****************************************************
    略。《ecos增值包》文档里有《状态机的两种写法》一文可供参考。
    
    ----
    复位
    ----
    关于复位,你需要知道的是FPGA时序电路工作前需要一个确定的初始状态,如果上电后状态不定或初始化错误,那么后续所有操作都是混乱的,所以说,复位是FPGA设计中一个非常重要的部分。很多设计都是由于复位不正常,造成系统不稳定或者出错,复位和FPGA设计及复位芯片、PCB设计有关。
    
    知识点罗列:
    
    PCB中的复位系分析
    同步复位
    异步复位及其存在的问题
    复位同步电路、分配树、毛刺过滤
    多时钟复位
    
    思考题:影响正确复位的原因有哪些呢?试列举出十种以上的原因。
    
    ----------
    毛刺和时钟
    ----------
    这是最最重要的内容!!!
    
    毛刺在PCB设计中不是很突出的问题,因为PCB存在分布电容和电感,所以几纳秒的毛刺将被自然滤除,而在PLD内部绝无分布电感和电容,所以在PLD/FPGA设计中,竞争和冒险问题将变得较为突出。
    
    毛刺的成因是什么呢?
    简单说是因为信号不是理想的,信号走线存在延时(延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。),信号的高低电平转换也需要一定的过渡时间。多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号就是“毛刺”。
    感兴趣的人可以查阅大学教材,了解数字电路中的竞争和冒险、卡诺图或逻辑函数表达式等问题。课上我们将画图分析。
    
    毛刺的危害
    毛刺影响数字电路稳定性,触发器的时钟端、清零端和置位端对毛刺信号十分敏感,同时前级的毛刺影响会扩散到后面的逻辑电路上去,危害极大。
    图示讲解毛刺危害
    
    毛刺的处理
    略。主要讲述减少毛刺的几种方法。
    
    建立/保持时间
    建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间, 如果保持时间不够,数据同样不能被打入触发器。
    图

    关于时钟的知识点罗列:
    
    全局时钟 
    门控时钟 
    多级逻辑时钟 
    行波时钟 
    多时钟系统 

    这里详细讲述很多重要的知识点和注意事项。时钟同步设计是FPGA设计里的关键内容。
    
    思考题:一个为3MHz,一个为5MHz,不同的触发器使用不同的时钟。为了系统稳定,假设我们引入一个20MHz时钟,那么这个20MHz的时钟怎么才能将3M和5M时钟同步化呢?
    
    亚稳态及其应对措施
    如果输入信号在setup-hold时间内发生了变化,输出结果将是不可知的,即亚稳态 (Metastability)。
    亚稳态应对措施:
    1、双锁存器法   不能完全避免亚稳态,不过还算有效。信号从快时钟域向慢时钟域过渡的时候,此法需要原始信号保持足够长的时间,以便另一个时钟域的锁存器可以正确地对其进行采样。
    2、结绳法    一种安全的跨时钟域的方法。
    
    FPGA和PCB时钟联合设计,时钟系分析。
    
    ----------------------------
    如何提高同步系统的运行速度?
    ----------------------------
    好啦!当我们经过上面的学习,能够实现我们所需要的电路功能并保证其稳定以后,如何提高同步系统的运行速度就是我们接下来十分关心的问题了。
    
    最快时钟频率Fmax取决于什么呢?由图知:
    
    Fmax = 1 / (Tco + Tdelay + Tsetup - Tpd)
    
    其中:
    Tco是触发器时钟到数据输出的延时;
    Tdelay是组合逻辑的延时;
    Tsetup是触发器的建立时间;
    Tpd是时钟的延时参数(如果使用PLD的全局时钟型号,Tpd可以为0,如果是普通时钟,则不为0)。
    
    以上全部分析的都是器件内部的运行速度,如果考虑芯片I/O管脚延时对系统速度的影响,那么还需要加一些修正。
    
    由于Tco、Tsetup是由具体的器件和工艺决定的,我们设计电路时只可以改变Tdelay。所以缩短触发器间组合逻辑的延时是提高同步电路速度的关键。由于一般同步电路都不止一级锁存,而要使电路稳定工作,时钟周期必须满足最大延时要求,缩短最长延时路径,才可提高电路的工作频率。
    
    我们可以将较大的组合逻辑分解为较小的几块,中间插入触发器,这样可以提高电路的工作频率。这也是所谓“流水线”(pipelining)技术的基本原理。可见,两个触发器之间组合逻辑的最大延时是速度瓶颈。
    
    我们将画图说明。
    
    ------------
    常用设计思想
    ------------
    “乒乓”操作
    本项目范例背板总线带宽高达2.5GHz(64bit位宽 * 40MHz),数据要求连续实时处理,压缩/解压缩算法复杂,除了使用流水线技术提高速度外,还使用了“乒乓”操作技术。
    “乒乓”操作是使用两个缓冲区分别存储数据,一个读时另一个写,反之亦然,输入输出利用二选一MUX电路交替选通。使用它的好处是:
    1、输入数据流和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数据流进行流水线式处理。所以乒乓操作常常应用于流水线式算法,完成数据的无缝缓冲与处理。从芯片角度看,高速数据流是连续被芯片处理的,没有任何耽搁延误;
    2、可以节约缓冲区空间,FPGA内部FIFO不能做太大,否则资源不够用;
    3、达到用低速模块处理高速数据流的效果,本质是面积换速度。
    
    串并转换设计
    主要要注意时序关系,我们画图分析。
    
    流水线操作设计
    略。
    
    数据接口的同步方法
    略。
    
    --------------
    硬件可实现原则
    --------------
    有很多初学者问,为什么仿真测试的结果和自己设想的不一样呢?
    除了前面说的注意事项外,还需要注意硬件的可实现性。因为综合器没有那么“聪明、智能”,有时候,明明你写的逻辑没有任何问题,但结果就是不对,换一种等效的写法又好了。我们总结了一些有效的写法和书写风格,按照这些写法设计FPGA,能保证大部分时候你做的电路和你想要的相同。
    
    除此之外,不同写法产生的电路不同,适当的写法能够减少多余电路,消除不必要的逻辑,进而降低芯片功耗。这些写法需要长期实践以后才能总结出来。
    
    FPGA串并行加载方式大概有四种,用flash芯片加载容易泄密,这里提供一种使用CPU加密加载的方法,可以延缓盗版时间。
    
    ----
    总结
    ----
    三个设计基本原则:面积和速度的平衡互换原则(如:流水线、乒乓)、硬件可实现原则和同步设计原则。
    四个常用设计思想:乒乓操作、串并转换操作、流水线操作和数据接口的同步方法。
    
    ----------------
    常用功能电路设计
    ----------------
    异步FIFO设计
    在异步FIFO设计中,最难的部分是正确产生“空”/“满”标志,原因有两个:1、异步时钟域问题,可以用格雷码计数器解决;2、FIFO“空”/“满”标志有效时,读/写指针都相等,因此,必须要准确区分是读“空”还是写“满”。
    
    双口RAM
    异步SRAM
    DDRII接口电路
    CAM
    ROM
    ......
    
    --------------
    常用控制器设计
    --------------
    我们将带大家阅读源码并分析这些电路:
    
    UART控制器
    VGA控制器
    PS/2控制器
    简单CPU
    
    ......
    
    --------------
    初学者常见问题
    --------------
    很多初学者没有经过系统专业的培训,通过“自学成材”方式,学会了EDA工具的使用方法,然后就去设计FPGA电路,很多公司也不重视培训,结果出现了各种各样的问题:
    首先是芯片设计错漏百出,复位、毛刺、同步设计、PCB、硬件可实现性......通通没有概念,仿真结果和自己设想的不一样又找不到原因,系统不稳定无法商用;
    其次,逻辑倒是做出来了,可速度就是提不上去,不懂流水线设计,不懂状态机思想;
    再次,系统不优化,资源耗费高,功耗高,芯片发烫,容易被盗版;
    最后,不知道很多电路其实都有现成的代码,直接借鉴比自己写要好。当然,很多网上共享代码存在问题,需要有经验的人修正BUG。
    不是光把逻辑设计出来就成了,还要保证大的margin,使系统即使在恶劣环境下也能正常工作。
    
    由此可见,不培训行嘛!!!
    
    ------------------------------
    配套光盘电子书、工具、软件列表
    ------------------------------
    略。
    
    ------------------------------------------------------------------------------
    综上所述,FPGA设计就是要写出我们想要的电路,并保证其稳定、高效、低功耗、加密。
    需要注意的问题是:毛刺、时钟同步设计、几个原则、几个思想、最小设计、常用电路总结、和PCB的关系等等。
    经过我们专业的培训,你就可以设计出合格的芯片电路,实现你想要的功能,避免犯一些低级错误,对系统有一个整体认识,为今后的进一步发展打下良好的基础。
    
    如果想学习嵌入式系统,强烈建议选择《ecos增值包》,软硬两方面内容都包括了,是“装在光盘里的培训班”,包含了bootloader、FS、TCP/IP、GUI、USB等各种内容。www.armecos.com自助商城有售,有免费试用版本,先体验效果,感觉好再说。
    
    《ecos增值包》的硬件观点包含PCB设计和FPGA设计,文档分别为:《快快乐乐跟我学高速PCB设计》和《快快乐乐跟我学FPGA设计》,软件文档为:《快快乐乐跟我学嵌入式系统》。

上述文档可能不完整或已被更新,想获得该资料的最新最全版本,请访问:www.armecos.com

更多内容,详见:
我的培训中心
我的研发团队
我的技术顾问
    文件系统整体解决方案咨询套餐
    IP协议栈整体解决方案咨询套餐
    USB整体解决方案咨询套餐
    BootLoader整体解决方案咨询套餐

使用特权

评论回复
板凳
tjcwt| | 2008-12-1 11:08 | 只看该作者

支持

支持

使用特权

评论回复
地板
g19860529| | 2008-12-1 12:32 | 只看该作者

上面兄弟说的太多了,看不懂

使用特权

评论回复
5
HWM| | 2008-12-1 12:37 | 只看该作者

我的老师就教我两词“维持”和“阻塞”,那时候还没有FPGA

现在什么都搞复杂了,否则就不能体现其身价。

使用特权

评论回复
6
zsq427| | 2008-12-27 14:23 | 只看该作者

采用d触发器

尽量采用d触发器就好了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

16

帖子

0

粉丝