工程中FIFO空,满,将空,将满标志使用
2014-02-10 21:30
148 查看
最近跳槽到了一家公司做硬件防火墙,第一次真真正正的用Verilog做工程,学到了很多东西,尤其对FIFO的empty,full,aempty,afull感触很深,使用好了,可以提高系统性能,使用不当,会造成性能下降,甚至会出现FIFO写、读反转,造成空、满标志同时拉起,系统挂死。
防火墙处理的对象是报文,下面的例子就直接取的项目中的实际情况。
一般设置afull为能再容纳一个完整的报文且FIFO不会满,如32*144的字节FIFO,一个报文为6PAT,afull最好设置为24或者更低,这样当看到afull拉起时,并反压上级模块时,可以在写进去一个完整的报文,且不会反转,
empty标志最好在状态机或流水线的第一级就判断,如不满足,需等待fifo非空,不要等状态机跳转到了某一状态后再判断,此时如果为空,会造成逻辑错误。如在BM地址管理中,如果该报文需要申请BM地址,就必须判断bm地址非空,否则就必须在idle状态等待,如果跳转到了这一状态,发现为空,选择不读,此时rdata为上次读取数据,会造成数据被覆盖,出现错误。
此外,full,aempty在项目很少用,full是尽力避免的情况,aempty有可能会造成fifo中数据读不完。
防火墙处理的对象是报文,下面的例子就直接取的项目中的实际情况。
一般设置afull为能再容纳一个完整的报文且FIFO不会满,如32*144的字节FIFO,一个报文为6PAT,afull最好设置为24或者更低,这样当看到afull拉起时,并反压上级模块时,可以在写进去一个完整的报文,且不会反转,
empty标志最好在状态机或流水线的第一级就判断,如不满足,需等待fifo非空,不要等状态机跳转到了某一状态后再判断,此时如果为空,会造成逻辑错误。如在BM地址管理中,如果该报文需要申请BM地址,就必须判断bm地址非空,否则就必须在idle状态等待,如果跳转到了这一状态,发现为空,选择不读,此时rdata为上次读取数据,会造成数据被覆盖,出现错误。
此外,full,aempty在项目很少用,full是尽力避免的情况,aempty有可能会造成fifo中数据读不完。
相关文章推荐
- linux—FIFO的使用与非阻塞标志(O_NONBLOCK)的影响
- Android中使用自身携带的Junit新建一个测试工程
- [ActiveX]使用VS2010创建MFC ActiveX工程项目
- XcodeProj,使用Ruby更改工程文件
- Angular2-使用Angular CLI快速搭建工程(一)
- 在framework或子工程中使用xib
- cocos2d-x工程中,让xcode4.6能够使用C++11标准库
- 使用Xcode修改iOS项目工程名和路径名
- Strus 2的新表单标志的使用(Struts 2系列之十二)
- Iptables下TCP标志tcp-flags匹配模块使用
- eclipse创建maven工程没有src/main/resources文件夹和web.xml使用3.1的dtd时工程有错误的问题
- 在java maven工程中,使用tomcat插件启动web应用
- 使用myeclipse的反向工程来生成相应的hibernate映射文件和POJO类
- 使用modelsim直接仿真IP(FIFO)
- iOS开发- 使用fui(Find Unused Imports)扫描工程中不用的类
- 使用Maven Archetype生成工程报错的解决
- quick 中使用命令创建工程(没有验证) (windows 7)
- 【Sets】使用Google Guava工程中Sets工具包,实现集合的并集/交集/补集/差集
- MFC ActiveX基础1:使用VS2010创建MFC ActiveX工程项目
- 使用eclipse开发ndk之:导入现有的ndk工程(NDK例子-Hello-jni导入到eclipse)(转载)