关于DWC OTG2.0中PFC的理解

在DWC OTG2.0 Controller手册中,有一章节专门介绍了PFC,Packet FIFO Controller。其内部分为共享FIFO(shared FIFO)以及专用FIFO(Dedicated FIFO),并针对dev和host两种模式,并且还要对周期传输数据的FIFO和非周期数据传输的FIFO进行了不同的解读,还是挺复杂的。以下为总结。

复杂的原因无外乎要功耗低、要面积开销小。

首先,PFC模块针对的是收发数据的FIFO。当otg设置为host模式,仅有发送out数据的时候才能使用它,这里的host out数据包括四种传输形式的传输:bulk out、control out、intr out以及isoc out传输。当otg设置为dev模式时,dev模式永远是个被动的模式,只有主机发起IN操作时,例如bulk in,dev才会将数据搬到FIFO中发送出去(当主机发起out操作时,dev只是接收)。

这些FIFO都是store-and-forward,即发送数据前必须保证所有数据已经在FIFO里了,MAC层才会去取数据。不能边存边取。有一种情况比较特殊,对于专用FIFO手册里说对于高带宽的周期IN端点,在保证FIFO中至少有一个包的数据时,可以发送数据,此时可以边发送第一个数据包,边存储第二个数据包,可以不完全等待数据全部存完再发送。这里说的”高带宽的周期IN端点“,没有具体说明是什么,但根据下图中TxFNum的定义可知,可以将intr in端点作为大容量。


 其次,对周期传输数据的FIFO,也就是intr和isoc传输,其dev和host下为:

dev:

对于shared FIFO,每个周期端点都会有一个FIFO,并且其在生成RTL的时候已经确定好了(也就是在新思的coreConsult中进行配置,具体参数为OTG_NUM_PERIO_EPS。注意,这个参数只在shared FIFO中使用,当使用专用FIFO时,即OTG_EN_DED_TX_FIFO=1时,这个参数无效,为0)。当使用shared FIFO发送数据时,具体使用多少个,取决于每个端点的TxFNum参数。例如,当端点1有很多数据要发送,则可以在编程的时候,对DIEPCTL1.TxFNum进行设置。本来一个周期IN端点对应一个FIFO,但是端点1把其它周期IN端点的FIFO也给用了。

 另外需注意,dev模式下第一个周期FIFO复用了host模式下的周期FIFO。下图为shared FIFO的示意图。

对于Dedicated FIFO,在dev模式下,FIFO的数量取决于参数OTG_NUM_IN_EPS,该参数说明最大的专用FIFO数量是多少个。在专用FIFO模式下,没有周期FIFO和非周期FIFO之分,使能的in端点对应一个指定的FIFO,这里的意思应该是,当专用FIFO下,TxFNum=1时,每个in端点只用自己对应的FIFO,不用别人的;且需要在编程的时候设置FIFO深度(当时看例程的时候没看懂,现在知道为什么要设置了,但是不知道设置多少深度合适)。

这里需要注意,在专用FIFO模式下,假设要传输很多数据,FIFO不够用怎么办?答案是可以跟shared FIFO模式一样,设置TxFNum,把别的端点的FIFO拿来用。

当TxFNum=0时,无论是shared FIFO模式还是专用FIFO模式,IN端点的传输都是用公共的Non-period Tx FIFO进行数据发送。

所以至今没搞明白,shared FIFO和专用FIFO有何本质区别。

下图为专用FIFO示意图。

 另外需注意,dev模式下与host的FIFO也有复用的情况。

host:

对于host来说,shared FIFO情况较为简单,只需要一个周期FIFO,便可以存储所有收发给周期端点的数据。且该FIFO只需配置一个周期request队列。

手册中没写host的dedicated FIFO。


再次,对非周期传输数据的FIFO,也就是control和bulk传输,其dev和host下为:

对于shared FIFO来说,dev和host用一个非周期FIFO来存取数据,FIFO旁挂载一个request队列。

对于dedicated FIFO来说,host模式下与shared FIFO一致;在dev模式下,无周期和非周期之分,FIFO的数量取决于参数OTG_NUM_IN_EPS,使能的in端点对应一个指定的FIFO。


最后,对于接收FIFO,一个接收FIFO存储所有的dev out端点的数据,或者存储所有的host in传输的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值