有关fanout

扇出应该是一个门对它后续门的驱动能力,那么就是说对于某个门它都有一个扇出的限制数,书上说超出了这个限制数,后续门的工作状态可能就不正常了。那么我现在有几个问题请求和朋友们探讨一下:

1.如果我需要驱动的门的数目超出了扇出限制,那么我在扇出的位置增加驱动器可行么?那么是不是只要多加驱动器就可以驱动无数的扇出呢?

2.扇出对速度的影响大么?电路里面的延时可以分成门延时,线上延时和扇出延时(当然也包括FF的建立时间等等),那么大的扇出是不是有可能形成电路里面的crucial path?那么怎么解决呢?加驱动器可以解决速度的问题么?还是把大的扇出分解为小的扇出?比如有100个扇出,那么就用FF把这100个分成两组50个的扇出,这样把100个扇出本来在一个cycle执行的扇出分解为两个cycle执行?


数电里有个很重要的概念:Fan out:“一逻辑门的输出需要驱动多个等效门的输入,称输出端接的需要驱动的等效门数为扇出F”。

试想,加的负载越多,由栅电容并联组成的负载电容就增大,从而使电路延迟增大,以及电荷分配又使其输出给负载的电压降低。所以有个驱动能力问题!

这里,我们需要做的是 如何在增多负载时,仍使该线路上的延时保持基本不变,以便和其他线路上的时序关系保持同步.

这就是 我们分析和设计集成电路时的一个基本出发点。

扇出问题在TTL时代是经常要考虑的问题,在CMOS主导的时代已经几乎不需要考虑了,因为从原理上讲TTL输入端应该算电流控制输出逻辑,而CMOS是电压控制输出逻辑。所以,在CMOS时代遇到的扇出能力不足时,绝对是比较难的课题,解决起来不是几句话的问题。
提高FF的扇出“几乎”不能采用多个FF,而是在FF输出后面接BUFFER。如果你的时间限制连BUFFER都无法满足要求,那也同样是个棘手的问题,需要专题研究。

扇出是描述TTL、DTL器件的负载能力,在器件手册中常见某器件能带几个标准TTL负载。TTL器件输出无论是集电极开路或图腾方式末级都集电极输出的NPN晶体管,负载能力取决于此管的能力,负载除吸入电流外还有负载的输入电容和线路的电容,现在的芯片吸入电流都很小,主要的负载是容性的,此电容和负载电阻组成积分电路。其中上升沿是无源驱动时间与集电极接的负载电阻以及外部负载的电容有很大关系,电阻选的大延时时间长功耗小,电阻选的小功耗大,延时时间短,图腾输出的电阻已经确定,OC输出的可根据需要改变电阻当然是有范围的(芯片输出是对管无此问题)。下降沿是有源驱动故延时较短,所以我们常见的对速度要求较高的输入都是下降沿驱动。驱动能力和延时取决晶体管的。由于芯片体积有限所以功率有限。
实事上驱动力不可能无限,因为负载不可能无限,一般一个器件在设计芯片电路时它的应用范围基本确定了它的负载,特殊需要可外加驱动器件代价是时间延时,驱动器件的输入对扇出器件也是负载,也不可能无限制在一个输出端扩展。事实上CMOS器件也是要考虑负载能力的,此时主要问题来自容性负载。

非常感谢您的解答,但是有些观点我还想与您作进一步商榷。mos管虽然是由电压驱动,但是在fan-out点上随着扇出的增多还是会碰到分压的问题,这是我从一本书上看到的。这本书的名字是《The practical Xilinx designer lab book》,作者进行了比较详细的分析。如果您愿意就这个问题作一些讨论,能否留下您的mail,我把书上相应的内容扫描下来给您发过去。谢谢。

另一方面,我在FPGA上面如果要实现相应的大扇出,扇出数目好像对速度的影响还是比较大的。我在看论文的时候,一些人使用了所谓的fanout-tree,但是没有具体指明如何构成。后来我在xilinx的站点看到官方的建议是“复制逻辑”,我想可能这就是所谓的fanout-tree,接着我在某个站点找到了复制逻辑的方法,连接如下:

http://www.chinaecnet.com/xsj04/xsj052341.asp

请注意2.3.2节即是,也就是我在提问中所描述的用FF分割的方法。因为我对fanout改进的目的并不是提高它的负载能力,而是希望能对速度提高。加buffer(也是驱动的一种吧?)只能提高其Fanout的数目,而对速度没有帮助吧?我这种理解对么?
同时非常感谢lack,odd_kylin的解答,你们的回答对我非常有帮助,非常感谢!

看了前面几位前辈的解答,让我有了新的思路,我下午在图书馆查阅了几本相关的书籍,让我有了一种茅塞顿开的感觉。因为我本科专业和底层的东西比较远,因此我想我既然已经明白了,那么用自己的话说出来应该是比较浅显。于是我就写了下面这段文字,即是对自己这个问题的一个总结,同时也是对几位前辈的解答的感谢,同时我也提出了自己认为进一步值得商榷的地方。

如下的文字的思想主要来这两本书:

Digital Integrated Circuit :analysis and design by John E. Ayers

Digital Design: principle and practices by John F. Wakerly

同时我加了一点自己的理解,有一些我觉得不好直译的部分我加入了原文:

扇出的能力主要是由管子的静态特性和动态特性来决定。

所谓的静态特性,就是前一级的管子对后级的直流电流驱动能力,而能使其稳定工作于Q点,就是其电阻性的表现,也叫DC-Load;

而动态特性是指电路对于电压切换速度方面的需求(就是高低电压互相切换的速度)。因为无论是线上还是管子本身都有一个等效的容值,这个速度就是电容的充放电时间,也就是RC常数。这时表现为容性,也叫AC-Load.当扇出数超过某个值的时候,电压的切换速度已经不能满足系统的要求(unaccepetable)(就是已经不能满足系统对频率的要求).

静态特性与动态特性同时对管子起作用,但是一般考虑起主要作用的那个(stringent limitation prevails).



对于TTL器件来说,一般考虑的是静态的特性,也就是有多大的电流驱动能力。

而对于Mos器件来说,如果后面驱动的也是Mos管的话,因为流过后级管子的电流就是管子的漏电流,这个电流极小,因此可以忽略不计。因而可以认为其后级的输入电阻是无穷大的,所以一般不考虑其静态特性,而考虑其动态特性,也就是电容性。(这就是李澎和odd_kylin都在解答中所提到的Mos管子一般不考虑其驱动能力的意思)



而MOS管上升与下降时间的延迟(RC常数)主要考虑两个因素:一是R,就是开门管子(ON-transistor,这个我不知道怎么表达)的等效电阻,二是C,后级的等效电容。因为组成反向器的两个MOS管在开关的时候使用不同的NP沟道,这两个沟道的阻值是不同的,因而造成了上升时间和下降时间的不同,上升时间会长一点,而下降时间会比较短。(这就是 odd_kylin解答中所说的“常见的对速度要求较高的输入都是下降沿驱动”,但是我觉得 odd_kylin的所叙述的原因还有商榷的余地,我比较认同的是书上的原因:就是NP沟道所不同的电阻造成RC常数的不同。)

加上BUFFER对速度肯定是有影响了,而且会比一般的门要多一点。复制逻辑的方法应该更多应用在FPGA这样的场合(也许我孤陋寡闻,我很难想象一个具体的实例),如果两个物理位置不同的FF要等效,在对增加一个BUFFER都不容易满足的场合,同步问题也应该是让你棘手的问题

确切的说,在MOS是更加应该叫“驱动”,

首先提出在digital领域MOS的模型:

作为前级,两个电流源串两个电阻,一个电流源连到电源,另一个到地。相应地就有四个参数,两个电流源的大小,和两个电阻的大小。

作为后级,就是化简为一个简单的电容,参数Cf。

通过上述的化简之后,就变成了通常电路理论中电流源通过一个电阻对一个电容充放电。

应用中有两点需要注意:

1、一个门在驱动别人的同时它也要被别人驱动。
2、电流和电阻要么通过查datasheet,或者通过自己的实验得到

1、MOS的驱动能力应该是和系统参数相关,如一个MOS在低速场合下驱动50个输入可能不是问题,在高速场合下就不行了。假设有个带载能力与系统参数的相关关系,如何计算呢?一点陋见:一般器件手册都给出了Output Short-Circuit Current,以此计算出接VCC端管子的导通内阻,再结合输出各负载电容的总和(从负载手册不难得到),得出上升沿阶段的时间常数。同例接地管子的内阻也不难得出。从这两个参数加上建立保持时间等就估计出在当前应用下最多能带多少个负载。
2、加BUFFER与应用FF的区别:BUFFER的延迟一般都挺大的吧?而BOARD上保证到不同FF的DATA和CLK的线差合理,对速度的影响应该比BUFFER要小的多。因此加FF应该比BUFFER可行。

Fanout 可以让编写平行代码更加容易。Fanout 的代码是可以重复使用的,所以你可以很容易地就写下平行代码,而不用担心 fatal error: all goroutines are asleep - deadlock!示例代码:for _, word := range domainWords {     if strings.TrimSpace(word) == "" {         continue     }     py := pinyin.Convert(word)     pydowncase := strings.ToLower(py)     domain := pydowncase   ".com"     outr, err := domainAvailable(word, domain)     if err != nil {         fmt.Println("Error: ", err)         continue     }     if outr.available {         fmt.Printf("[Ohh Yeah] %s %s\n", outr.word, outr.domain)         continue     }     fmt.Printf("\t\t\t %s %s %s\n", outr.word, outr.domain, outr.summary) } type checkResult struct {     word      string     domain    string     available bool     summary   string } func domainAvailable(word string, domain string) (ch checkResult, err error) {     var summary string     var output []byte     ch.word = word     ch.domain = domain     cmd := exec.Command("whois", domain)     output, err = cmd.Output()     if err != nil {         fmt.Println(err)         return     }     outputstring := string(output)     if strings.Contains(outputstring, "No match for \"") {         ch.available = true         return     }     summary = firstLineOf(outputstring, "Registrant Name")   " => "     summary = summary   firstLineOf(outputstring, "Expiration Date")     ch.summary = summary     return } 标签:Fanout
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值