背景:
在以太网报文处理过程中,需要对报文做业务处理,然后报文缓存。
缓存的方案有多种,如下:
方案1:报文信息用FIFO方式缓存,报文数据按照整包用RAM缓存;
方案2:报文信息用FIFO方式缓存,报文数据按最大256字节信元用RAM缓存;
方案3:报文信息用FIFO方式缓存,报文数据按最大256字节信元用DDR缓存;
方案4:报文信息用FIFO方式缓存,报文数据按最大256字节信元用QDR缓存。
等等。
我们主要讨论方案1和方案2,如下。
方案1的资源讨论:
设计要求:a. RAM数据位宽128bit;b. FIFO数据位宽40bit;c. 最大报文长度16384字节; d. 最小报文长度64字节。
1.1 计算最大的RAM深度
根据a、b、c三点,一个最大报文需要占用RAM 1024个地址资源,要是背靠背再来一个最大报文,还得再需要RAM 1024个地址资源。报文信息在整包写入到RAM后写入信息FIFO。从这一方面考虑RAM的深度为2*1024=2^11,FIFO的深度是2。
1.2 计算最大的FIFO深度
根据d点,最小报文长度是64字节,需要占用RAM 8个地址资源;结合1.1 占用完2*1024=2^11个RAM地址资源需要256个信息。从这一方面FIFO的深度是256=2^8。
结合以上两点考虑,既要满足突发最大报文长度,也满足最小报文处理的能力。因此FIFO深度是256=2^8,RAM深度是2*1024=2^11。
方案2的资源讨论:
设计要求:a. RAM数据位宽32bit;b. FIFO数据位宽40bit;c. 信元最大长度256字节;d. 最大报文长度16384字节; e. 最小报文长度64字节。
2.1 计算最大的RAM深度
根据a、b、c三点,一个最大报文以256字节可以切成64个信元,因此需要占用RAM 4096个地址资源,需要占用FIFO 64个深度资源;要是背靠背再来一个最大报文,还得再需要RAM 4096个地址资源,还得需要占用FIFO 64个深度资源。从这一方面考虑RAM的深度为2*4096=2^13,FIFO的深度是128=2^8。
2.2 计算最大的FIFO深度
根据d点,最小报文长度是64字节,需要占用RAM 8个地址资源;结合2.1 占用完2*4096=2^13个RAM地址资源需要1024个信息。从这一方面FIFO的深度是256=2^8。
结合以上两点考虑,既要满足突发最大报文长度,也满足最小报文处理的能力。因此FIFO深度是1024=2^10,RAM深度是2*4096=2^13。
方案3和方案4是为了缓存大量的报文,这需要外挂存储器件。常用的器件是DDR、QDR,报文缓存到这类器件需要“地址分配管理”模块参与。通过地址分配,通过总线将报文缓存到器件中。后级处理模块通过总线将报文读出,并释放分配的地址。
关于方案3和方案4另行详细讨论。
若有不正确的地方,欢迎大家指正。