推荐答案
测试一下
题目
设计一个同步fifo,读写时钟相同,其中在写入时每100个时钟周期会写10个,具体哪个时刻写入不确定,在读出侧每10个cycle会读1个,计算FIFO的最小深度?
参考答案与知识点
参考答案
我们分析题目:同步FIFO,读写时钟相同。写侧:每100个时钟周期写10个数据,具体时刻不确定(即写使能脉冲在100个周期内随机分布,但总数为10个)。读侧:每10个时钟周期读1个数据(均匀分布)。求FIFO最小深度。
核心思路:考虑最坏情况下的最大未读数据量。由于写使能可能集中在某段时间,读是均匀的,需要找到写速率大于读速率的最大累积差值。
首先计算平均写速率:100个周期写10个 => 平均每10个周期写1个。读速率:每10个周期读1个。平均读写速率相同,但写是突发性的,所以需要深度来吸收突发。
写侧:每100个周期内写10个,但具体写时刻不确定,最坏情况是这10个写集中发生在连续的10个周期内(比如前10个周期全部写完),然后在剩下的90个周期内没有写。读侧每10个周期读1个,即读使能均匀每10周期一次。
最坏情况:考虑写突发的开始时刻。假设在t=0时刻开始,写使能在连续10个周期内写入10个数据。同时读侧也在进行,读每10周期一次。那么从t=0开始,前10个周期内写入了10个,读了多少?读在t=0时刻是否读?通常假设读使能也是周期性的,但起始相位不确定。为了最坏情况,我们考虑读使能可能避开写高峰,即读可能发生在写之后,导致FIFO深度需求更大。
通常最小深度计算:考虑最大未读取数据量 = 写突发长度 - 在写突发期间读出的数据量。写突发长度=10个周期内写10个数据(连续)。在这10个周期内,读侧每10个周期读1个,所以读速率是1/10 per cycle。在10个周期内,最多读出的数据量取决于读使能是否发生。由于读使能每10个周期一次,在10个周期内最多读1个(如果读使能发生在该10个周期内)。最坏情况是读使能在突发开始前刚读过,那么整个突发期间没有读,因此需要深度10。但另一种情况:如果读使能在突发期间发生一次,则深度需要9?但考虑更长期:写突发结束后,后续还有读。实际上,由于平均速率相等,FIFO最终会排空。但我们需要的是FIFO深度以防溢出。考虑写侧每100个周期写10个,而读侧每10个周期读1个,即每100个周期读10个,平均速率相等。但写突发的10个数据在10个周期内写入,而读需要100个周期才能读完这10个数据(因为每10周期读1个)。所以,在写突发开始的瞬间,FIFO内数据会迅速增加,然后逐渐被读出。最大深度出现在写突发结束时刻:即10个数据全部写入,此时读了多少?取决于读使能的位置。最坏情况是读使能刚好错过写突发,即读使能在写突发开始前刚读了一个,那么接下来的10个周期内没有读,导致10个数据全部堆积,深度为10。如果读使能在写突发期间发生一次,那么深度为9。但更坏的情况是:读使能可能发生在写突发的第一个周期开始时刻?实际上,如果读使能与写使能同时发生,读优先?通常FIFO设计中,读和写可以在同一时钟沿,但通常我们考虑同时读写时,读先读旧数据,写写新数据,深度不变。但为了最坏情况,我们假设读使能发生在写使能之后,这样读不到刚写的数据。所以最大深度是10。
然而,还有一个细节:题目说“每100个时钟周期会写10个”,“具体哪个时刻写入不确定”,这意味着写使能可能不是连续的10个周期,而是分散在100个周期内。但最坏情况就是连续10个周期写。所以最小深度至少为10。
但需要验证:是否可能因为读使能周期与写重叠导致更坏情况?考虑读使能每10个周期一次,周期固定。如果写突发发生在读使能间隙的最远端,即两个读使能之间的中间位置,那么写突发期间没有读,深度达到10。如果写突发跨越两个读使能,可能深度更小。所以最坏情况就是10。
但还有一种情况:因为写突发可能出现在100个周期内的任意位置,且读使能也是周期性的,但相位不确定。所以最坏深度为10。
但似乎过于简单?常见同步FIFO深度计算中,如果读写速率相等但突发不等,深度至少为突发长度减去突发期间读出的数量。这里突发长度10,读速率1/10 per cycle,突发期间最多读1个,所以深度9或10。通常取10。
但也有答案可能考虑更复杂:因为写侧每100个周期写10个,但写使能分布可能不是连续的?最坏连续10个周期写,深度10。但有些题目会考虑“背靠背”写:即考虑两个100周期窗口的边界,写使能可能在前一个窗口末尾和后一个窗口开头连续写,形成更大的突发?因为每100个周期写10个,但假如第一个100周期的最后几个周期写了几个,第二个100周期的开始又写了几个,就形成了连续超过10个的写?注意:题目说“每100个时钟周期会写10个”,通常理解为每100个周期内恰好写10个,但分布不确定。但两个连续的100周期窗口,第一个窗口的最后时刻和第二个窗口的开始时刻可能相邻,形成连续写。比如第一个100周期内,前90个周期没有写,最后10个周期写了10个;第二个100周期内,前10个周期又写了10个,这样连续20个周期写了20个数据。这样,写突发长度可达20?需要仔细分析。
在同步FIFO深度计算中,常见情形:写使能每N个周期写M个,但M个可能分布在任意位置。那么最坏情况下,写使能可能在相邻的两个窗口边界处连续,形成2M个背靠背写。例如,写每100个周期写10个,那么两个连续窗口,第一个窗口的最后10个周期写10个,第二个窗口的前10个周期写10个,形成20个周期连续写20个数据。读侧每
涉及知识点
- 时钟