推荐答案
测试一下
题目
模块A发出的数据经过6个周期到达FIFO,预满信号经过12个周期返回A模块;FIFO读出的数据经过10个周期达到B模块。A模块每个周期发出一个数据,B模块每3个周期发出一个数据。求FIFO的预满深度1和最小深度2
参考答案与知识点
参考答案
我们分析这道题:模块A每个周期发一个数据,但数据经过6个周期到达FIFO;预满信号从FIFO返回A需要12个周期;FIFO读出数据经过10个周期到达B模块;B模块每3个周期读一个数据。求FIFO的预满深度和最小深度。
注意:“预满深度”和“最小深度”可能是指两个不同的阈值。通常预满深度是指当FIFO中的数据量达到某个值时,提前发出预满信号给A,让A停止发送。因为信号有延迟,需要考虑反馈延迟。最小深度是指FIFO在不发生溢出或空的情况下所需的最小容量。
解析:首先,数据从A发出到FIFO写入需要6个周期,预满信号从FIFO返回到A需要12个周期。这意味着从A决定停止发送到实际写入停止之间有6个周期的数据在途,加上预满信号返回的12个周期,总共需要提前预满的深度来容纳这些数据。
另外,读出侧:B每3个周期读一个数据,读出数据经过10个周期到达B。这10个周期是读出后的传输延迟,不影响FIFO内的读写速率,但影响B的接收时序。通常,最小深度计算取决于写速率和读速率以及背压延迟。
写速率:1数据/周期;读速率:1数据/3周期。所以写比读快,需要FIFO缓冲。但因为有反馈(预满信号),当FIFO达到预满深度时,A停止发送,直到预满信号消失。我们需要计算在最坏情况下,FIFO的最大占用,即最小深度必须大于等于这个最大占用。而预满深度则是触发反压的阈值。
常见做法:考虑最坏情况下的数据堆积。由于写快于读,FIFO会逐渐变满。当FIFO达到预满深度时,发出预满信号给A,经过12个周期到达A,A立即停止发送。但A停止后,仍有在途的6个周期数据(从A发出到FIFO)需要写入,所以FIFO还会增加6个数据。因此,预满深度加上这6个数据不能超过FIFO的总深度?实际上预满深度是一个阈值,当FIFO中数据量达到该值时,开始反压,但A停止后还会增加最多6个,所以FIFO的最大占用量 = 预满深度 + 6。这个最大占用量必须小于等于FIFO的最小深度,否则会溢出。同时,为了保证不空,还要考虑读侧?但最小深度通常指为了不溢出所需的最小容量。
另外,还要考虑预满信号释放的条件。当FIFO中的数据量下降到某个值(预空?)时,预满信号撤销,然后A重新开始发送。但题目只问了预满深度和最小深度,没有说预空。可能预满深度是设计者设定的,需要满足条件:预满深度 + 在途数据 ≤ 最小深度,且预满深度需要足够大以保证在反馈延迟期间B能够读出足够数据使得FIFO不会溢出?更常见的解法是:计算最大数据量。因为写快于读,如果没有反馈,FIFO会无限增长。有了反馈,系统稳定时,平均写速率等于读速率。但需要计算FIFO容量。
一种典型解法:写速率1,读速率1/3,净增加2/3 per cycle。反馈延迟为6+12=18个周期(从A发出数据到预满信号返回A的时间?实际上,数据从A到FIFO是6个周期,预满信号从FIFO到A是12个周期,所以从A发出数据到A收到预满信号共18个周期。但A在发出数据后,经过6个周期数据写入,然后FIFO检查是否达到预满,再经过12个周期信号返回。所以从A发出数据到接收到反馈,共18个周期。在这18个周期内,A持续发送数据,共18个数据。这些数据在FIFO中累积。同时,B也在读取。在这18个周期内,B读了多少?B每3周期读一个,18周期读6个。所以净增加18-6=12个数据。因此,预满深度至少为12?但预满深度是触发反压的阈值,当FIFO中达到这个值时发出反压。上述计算表明,如果预满深度设为0,那么A会立即收到反压?但实际有延迟,所以需要设置预满深度使得在反馈到达时FIFO不会溢出。更准确地说,设预满深度为P,当FIFO中数据量达到P时,发出预满信号。但发出信号时,还有在途的数据(从A到FIFO的6个周期数据)以及之后A停止前发出的数据?实际上,信号发出后,经过12个周期到达A,A停止,但A停止前仍在发送,这12个周期内A发送了12个数据?不对,因为信号是即时的?标准分析:考虑一个时间点,FIFO中已有P个数据,此时发出预满信号。信号传输需要12个周期,这12个周期内A继续发送数据(因为它还没收到信号),所以会有12个新数据写入?但注意,数据从A到FIFO需要6个周期,所以当预满信号从FIFO发出时,A之前发出的数据还在路上?需要仔细分析时序。
更常见的计算方法:假设FIFO深度为D,预满阈值为TH。当FIFO中数据量达到TH时,产生预满信号,经过12个周期到达A,A立即停止发送。但在这12个周期内,A仍在发送,每个周期一个数据,但每个数据需要6个周期才到达FIFO,所以实际上,在这12个周期内,A发送的数据将在后续6个周期陆续到达FIFO,因此,从预满信号产生开始,最多还有12+6=18个数据会进入FIFO(因为信号到达A时,A停止,但已经发出的数据还会在6个周期内陆续到达)。但更精确:设时间t0时FIFO中数据量达到TH,产生预满信号。此时,在t0之前A发送的数据中,有一部分还在路上。考虑t0之后的12个周期,A继续发送12个数据(t0+1到t0+12),这些数据在6个周期后写入FIFO,
涉及知识点
- 时序