在模块划分时,我们通常会考虑解耦合,即尽量减少模块间的交互,让模块间的接口尽量简单。
在包处理过程中,因为数据处理的需求,需要读取某些信息(配置信息,状态信息),如图中读取block_b中的ram,根据读返回的结果后对数据包进行处理。为了解耦合,我们可以采用一个fifo(pkt_fifo)存储与ram请求(ram_req)无关的信息(数据包以及数据包的相关描述信息),等待response返回后,再从pkt_fifo读取相应的数据包信息对,从而对数据包进行处理。
如果不采用pkt_fifo存储包信息,那么会怎么设计呢?如非解耦设计图所示,不需要额外的fifo,将包信息(pkt_data)与访问请求(ram_req)一同传递给block_b模块,再由block_b将包信息(pkt_data)和访问响应(ram_response)一同送到block_a模块。
案例中的解耦合设计还有一个优点:节约资源和功耗。如果从发起ram_req到返回ram_reponse的流水比较长,例如需要几十甚至上百个时钟周期,在非解耦设计中,就需要使用寄存器对pkt_data进行打拍,而解耦设计中采用fifo存储pkt_data,虽然从存储bit角度计算两种设计需要的bit位几乎相同,但是fifo(用ram实现)面积更小,功耗更低。
作者: IC小鸽
文章来源:IC的世界
推荐阅读
更多IC设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。