FPGA入门教程.pdf

所需积分/C币:45 2019-07-28 14:56:15 6.33MB PDF
565
收藏 收藏
举报

1、数字电路设计入门 2、FPGA简介 3、FPGA开发流程 4、RTL设计 5、Quartus II 设计实例 6、ModelSim和Testbench
112时序逻辑电路 时序逻辑电路由时钟的上升沿或下降沿驱动工作,其实真正被时钟沿驱动的是电路中的 触发器( Register),也称为寄存器。触发器的工作原理和参数如下图 Register的原理和参数 T DQ Clk Clk old tsu:建立时间,在时钟有效沿到来之前触发器数据输入应保持稳定的时间,如果建立时 间不够,数据将不能在这个时钟沿被打入触发器。它间接约束了组合逻辑的最大延时。 thold:保持时闫,在触发器数据输入引脚的数据在系统有效时钟沿到来后,需要保持稳 定的时间,如果保持时间不够,数据冋样不能被打入触发器。它间接约束了组合逻辑的最 小延时. tc-q:触发器从有效钟沿到来到输出有效的最大时间。 下面是两个简单的时序逻辑电路例子: (1)、时钟分频电路 车+, enable T T DFF古 clk. 4 - clk 该时序电路的功能为实现对时钟clk的4分频,其中'clk2为2分频时钟,"clk4为4 分频时钟,' enable为该电路的使能信号。其功能仿真波形如下图所示: wawe. default air/example3/clk_2 I-No Data sim: /example3/clk_4 No Dala (2)、序列检测器 N03 ein 9 senable. AND2 DFF datain inst 10 4+ n n三 st2 该时序电路实现了一个序列检测器,当输入序列 datain中出现101时,标志位F将输 出1',其他时刻输出0。电路中ck为时钟信号,D1’,D2,D3为移位寄有器的输出,' enable 为该电路的使能信号。其功能仿真波形如下图所示: ne wave- default 4 Edt /example 2/erabl No Data Edit: /example 2/datain No Data Edit: /example2/ck: No Data sim /example 2/D1 No dala sim/example2/D2 -o Dala srm:/exaple 2/D3 -No Data 可见,时序电路设计的核心是时钟和触发器,这两者也是我们设计电路时需重点关注的。 12毛刺的产生与消除 1.2.1竟争与冒险 当一个逻辑门的输入有两个或两个以上的变量发生改变时,由于这些变量是经过不同路 径产生的,使得它们状态改变的时刻有先有后,这种时差引起的现象称为竞争(Race)。荒 争的结果将很可能导致冒险( Hazard)发生(例如产生毛刺),造成错误的后果,并影响系 统的工作。 组合逻辑电路的冒险仅在信号状态改变的时刻出现毛刺,这种胃险是过渡性的,它不会 使稳态值偏离正常值,但在时序电路中,冒险是本质的,可导致电路的输出值永远偏离正常 值或者发生振荡 避免冒险的最简单的方法是同一时刻只允许单个输入变量发生变化,或者使用寄存器采 样的办法。 1.22毛刺的生与危害 信号在FPGA器件中通过逻辑单元连线时,一定存在延时。延时的大小不仅和连线的长 短和逻辑单元的数目有关,而且也和器件的制造工艺、工作环境等有关。因此,信号在器件 中传输的时候,所需要的时间是不能精确估计的,当多路信号同时发生跳变的瞬间,就产生 “竞争冒险”。这时,往往会出现一些不正确的尖峰信号,这些尖峰信号就是“毛刺” 让我们来具体看一下毛刺是如何产生的。下图是一个与门电路, “ N OUT b Assign OUT= a&b 我们期望的设计是,a和b信号同时变化,这样输出OUT将一直为0,但是实际中OUT 产生了毛刺,它的仿真波形如下所示: P30.ns160.0ns24.pns320.ns40. b 可见,即使是在锓简单的逻辑运算中,如果出瑰多路信号同时跳变的情况,在通过内部 走线之后,就一定会产牛毛刺。而现在数字电路设计中的信号往徉是由时钟控制的,如果将 带有毛刺的输岀信号直接连接到时钟输入端、清零或置位端口的设计,可能会导致严重的后 果;此外对于多数据输入的复杂运算系统,每个数据都由相当多的位数组成。这时,每一级 的毛刺都会对结果有严重的影响,如果是多级的设计,那么毛刺累加后甚至会影响整个设计 的可靠性和精确性。 判断一个逻辑电路在某些输入信号发生变化时是否会产生毛刺,首先要判断信号是否会 同时变化,然后判断在信号同时变化的时候,是否会产生毛刺,这可以通过逻辑函数的卡诺 图或逻辑函数表达式来进行判断。 1.23毛刺的消除 毛刺是数字电路设计中的棘于问题,它的出现会影响电路工作的稳定性、可靠性,严重 时会导致整个数宁系统的误动作和逻辑紊 可以通过以下儿种方法来消除毛刺: 1、输出加D触发器 这是一种比较传统的云除毛刺的方法。原理就是用一个D触发器去读带毛刺的信号, 利用D触发器对输入信号的毛刺不敏感的特点,去除信号中的毛刺。在实际中,对于简单 的逻辑电路,尤其是对信号中发生在非时钟跳变沿的毛刺信号,去除效果非常的明显。 但是如果毛刺信号发生在时钟信号的跳变沿,D触发器的效果就没有那么明显了(加D 触发器以后的输出q,仍含有毛剌)。另外,D触发器的使用还会给系统带来一定的延时, 特别是在系统级数较多的情况下,延时也将变大,因此在使用D触发器去除毛刺的时候, 一定要视情况而定,并不是所有的毛刺都可以用D触发器来消除。 2、信号同步法 设计数字电路的吋候采用同步电路可以大大减少毛刺。由于大多数毛刺都比较短(大 概几个纳秒):只要毛刺不出现在时钟跳变沿,毛刺信号就不会对系统造成危害了。因此 般认为,只要在整个系统中使用同一个时钟就可以实现系统同步。但是,时钟信号在FPGA 器件中传递时是冇延时的,我们无法预知时钟跳变洺的精确位置。也就是说我们无法保证在 某个时钟的趺变沿读取的数据是一个稳定的数据,尤其是在多级设计中,这个问题就更加突 出。因此,儆到真正的"司步"就是去除毛刺信号的关键问题。所以同步的关键就是保证在时 钟的跳变沿读取的数据是稳定的数据而不是毛则数据。以下为两种具体的信号同步方法。 (1)信号延时同步法 信号延时法,它的原理就是在两级信号传递的过程中加一个延时环节,从而保证在下 个模块中读取到的数据是稳定后的数据,即不包含毛刺信号。这里所指的信号延时可以是数 据信号的延时,也可以是时钟信号的延时。 2)状态机控制 使用状态机也可以实现信号的同步和消除毛刺的目的。在数据传递比较复杂的多模块系 统中,由状态机在特定的时刻分别发出控制特定模块的时钟信号或者模块使能信号,状态机 的循坏控制就可以使得整个系统协调运作,同时减少毛刺信号。那么只要我们在状态机的触 发时间上加以处理,就可以避免竞争冒险,从而抑制毛刺的产生。 3、格雷玛计数器 对于一般的二进制或十进制计数器,在计数时,将有多位信号同时跳变。例如一个3bit 进制计数器,由111转换为”000时,必将产生毛刺。比时,使用格雷码计数器将避免毛 刺的出现,因为格雷码计数器的输出每次只有一位跳变。 其他关于毛刺的详细讨论,请见补充教2:关于毛刺问题的探讨。 13同步电路设计 同步电路是指所有电路在同一个公共时钟的上升沿或下降沿的触发下同步地工作。但在 实际系统中,往往存在多时钟域的情况,这时同步的概念有所延伸,不再专指整个设计同步 于同一时钟沿,而是指设计应该做到局部同步,在每个时钽域内的电路要同步于同一时钟沿。 1.31同步电路设计的优点: 1.同步设计能有效地避免毛刺的影响,使得设计更可靠; 2.同步设计易丁添加异步复位 reset,以使整个电路有个确定的初始状态; 3.司步设计可以减小环境对芯片的影响,避免器件受温度,电压,工艺的影响; 4.同步设计可以使静态时序分析变得简单和可靠; 5.司步设计可以很容易地组织流水线,提高芯片的运行速度。 132同步电路的设计准则 1.尽可能在设计中使用同一时钟,时钟走全时钟网络。走全局时钟网络的时钟是 最简单、最可预测的讨钟,它具有很强的驱动能力,可以驱动HPA内部中的所有触发器, 并俣证 Clock skew可以小到忽略的地步 2.避免使用混合时钟沿采样数据,即避免在没计中同时使用时钟的上升沿和下降沿。 3.尽量少在模块内部使用计数器分频所产生的时钟。计数器分频时钟需完成的逻辑 功能完全可由PL镄柑坏或时钟使能电路贊代。计数器分频时钟的缺点是使得系统内时钟 不可控,并产生较大的 Clock skew,还使静态时序分析变得复杂。 4.避兔使用门控时钟。因为经组合逻辑产生的门控时钟极可能产生毛刺,使D舳发 器误动作。 5.当整个电路需要多个时钟来实现,则可以将整个电路分成若干局部同步电路(尽 量以同一个时钟为一个模块),局部同步电路之间接口当作异步接口考虑,而且每个时钟信 号的时钟偏差(∧冖)要严格控制 6.电路的实际最高工作频率不应大于理论最高工作频率,留有设计余量,保证芯片 可靠工作 7.电路中所有寄存器、状态机在系统被 reset复位时应攵在一个已知的状态。 关于同步电路设计中的其他问题请详见补充教程3:华为同步电路设计规范。 13.3关于时钟设计的讨论 目前的工程设计中般使用同步时序屯路来完成整个系统的设计,由上节可见,吋钟 在同步电路设训中起着至关重要的作用。那么,我们在设计时首先要完成的是对时钟的设计。 如今在设讣中常见的时钟关型包括:全局时钟、内部逻辑时钟和门控时钟。 1.全局时钟 仝局时钟即同步封钟,它通过FPGA芯片内的仝局时钟布线网络或区域时钟网络来驱 动,仝局时钟具有高扇出、高精度、低 Jitter和低Skew的特点,它到芯片中的每一个寄存 器的延迟最短,且该延迟可被认为是固定值。所以我们推荐在听有的设计中的时钟都使用全 局时钭。全局时钟的设计有以下几种方法: (1).山PLL锁相环来产生全局时钟。 (2).将FFA芯片内部逻蟹产生的时钟分配至全局时钟布线网络。 (3).将外部时钟通过专用的全局时钟输入引脚引入FPGA 在我们的设计中,一般推荐电路中的所有的时钟都由PL锁相环产生。一方面,PL 锁相环可头现倍频和移相的操作,使我们很方便地£得所需频率和相位的时钟;另一方面, 門LL锁相环默认将其驱动的时钟分配至全局讨钟网络或区域时钭网终,Jter和Skew都很小。 下图取自我们项目中的一个PL锁相环设计,该PLL用于驱动DR的接口模块。因为 功能所需,DDR接∏需要三个133MHz的时钟,相位分别是90°、0°、·-180°,图中所示 即为该时钟的产生模块。我们使用 QuartusⅡ的 Megawizard生成PL锁相环的core。其 口inck66’为PLL锁相环的输入时钟,由外部的66MHz晶振提供,经过PL倍频和移相 后得到所需的三个全局时钟。 · pll master insko oI shtick [PIN_ Ac13 insko frequency: 66. 660 MHz ,1斗 019.ys_olk 01的的0060 e21333360-1800500 inst15 2.内部逻辑时钟 内部逻辑时钟即指由芯片内部的组合逻辑或计数器分频产牛的时钟。 对于组合逻辑时钟,特别是由多级组合逻辑产生的时钟,是要被严格禁止使用的,因 为一方面组合逻辑极容易产生毛刺,特别是对多级组合逻辑;另一方面组合逻辑电路的 Jitter 和Skew比较大,这将恶化时钟的质量。所以,一般组合逻辑产生的内部时钟仅仅适用于时 钟频率较低、时钟精度要求不高的情况 对于计数器分频产生的时钟,也应该尽量少地使用,因为这种时钟会带来比较大的延 迟,降低设计的可靠性,也使得静态时序分析变得复杂。计数器分频时钟需完成的逻辑功能 完全可由PLL锁相环或时钟使能电路替代 还有一种由触发器产生的时钟—行波时钟,即一个触发器的输出用作另一个触发器的 忖钟输入。文中1.1.2节描述的时钟分频电路就是种行波时钟。因为各触发器的时钟之间 产生较大的时问偏移,很容易就会违反建立时间、保持时间的要求,导致亚稳态的发生。所 以,这种行波时钟要被严格禁止使用。 3.门控时钟 一般情况下,应该避兔使用门控时钟。囚为经组合逻辑产生的门控时钟极可能产生毛 刺,对系统造成很大危害。但对于某些功耗很大的系统而言,需要使用门控时钟来降低功耗。 我们推荐使用右图中描述的门控时钟的设 source clk 计,该设计一般不会产生毛刺和亚稳态的问题。 gated -clk 因为触发器避免了毛刘的产尘,而亚稳态只可能cken 占现在源时钟的下降沿,但是随后它与源时钟低 gout 相位相与,最后不会产生影响。 urce clk clk en ut gated clk 门控时钟最好只在顶层模块中出现,并将其分离到一个在顶层的独立糢块中。这同时保 证了底层的每个模块有单一的时钟,且在本模块中的时钟不走行门控。 在补充教程4和补充教程5中,我们对时钟和时序的设计进行了更详细的讨论。 1.3.4亚稳态 在同步电路或异步电路中,如果触发器的 setup时间或hold时间不能得到满足,就可 能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状 态,在这段时间里Q端将会产生毛刺并不断振荡、最终定在某一电压值上,此电压值并 不一定等于原来数据输入端D 每在 nly one synchronizing fip-fiop 的值。这段时间称为决断时间 己主k bdat I to belk ( resolution time)。经过决断 时间之后,Q端将稳定到0或 OM人 转量 1上,但是究竞是0还是1, belts ample ada whiie it is changing(59 这是随机的,与输入没有必然 and might stil be 的关系。 bitl metastable at the noxt hsing edge dubek (的 亚稳态的危害主要体 现在破坏系统得稳定性上,由于输岀在稳定下釆之前可能是毛刺、振荡、固定的某一电压值, 因此亚稳态除了导致逻辑误判之外,严重情况下输出0~1之间的中间电压值还会使下一级 产生亚稳态(即导致亚稳态的传播)。逻辑误判将导致功能性错误.而亚稳态的传播则扩 大了故障面,严重时将导致系统崩溃。 在异步时序电路中更容易发生亚稳态,因为异步电路一般具冇多个时钟域,数据在两个 时钟域间传递时,非常容易导致 setup时间或hod时间不满足而发生亚稳态。在同步时序 冋路中,当两个舳发器间的组合逻辑延迟过大时,会导致 setup时间不满足而发生亚稳态。 1.35对跨时钟域数据的处理 对跨时钟域数据的处理的核心就是要保证下级时钟对上级数据样的 setup时间或 hold时间淸足要求,即尽量避免亚稳态的发生和佔播。但是,我们知道,只要系统中有异 步元件,亚稳态就是无法避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次 要使系统对产生的错误不敏感。我们推荐使用以下方沄来解决异步时钟域数据同步问题。 1.用触发器打拍 如下图,左边为异步输入端,经过两级触发器同步,在右边的输出将是同步的,而且 该输岀棊本个存在亚稳态。其原理是即使第一个触发器的输岀端存在亚瘾态,经过一个ακ 周期后,第二个触发器D端的电平仍未稳定的概率非常小,因此第二个触发器Q端基本不 会产生亚稳态。然而,亚稳态是无法被根除的,一且亚稳态发4,后果的严重稈度依赖于你

...展开详情
试读 37P FPGA入门教程.pdf
立即下载 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
  • 签到新秀

  • 分享宗师

关注 私信
上传资源赚钱or赚积分
最新推荐
FPGA入门教程.pdf 45积分/C币 立即下载
1/37
FPGA入门教程.pdf第1页
FPGA入门教程.pdf第2页
FPGA入门教程.pdf第3页
FPGA入门教程.pdf第4页
FPGA入门教程.pdf第5页
FPGA入门教程.pdf第6页
FPGA入门教程.pdf第7页
FPGA入门教程.pdf第8页

试读结束, 可继续读4页

45积分/C币 立即下载