上一篇文章介绍了RAM的基本特性(FPGA设计基础——RAM的应用(一)),本文接着介绍RAM的一些应用和注意事项。
(续)3、RAM的使用场景
场景1:表项
某设计输入的数据带一个8bit的user_id,指示该数据属于哪一个user,现在要求统计每个user收到的数据的个数,统计到1024*1024*1024即可,超过了统计计数器的最大值的话,可以翻转。
简单粗暴的方法,定义256个32bit的计数器,来一个数据后,先看user_id是多少,然后相应的计数器加1。如果user_id的不是8bit,是12bit,支持4K个user_id了?那这个方法可能就不好用了。即使是采用数组的方式,那也需要4K*30bit = 120K的reg,太浪费资源。
如下图所示,可以采用RAM来存放各个user_id的计数值,用user_id作为ram的地址,将各个user_id对应的计数值写入到RAM对应的地址中。每来一个数据,根据该数据的user_id读取ram中的值,然后将该值加1后再写回ram中。