← 2022 · 芯海科技 笔试

推荐答案 测试一下

有一个FIFO设计,输入时钟100MHz,输出时钟70MHz,输入数据模式固定,其中1000个时钟中有700个时钟写传输连续数据。为了避免FIFO下溢/上溢,FIFO最小深度是多少

A、360 B、1170 C、420 D、270
单选题 中等 笔试真题单选

参考答案

我们分析题目:有一个FIFO设计,输入时钟100MHz,输出时钟70MHz,输入数据模式固定,其中1000个时钟中有700个时钟写传输连续数据。为了避免FIFO下溢/上溢,FIFO最小深度是多少? 首先理解场景:输入时钟频率100MHz,即周期10ns。输出时钟70MHz,周期约14.2857ns。但题目说“输入数据模式固定,其中1000个时钟中有700个时钟写传输连续数据”。这意味着写使能不是每个时钟都有效,而是每1000个输入时钟中,有700个时钟写数据,并且是连续写的(即700个连续时钟写数据?注意描述“700个时钟写传输连续数据”可能意思是连续写700个数据,但中间有300个时钟不写?或者是每1000个时钟周期内,有700个时钟是有效的写使能,且这些写使能是连续的?)我们需要准确理解。 通常FIFO深度计算要考虑最大写入速率和读出速率。写入速率:输入时钟100MHz,但有效写入占空比是700/1000,所以平均写入速率 = 100MHz * (700/1000) = 70MHz。输出时钟频率也是70MHz,但输出速率取决于读使能。题目没有说明读使能情况,通常假设读使能连续(即每个输出时钟都读数据),那么读出速率 = 70MHz。平均写入速率等于平均读出速率,但需要考虑突发写入。 由于输入数据模式是每1000个时钟中有700个连续写数据,这意味着在连续的700个写时钟内,写入700个数据,而在这段时间内,读出按70MHz连续读,但读时钟周期长于写时钟?需要仔细分析时间跨度。 写时钟周期 = 1/100MHz = 10ns。读时钟周期 = 1/70MHz ≈ 14.2857ns。 现在考虑最坏情况:在写使能连续的700个写时钟内,写入700个数据。这段时间长度 = 700 * 10ns = 7000ns。在这段时间内,读使能连续,读时钟周期14.2857ns,所以读出的数据个数 = 7000ns / 14.2857ns ≈ 490个(因为7000/14.2857 = 490)。因此,在写入700个数据期间,读出了490个,所以FIFO中累积了700-490=210个数据。但这是在一个突发写周期内的情况。之后,下一个写周期可能间隔300个写时钟(即3000ns),在这段时间内,只有读没有写,会读出多少?3000ns内读出的数据个数 = 3000/14.2857 ≈ 210个。恰好等于之前累积的210个,所以FIFO可以清空。因此,最小深度至少为210?但选项中没有210,有270、360、420、1170。可能我理解有误。 另一种常见理解:输入时钟100MHz,输出时钟70MHz,每1000个输入时钟中有700个时钟写数据(即写使能有效),并且是连续写,那么平均写入速率=70MHz,与读出速率相等。但考虑最坏情况,连续写700个数据时,由于读时钟慢,需要深度为:最大写入数据量 - 这段时间内读出的数据量。但要注意,读时钟和写时钟不同频,需要精确计算时间。 写700个数据所需时间:写时钟周期10ns,所以时间=700*10=7000ns。在这7000ns内,读时钟周期为1000/70 ≈ 14.2857ns(因为70MHz周期≈14.2857ns),所以读出的数据个数 = floor(7000 / (1000/70)) = floor(7000 * 70 / 1000) = floor(490) = 490。所以累积700-490=210。但是,如果考虑写入和读出不是同时开始,可能不同相位导致需要更深?通常考虑最坏情况,写使能连续,读使能连续,且读时钟与写时钟不同源,可能需要考虑异步FIFO的深度。但本题应该是同步FIFO?因为给定了两个时钟,可能是异步FIFO。常用的深度计算公式:深度 >= 最大写入数据量 - 在写入期间读出的数据量。 另一种方法:考虑一个周期(比如1000个写时钟周期),写入700个数据,读出多少?1000个写时钟周期时间=1000*10=10000ns,读出的数据数=10000/14.2857≈700,正好相等。所以长期平衡。但突发期间需要缓冲。 但选项中有360、1170、420、270。210接近270?也许我计算有误。可能读时钟周期是70MHz,但读使能不是连续?题目没说读使能,通常默认读使能一直有效(即每个读时钟读一个数据)。但FIFO设计为了不溢出,需要考虑最坏情况。 再仔细看题:“输入数据模式固定,其中1000个时钟中有700个时钟写传输连续数据。”这句话可能意味着:在每1000个写时钟周期内,有700个写使能有效,并且这700个写使能是连续的(即连续700个时钟写数据)。可能还有另一种理解:1000个时钟中,有700个时钟用于写传输,并且这些写传输是连续的数据流?或者是“其中1000个时钟中有700个时钟写传输连续数据”可能是指有一个数据流,每1000个时钟内,有700个时钟是在传输连续的数据(即写使能有效),且这700个时钟是连续的。所以我认为上面的计算正确。 但210不在选项,可能我忽略了读使能的情况?或者读时钟70MHz,但读使能可能不是每周期都有效?通常FIFO设计,为了稳定,输出时钟频率低,但读使能可能也是连续?还有一种情况:可能写时钟和读时钟的比例导致需要更大的深度。考虑最坏情况:写使能连续700个时钟,而读使能也是连续,但读时钟周期长,所以写入快于读出,累积最大210。但之后有300个时钟不写,读出210个,正好平衡。所以最小深度是210。 但选项有270,接近210但不对。也许我计算的时间不准确?读时钟周期精确值:1/70e6 = 14.285714ns,写时钟周期10ns。7000ns内读出的数据个数精确为700

涉及知识点

  • 时钟
← 上一题
登录后反馈错题
下一题 →