关于 FPGA 内部信号扇入扇出

  • Eagleson
  • LV5工程师
  • |      2016-04-27 15:25:09
  • 浏览量 1190
  • 回复:0

学习有关FPGA方面的知识,在看一些FPGAdatasheet时,看到fan-outfan-in这样的字眼,乍一看还真不知所云,继续往下看还是云里雾里,于是用Google在线翻译了一下,上面赫然是扇入扇出,不用想,电子设计方面怎么会有这么俗的词,还呢。刚开始不以为然,后来在求知欲的驱使下,就以扇入扇出为关键字在网上开始艰难搜寻。别说这一找,还真找到不少资料呢,看了网上那些大侠们的解释,我才恍然大悟,原来Google并没有翻译错,而是自己太孤陋寡闻了。下面我将给出我所找到的关于扇入扇出的解释,以下都是来自网络,并非原创:

扇入、扇出系数

扇入系数是指门电路允许的输入端数目。一般门电路的扇入系数为1—5,最多不超过8。扇出系数是指一个门的输出端所驱动同类型门的个数,或称负载能力。一般门电路的扇出系数为8,驱动器的扇出系数可达25。扇出系数体现了门电路的负载能力。

 灌电流、拉电流

     当逻辑门输出端是低电平时,灌入逻辑门的电流称为灌电流,灌电流越大,输出端的低电平就越高。当逻辑门输出端是高电平时,逻辑门输出端的电流是从逻辑门中流出,这个电流称为拉电流。简单的理解就是逻辑门的输入(灌电流)和输出电流(拉电流)。

 上、下拉电阻

    上拉电阻就是将不确定的信号通过一个电阻嵌位在高电平(即拉电流),来增加高电平输出时的驱动能力,以解决总线驱动能力不足时提供电流;下拉电阻就是将不确定的信号通过一个电阻嵌位在低电平,是用来吸收电流的,也就是灌电流。

 负载效应

当输出负载大于它的扇出能力的时候,就会有如下的效应:

1、输出低态时,输出电压VOL可能高于VOLmax

2、输出高态时,输出电压VOH可能高于VOLmin

3、输出的传播延迟可能大于规格说明的延迟值。

4、输出的上升和下降时间可能大于规格说明的延迟值。

5、器件工作温度可能升高,从而降低其可靠性,最终引起器件失效。

1.原意:  
The number of circuits that can be fed input signals from an output device.  
扇出,输出可从输出设备输入信号的电路的数量  

扇出(fan-out)是定义单个逻辑门能够驱动的数字信号输入最大量的术语。大多数TTL逻辑门能够为10个其他数字门或驱动器提供信号。因而,一个典型的TTL逻辑门有10个扇出信号。 
在一些数字系统中,必须有一个单一的TTL逻辑门来驱动10个以上的其他门或驱动器。这种情况下,被称为缓冲器的驱动器可以用在TTL逻辑门与它必须驱动的多重驱动器之间。这种类型的缓冲器有2530个扇出信号。逻辑反向器(也被称为非门)在大多数数字电路中能够辅助这一功能。

2.在模块化设计中

模块的扇出是指模块的直属下层模块的个数,如图78所示。图78中,平均的扇出是2。一般认为,设计得好的系统平均扇出是34

关于 FPGA 内部信号扇入扇出

7.8模块的扇出


一个模块的扇出数过大或过小都不理想,过大比过小更严重。一般认为扇出的上限不超过7。扇出过大意味着管理模块过于复杂,需要控制和协调过多的下级。解决的办法是适当增加中间层次。

一个模块的扇入是指有多少个上级模块调用它。扇人越大,表示该模块被更多的上级模块共享。这当然是我们所希望的。但是不能为了获得高扇人而不惜代价,例如把彼此无关的功能凑在一起构成一个模块,虽然扇人数高了,但这样的模块内聚程度必然低。这是我们应避免的。

设计得好的系统,上层模块有较高的扇出,下层模块有较高的扇人。其结构图像清真寺的塔,上面尖,中间宽,下面小。

多扇出问题,通常是指用一个节点驱动多个下级逻辑器件,此问题会严重影响FPGA布线的稳定性,设计的时候要多加注意,此时采用的是复制寄存器策略。

举个例子: CLK为系统时钟,M1MHz方波信号,由于M信号驱动的模块较多,所以M的扇出较多,为了减少扇出,用系统时钟采样,将M信号驱动7D触发器,然后将7D触发器的输出端分给7个模块,这样每个复制点(DUP0~DUP6)平均扇出变为原来的1/7M的信号扇出变为7,这样就减少了每个信号的扇出,优化了逻辑,也提高了设计的整体性能。简而言之,就是将一路信号用D触发器和CLK将其分成两路信号,或者是更多路的信号,再让这些信号来驱动下面的各个模块。

 

如何判断是系统的问题是由于多扇出而导致的呢。我是这样判断的,因为我的模块是一个一个写,一块一块的调试的,所以在分开调试的时候没有出任何问题,当所有的综合在一起的时候,就出现了有一个模块的信号总是不正常,单独调试该模块的时候又正常,然而这两个模块之间又没有什么交互信号,所以,就把问题定位在这个共用信号的驱动能力上了,最终曾加了D触发器,解决了这个问题。

另外经高手指点,还有一种方法是将这个频率信号放在CLK的管脚上,因为时钟管脚的驱动能力比一般的IO口要大一些,所以也就能够带动更多的逻辑门。

 

最后添加一点关于门控时钟的问题。在编译的时候,系统会报警告,Found X node(s) in clock paths which may be acting as ripple and/or gated cloxks。这种情况是由于使用了门电路来产生时钟,一般处理这个警告的方式都会说:“如果是这样设计的,就不管这个警告了。”不过看了下面的一段文字也就能够理解为什么会有这样的警告了。如果想设计出更完美的产品,还是要考虑这个问题的。

门控时钟指的是不用FPGA内部的全局时钟资源BUFG来控制触发器的时钟沿输入端而是采用组合逻辑和其它时序逻辑(如分频器)产生的信号作为触发器的时钟沿输入端。门控时钟容易带来时钟漂移、毛刺等,使得触发器误动作,通常,对于驱动的触发器数量较少的门控时钟,编译器可以自动将分布时钟缓冲器将其布线优化,但是对于驱动触发器较多的门控时钟,将会使布线不稳定,重者造成设计混乱。门控时中较多,也会使得整个设计的最大工作速度下降,降低产品的性能。

对于门控时钟问题,通常的解决办法是将分频器做成与系统时钟宽度一个周期宽度的脉冲信号,所谓系统时钟就是用全局时钟资源BUFG驱动的高扇出、零漂移、零畸变的时钟资源,在FPGA内部的布线结构是树形结构。

将分频器的输出送入触发器的ce端,当系统时钟到来时,检测ce信号的有效性,当ce信号有效时,将触发器的输出改变,和分频器的作用完全一样,而且这样处理也使得布线更加优化。 

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子