数字电路设计华为技术有限公司2005年7月内容提纲一.基本概念二.常用电路设计三.FIFO设计四.状态机设计五.Verilog书写规范基本概念建立时间(Tsu):在时钟有效沿前数据应保持稳定的时间;保持时间(Thd):在时钟有效沿后数据应保持稳定的时间;满足触发器的建立-保持时间是触发器能够正常工作的基本条件。Tco是触发器时钟到数据输出的延时。TsuThdDATACLKDCLKQDATACLKtco基本概念同步设计:同步设计表示通过一个组合逻辑和触发器的数据同步于一个时钟,没有出现组合逻辑产生的信号在不经过一个寄存器同步之前而反馈给该相同组合逻辑的情况。也就是说所有触发器的时钟输入端必须和同一时钟直接相连而不能经过任何组合逻辑。上游数据到下游逻辑单元的传递是通过时钟来同步的。基本概念同步电路中数据传递的基本模型基本概念同步设计的优点同步电路比较容易使用寄存器的异步复位/置位端,以使整个电路有一个确定的初始状态;在可编程逻辑器件中,使用同步电路可以避免器件受温度,电压,工艺的影响,易于消除电路的毛刺,使设计更可靠,单板更稳定;同步电路可以很容易地组织流水线,提高芯片的运行速度,设计容易实现。基本概念同步电路的速度是指同步时钟的速度。同步时钟越快,电路处理数据的时间间隔越短,电路在单位时间处理的数据量就越大。T=Tco+Tdelay+Tsetup,最快时钟频率F=1/TT=Tco+Tdelay+Tsetup–Tpd基本概念提高同步时钟的速率,减小Tdelay;通过适当的方法平均分配组合逻辑,可以避免在两个触发器之间出现过大的延时,消除速度瓶颈。基本概念异步设计可能带来的问题:1、异步竞争;2、依赖时延的逻辑;3、保持时间不足;4、产生毛刺等。使用异步设计的场合:异步复位、系统复位、看门狗电路(要求在系统提供时钟之前,终止时钟之后还能工作)。基本概念逻辑冒险现象信号在逻辑器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。信号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为毛刺。如果一个组合逻辑电路中有毛刺出现,就说明该电路存在冒险。基本概念逻辑冒险的危害冒险往往会影响到逻辑电路的稳定性。尤其是时钟端口、清零和置位端口对毛刺信号十分敏感,任何一点毛刺都可能会使系统出错,因此判断逻辑电路中是否存在冒险以及如何避免冒险是设计人员必须要考虑的问题。基本概念采用格雷码计数器,同步电路等,可以大大减少毛刺,但它并不能完全消除毛刺。毛刺并不是对所有输入都有危害,例如D触发器的D输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害。因此我们可以说D触发器的D输入端对毛刺不敏感。设计中要避免毛刺对系统的危害基本概念逻辑冒险的例子基本概念消除毛刺的方法一基本概念消除毛刺的方法二基本概念触发器正常工作的条件:建立_保持时间满足要求;时钟信号上不允许有毛刺;异步置位、清零信号上不允许有毛刺;异步置位、清零信号不允许同时有效DCLKPRECLRQ基本概念时钟全局时钟、门控时钟、多级逻辑时钟和行波时钟。多时钟系统能够包括上述四种时钟类型的任意组合。基本概念全局时钟对于一个设计项目来说,全局时钟(或同步时钟)是最简单和最可预测的时钟。在FPGA设计中最好的时钟方案是:由专用的全局时钟输入引脚驱动的单个主时钟去钟控设计项目中的每一个触发器。只要可能就应尽量在设计项目中采用全局时钟。FPGA都具有专门的全局时钟引脚,它直接连到器件中的每一个寄存器。这种全局时钟提供器件中最短的时钟到输出的延时。基本概念DQQDDelay2Delay1CLK1CLK2时钟偏斜是指两个相连的触发器的时钟信号的延迟大于数据的延迟。CLK1CLK_DelayQQ_Delay采样不稳定基本概念解决时钟偏斜问题,采用全局时钟。PLLABCLK_in全局时钟1全局时钟2基本概念门控时钟所谓门控时钟就是指连接到触发器时钟端的时钟来自于组合逻辑,因凡是组合逻辑在布局布线之后肯定会产生毛刺,而如果采用这种有毛刺的信号来作为时钟使用的话将会出现功能上的错误。所以我们要慎用门控时钟。基本概念如果符合下述条件,门控时钟可以象全局时钟一样可靠地工作:1.驱动时钟的逻辑必须只包含一个“与”门或一个“或”门。如果采用任何附加逻辑,在某些工作状态下,会出现竞争产生的毛刺;2.逻辑门的一个输入作为实际的时钟,而该逻辑门的所有其它输入必须当成地址或控制线,它们遵守相对于时钟的建立和保持时间的约束。基本概念门控时钟的例子基本概念这个电路设计的注意事项这个设计项目的地址线必须在时钟保持有效的整个期间内保持稳定(nWR和nWE是低电平有效)。如果地址线在规定的时间内未保持稳定,则在时钟上会出现毛刺,造成触发器发生错误的状态变化。另一方面,数据引脚D[1..n]只要求在nWR和nWE的有效边沿处满足标准的建立和保持时间的规定。基本概念改善后的电路设计中注意禁止使用组合逻辑时钟基本概念这样将门控时钟变成了行波时钟,实际设计时应该避免这种情况。解决组合逻辑时钟的方法基本概念不建议使用行波时钟QDQDQDclkQ1Q2Q0·····图4.5基本概念所谓行波时钟,即是用一个寄存器的输出作为另一个寄存器的时钟输入,理论上这种时钟没有毛刺,并且良好的设计将可以同全局时钟一样可靠,但是,如果设计是对时延非常敏感的设计,那么,这种时钟系统就不可避免的存在不可靠的因素,因为经过多级设计延时后,将难以估计行波时钟在链上各个触发器时钟之间产生的大量时间偏移,如果这种时间偏移引起建立时间、保持时间难以满足的话,那么设计就极有可能要失败了。基本概念基本概念查找表(Look-Up-Table)的原理与结构采用这种结构的PLD芯片我们也可以称之为FPGA:如altera的FLEX,ACEX,APEX系列,xilinx的Spartan,Virtex系列。查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。基本概念内容提纲一.基本概念二.常用电路设计三.FIFO设计四.状态机设计五.Verilog书写规范常用电路设计不建议异步清0的计数器QDclk+1=53。CLRN6位二进制计数器Q[5:0]可能出现的问题:1)复位信号可能存在毛刺2)可能不能保证所有的触发器同时复位常用电路设计使用同步清0的计数器QDclk+1=526位二进制计数器Q[5:0]000000常用电路设计禁止使用RS触发器。。··RSQQ可能出现的问题:RS触发器是一种危险的触发器,R=S=1会导致不稳定态,初始状态也不确定。常用电路设计错误的上升沿检测电路QDCLRNoutIn'1'。clrn可能出现的问题:毛刺也会触发电路,需要区分毛刺和信号。常用电路设计QDQDclkIn··out正确的上升沿检测电路电路工作的条件:时钟周期小于输入信号的脉冲宽度。clkinout常用电路设计QDCLRNoutIn图4.15'1'。clrn错误的下降沿检测电路可能出现的问题:毛刺也会触发电路,需要区分毛刺和信号。常用电路设计正确的下降沿检测电路电路工作的条件:时钟周期小于输入信号的脉冲宽度。QD图4.16QDclkIn··out常用电路设计正确的上下沿检测电路QD图4.17QDclkIn··out常用电路设计禁止使用锁存器QDDLELEQ锁存器存在的问题:锁存器是较危险的电路,没有确定的初始状态,输出随输入变化,这意味着毛刺可以通过锁存器。除非有专用电路特别需要,不要使用锁存器。内容提纲一.基本概念二.常用电路设计三.FIFO设计四.状态机设计五.Verilog书写规范FIFO设计同步FIFO:读写操作使用同一个时钟。异步FIFO:读写操作使用不同频率或相位的时钟。FIFO设计同步FIFO框图同步FIFO设计规则(1)读写地址产生:当读使能有效时,在同步时钟作用下读地址加1,当写使能有效时,在同步时钟作用下写地址加1;可靠的写使能:为确保FIFO不多写,必须对FIFO的写操作进行保护,写FIFO使能为外部的写使能和FIFO不满的组合,同时须确保外部写使能可靠;可靠的读使能:为确保FIFO不多读,必须对FIFO的读操作进行保护,读FIFO使能为外部的读使能和非空的组合,同时须确保外部的读使能可靠;满标志的产生:复位时,Full信号初始化为0;如果FIFO不读,并且Cnt_fifo等于FIFO的深度Deepth_fifo时;或者Cnt_fifo等于(Deepth_fifo-1),并且正在写(即写使能Write_enble有效)时,满标志应该置1;其余情况置为0;同步FIFO设计规则(2)空标志的产生:复位时,让Empty信号为1,表示FIFO空;当FIFO中的Cnt_fifo等于0或者等于1并且正在读FIFO时,Empty就应置1,表示读空;其余情况则不空,置为0;几乎空和几乎满标志的产生:为正确产生读写使能,避免多读和写溢出,经常使用几乎空和几乎满标志,来提前预告FIFO的状态,几乎空和几乎满的阈值根据业务特点应为可设。在FIFO深度大,同时速度要求高时,可采用线性反馈移位计数器(LFSR),为避免不必要的竞争冒险,地址采用格雷码编码,以实现无毛刺比较;从可测试性角度考虑,建议把逻辑中重要FIFO的空、满、几乎空、几乎满标志引入寄存器,以便在定位问题时观察FIFO的内部工作状态;在同步FIFO的实际应用中,需要有FIFO的上下溢出告警上报,以便提供业务层次的保护。FIFO设计异步FIFO框图(1)FIFO设计异步FIFO框图(2)异步FIFO设计规则读地址和空标志是由读时钟产生的,而写地址和满标志则由写时钟产生。读写地址的产生:如果外部写使能(Write_enable)有效,同时FIFO不满,在写时钟作用下写地址增1;如果读使能(Read_enable)有效,同时FIFO不空,在读时钟作用下读地址增1;可靠的写使能:为确保FIFO不多写,必须对FIFO的写操作进行保护,写FIFO使能为外部的写使能和FIFO不满的组合,同时须确保外部写使能可靠;可靠的读使能:为确保FIFO不多读,必须对FIFO的读操作进行保护,读FIFO使能为外部的读使能和非空的组合,同时须确保外部的读使能可靠;为避免地址跳变的不一致造成读写地址误判断以及产生空满误判断,应该使用格雷码进行读写地址编码,并产生空、满、几乎空、几乎满信号;(读写地址的格雷码产生,在本文中限于篇幅,不作描述);空标志的产生:当读写格雷码地址相等,或者FIFO内还剩下一个深度字,并且正在不空的情况下执行读操作,这时Empty标志应该置为有效;异步FIFO设计规则满标志的产生:当写FIFO的格雷码地址等于上次读的格雷码地址时,或者下次要写的格雷码地址等于上次读的格雷码地址,并且正在执行写操作,此时需置满标志有效;几乎空、几乎满标志的产生:可多做几个格雷码的延时地址,利用读、写格雷码地址距离远近关系可产生特定读写地址间距的几乎空或几乎满标志;当需要较大读写间距来产生几乎空和几乎满信号时,采用写地址减间距的格雷码等于读地址的格雷码,和读地址减间距的格雷码等于写地址的格雷码来产生几乎空和几乎满信号;另外也推荐使用象限比较方法;可以设置上下水线,避免FIFO连续频繁读写以及上下溢出,同时FIFO设计最好不会出现空和满标志,这样控制逻辑简单,速度可以达到很高;在FIFO进入既空又