[Verilog HDL] verilog中的毛刺产生

[复制链接]
2682|0
 楼主| gaochy1126 发表于 2023-2-18 14:55 | 显示全部楼层 |阅读模式
verilog中,产生毛刺是一个常见的现象。目前发现的一种毛刺产生的原因,是由于上升沿与下降沿的与操作,使得系统产生了毛刺,如下:

reg [3:0]acount

reg sclk;

always(posedge clk)

if(!rst_n )

begin

        acount <= 4'b0;

        sclk <= 1'b0;

end

if(acount == 4'd10)

begin

        sclk <= ~sclk;

        acount <= 4'b0;

end

else

        acount <= acount + 1'b1;

reg flag;

reg [3:0]acount1;

always(posege sclk or negedfe rst)

if(!rst)

        begin

                flag <= 1'b0;

                acount1 <= 4'b0;

        end

else if(acount1 < 6)

begin

        flag <= 1'b1;

        acount1 <= acount1 + 1'b1;

end

else

        flag <= 1'b0;

wire Aclk;

assign Aclk = flag & SCLK;

此代码中 SCLK的上升沿与flag的下降沿想与会出现毛刺现象;

解决此问题的办法就是根据情况,将两个信号中的一个向后打一个节拍,具体的实现方法就是就是定义一个中间寄存器。

如下

reg flag1;

always@(posedge clk or negedge rst)

if(..)

else

flag1 <= flag

assign Aclk <= flag1 & SCLK;
————————————————
原文链接:https://blog.csdn.net/ZZ2588/article/details/119751479

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

本版积分规则

个人签名:这个社会混好的两种人:一是有权有势,二是没脸没皮的。

1205

主题

11937

帖子

26

粉丝
快速回复 在线客服 返回列表 返回顶部