在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2956|回复: 7

[求助] 关于异步FIFO的异步比较模块!

[复制链接]
发表于 2013-1-31 15:17:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
module async_cmp (aempty_n, afull_n, wptr, rptr, wrst_n);
parameter ADDRSIZE = 4;
parameter N = ADDRSIZE-1;
output aempty_n, afull_n;
input [N:0] wptr, rptr;
input wrst_n;
reg direction;
wire high = 1'b1;
wire dirset_n = ~( (wptr[N]^rptr[N-1]) & ~(wptr[N-1]^rptr[N]));
wire dirclr_n = ~((~(wptr[N]^rptr[N-1]) & (wptr[N-1]^rptr[N])) |
~wrst_n);
always @(posedge high or negedge dirset_n or negedge dirclr_n)
if (!dirclr_n) direction <= 1'b0;
else if (!dirset_n) direction <= 1'b1;
else direction <= high;
//always @(negedge dirset_n or negedge dirclr_n)
//if (!dirclr_n) direction <= 1'b0;
//else direction <= 1'b1;
assign aempty_n = ~((wptr == rptr) && !direction);
assign afull_n = ~((wptr == rptr) && direction);
endmodule

这个模块是sunburst的文档里面介绍的异步FIFO里面的比较模块不清楚里面定义的high是干什么用的,求斑竹帮帮忙给解答一下呀。。
发表于 2013-1-31 22:47:38 | 显示全部楼层
不错,挺好的
 楼主| 发表于 2013-2-2 16:25:26 | 显示全部楼层
回复 2# Majinming


    挺好的?
发表于 2013-2-2 17:07:05 | 显示全部楼层
作为一个通用设计的编程风格,有些人喜欢将程序内部使用的常数值信号定义为wire信号,这样在特殊场景或移植代码上会有很多方便,也增加代码可读性,比如把1'b1定义成 high one 之类的
 楼主| 发表于 2013-2-2 18:06:14 | 显示全部楼层
回复 4# lordlion


    else if (!dirset_n) direction <= 1'b1;
else direction <= high;


这句用到high了啊   不是一样吗  两个结果
发表于 2013-2-2 20:23:28 | 显示全部楼层
回复 5# HADIST


   呵呵,这就是我说的编程风格和可移植性,假如这个设计需要移植,移植后又要求high信号不是1'b1这样的强1,可以只通过修改wire high的值来简单替换,比如一个设计里有10000个点在某种状态赋1'b1,但我的设计移植后又要求这10000个状态赋值是weak1,这时候用high这种模式就方便很多,否则就要改10000个点了,这与C中的typedef是类似的,写法不一样罢了
 楼主| 发表于 2013-2-3 11:16:23 | 显示全部楼层
回复 6# lordlion


    差不多明白了,谢谢啊
发表于 2017-7-11 11:41:49 | 显示全部楼层
本帖最后由 xiangchengsun 于 2017-7-11 15:15 编辑

wire dirclr_n = ~( (~(wptr[N]^rptr[N-1]) & (wptr[N-1]^rptr[N])) | ~wrst_n);
同时复位时,由于wrst_n为0,dirclr_n为0,dirset_n计算可知为1
direction触发的条件为always@(posedge high or negedge dirset_n or negedge dirclr_n)
当negedge dirset_n 或者 negedge dirclr_n条件满足时触发direction更新,否则,由于posedge high永远满足,direction为high,即为1。high的作用:防止direction上电时处于不定态(假如此时还没有复位)。



您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-19 01:21 , Processed in 0.021912 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表