FPGA学号4
我的经验是,别死记公式,画时间轴图最直观。以常见的“写快读慢”场景为例:假设写时钟100MHz,读时钟40MHz,突发长度120,写完后到下一次突发有足够长的空闲期(读侧可以慢慢读完)。那最坏情况是什么?是写数据连续涌入,而读侧在写数据开始的那一刻,恰好错过了第一个读时钟沿(由于异步相位差),导致读启动延迟了一个读周期。所以,在写突发持续的120个写周期内(时间长度 = 120 / 100e6 = 1200 ns),读侧实际能读多少个数据?读周期 = 25 ns,理论最大可读数量 = 1200 ns / 25 ns = 48个。但考虑到启动延迟,可能只能读47个?这里通常按理论最大可读数量向下取整(因为数据是离散的)。所以深度 = 120 - 48 = 72。但这是理想连续读。如果题目说读使能每3个周期才有效一次,那就要把读效率考虑进去。通用步骤:1. 确定最坏情况时间窗口(写突发持续时间)。2. 计算此窗口内读侧最大可读数据量(考虑读时钟周期和使能模式)。3. 深度 = 突发长度 - 可读量。注意:如果计算结果为负数,则深度最小为1(实际可能为2,但笔试有时认为1即可)。还有一个细节:读写时钟频率比不是整数时,计算读数量时要小心,不要直接拿频率比乘以突发长度,因为时间窗口可能不是读时钟的整数倍,导致最后一个读周期可能来不及读,这时向下取整是关键。
