← 2022 · 芯海科技 笔试

推荐答案 测试一下

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

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

参考答案

我们分析题目:有一个FIFO设计,输入时钟100MHz,输出时钟70MHz,输入数据模式固定。在1000个输入时钟中,有700个时钟写传输连续数据。意思是:在1000个输入时钟周期内,有700个时钟周期写入数据(有效写使能),而且这700个数据是连续写入的(即写使能连续有效700个时钟)。要求计算FIFO最小深度以避免溢出或下溢。 注意:输入时钟频率100MHz,输出时钟70MHz。但题目说“输入数据模式固定,其中1000个时钟中有700个时钟写传输连续数据”。这里“1000个时钟”大概率是指输入时钟的1000个周期。也就是说,每1000个输入时钟周期内,有700个时钟周期连续写入数据,其余300个时钟周期不写数据。这是一个突发写入模式,写入速率不均匀,但平均写入速率是 (700/1000)*100MHz = 70MHz? 实际上写入数据的有效速率:每1000个输入时钟写700个数据,输入时钟频率100MHz,所以平均写入数据速率 = (700/1000)*100M = 70M 数据/s。输出时钟频率70MHz,但输出是否每个时钟都读出?通常FIFO读使能可能持续有效或者也有模式?题目没有说,一般认为输出时钟每个周期都能读出一个数据(即读使能始终有效),因为输出时钟是70MHz,读速率就是70M/s。如果读速率等于平均写速率,那么FIFO深度需要能够容纳突发写入期间多于读出的数据。 由于写操作是连续的700个时钟周期内每个时钟写入一个数据,而读操作是连续的每个时钟读出一个数据(假设读使能始终有效),但读写时钟不同频。那么在写突发的过程中,写入速率是100MHz(因为写时钟频率100MHz,每个有效写入时钟写一个数据),而读出速率是70MHz。所以写入快于读出,FIFO中数据会累积。最大累积发生在写突发结束时。需要计算累积的数据量。 写突发长度:700个数据,写入时间:700个输入时钟周期 = 700 * (1/100MHz) = 700 * 10ns = 7000ns。在这段时间内,读出数据个数:读时钟周期 = 1/70MHz ≈ 14.2857ns,读出个数 = 7000 / (1/70M) = 7000 * 70M = 7000 * 70e6? 更准确:时间除以读周期 = 7000ns / (1000/70? 注意单位统一:7000 ns = 7000e-9 s,读周期 = 1/(70e6) s = 1/70e-9? 计算:7000e-9 / (1/(70e6)) = 7000e-9 * 70e6 = 7000*70e-3 = 490000e-3 = 490? 不对,7000*70=490000,再乘以1e-3? 仔细算:7000 ns = 7e-6 s,读周期 = 1.42857e-8 s,相除 = 7e-6 / 1.42857e-8 ≈ 490。所以读出490个数据。那么累积的数据量 = 700 - 490 = 210个。但是注意,写突发开始前FIFO可能为空,突发结束后还有剩余数据需要读出,但后续读继续,直到FIFO变空。但是下次写突发何时开始?题目说“输入数据模式固定,其中1000个时钟中有700个时钟写传输连续数据”,意味着每1000个输入时钟周期为一个循环:前700个时钟连续写数据,后300个时钟不写。那么在一个循环周期内,写入了700个数据,读出多少?一个循环的时间是1000个输入时钟周期 = 1000 * 10ns = 10000ns。读时钟周期14.2857ns,读出的数据个数 = 10000 / 14.2857 ≈ 700个。因为10000/14.2857 = 700 (正好? 14.2857 * 700 = 10000? 14.2857*700=10000.0,实际上1/70MHz = 1000/70 ns = 14.285714... ns,乘以700正好是10000ns)。所以平均来说,一个循环内写入700个,读出700个,平衡。但是因为写集中在前面,所以FIFO深度至少需要容纳写突发期间超过读的部分。 刚才计算在写突发的700个输入时钟周期内(7000ns)读出了490个,所以最大积压为210个。但是要注意:写突发结束后,还有300个输入时钟周期(3000ns)不写数据,但继续读。这3000ns内读出的数据个数 = 3000 / 14.2857 ≈ 210个。正好把积压的210个读完。所以FIFO深度至少为210?可是选项中没有210,有270、360、420、1170。所以我们的计算可能有误。 可能我们忽略了什么。题目说“输入数据模式固定,其中1000个时钟中有700个时钟写传输连续数据。”这里的“1000个时钟”可能是指输出时钟?或者是指总的时钟?通常这类题目中,写使能的有效周期是占空比形式。另外,注意输出时钟70MHz,可能读使能也不是一直有效的?但题目未提及,通常假设读使能一直有效。 另一个可能是:写入数据是连续写700个,但写入时钟是100MHz,所以写入数据速率100M/s持续700个周期。读出时钟70MHz,读出速率70M/s。但FIFO深度计算通常还需要考虑异步时钟域,需要额外深度来应对同步等问题?但题目问最小深度,通常不考虑亚稳态处理所需的额外深度(如两级同步器),而是纯数据量计算。 或者可能是每1000个输出时钟中有700个时钟写?但明确说“输入时钟100MHz,输出时钟70MHz,输入数据模式固定,其中1000个时钟中有700个时钟写传输连续数据。”理解成:在1000个输入时钟周期内,有700个时钟周期有效写,且是连续。但计算出的210不在选项。重新计算精确数值。 输入时钟周期T_w = 1/100MHz = 10ns。写突发持续时间 = 700 * 10ns = 700

涉及知识点

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