两种写发,感觉应该更稳定,却出现了问题

2020-02-06 12:30发布

本帖最后由 z894811350 于 2015-12-1 13:39 编辑

第一种
reg     aa;
wire    aa_rising;
wire    aa_falling;
always @(posedge sys_clk)
begin
    if(rst_l==1'b0)
         begin
             aa_r<=1'b0;
         end
         else if(bb==1'b0)
             aa_r<=aa;
end
assign  aa_rising =(aa_r==1'b0 && (aa==1'b1))?1'b1:1'b0;
assign  aa_falling=(aa_r==1'b1 && (aa==1'b0))?1'b1:1'b0;
图像正常
第二种
reg     [3:0]    aa;
wire    aa_rising;
wire    aa_falling;
always @(posedge sys_clk)
begin
    if(rst_l==1'b0)
         begin
             aa_r<=4'd0;
         end
         else if(bb==1'b0)
             aa_r[3:0]<={aa[2:0],aa};
end
assign  aa_rising =(aa_r==4'b0011)?1'b1:1'b0;
assign  aa_falling=(aa_r==4'b1100)?1'b1:1'b0;
图像乱了
时钟是125M
哪位帮助解释一下这两种写法什么情况会出现问题
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
ococ
1楼-- · 2020-02-06 17:41
第二种判断上升沿下降沿的条件就写错了
z894811350
2楼-- · 2020-02-06 20:45
ococ 发表于 2015-12-1 14:35
第二种判断上升沿下降沿的条件就写错了

aa_r[3:0]<={aa_r[2:0],aa}
我抄错了!
这回呢
玄德
3楼-- · 2020-02-06 21:55

没仔细看逻辑。

不过,提醒LZ注意运算符的优先级。


ococ
4楼-- · 2020-02-07 02:15
z894811350 发表于 2015-12-1 15:26
aa_r[3:0]

assign  aa_rising =(aa_r==4'b0001)?1'b1:1'b0;
assign  aa_falling=(aa_r==4'b1110)?1'b1:1'b0;

这样才跟第一种是一样的吧
z894811350
5楼-- · 2020-02-07 07:35
 精彩回答 2  元偷偷看……
feihufuture
6楼-- · 2020-02-07 09:52
z894811350 发表于 2015-12-2 10:44
我是为了抓取到稳定的信号,
所以做了移位,本以为第二种会稳定,结果乱了
现在我用下面这种就OK了

1 125m时钟不低了,要注意了
2 注意建立时间和保持时间的时序问题

一周热门 更多>