3793|5

7

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

Verilog语言BUG求助,谢谢! [复制链接]

Verilog语言BUG求助,谢谢!

现在碰到一个问题,对于以下代码
always(@posedge clk)
begin
if(a==1'b1 && cnt<5'd18)

cnt<=cnt+1'b1;

else if(a==1'b1 && cnt==5'd18)
b<=1'b1;

else if(a==1'b0 && cnt>5'd0)
cnt<=cnt-1'b1;
else if(a==1'b0 && cnt==5'd0)
b<=1'b0;
else
begin
cnt<=5'd0;
b<=1'b0;
end
end
理论上来说,b都会在a延时18clk后发生变化,但是在实际情况下,存在某些时刻b会和a几乎同时跳变为0,而cnt却在接下来的18个clk发生变化。请问这究竟是什么原因导致的,谢谢!


最新回复

整理了下 always(@posedge clk) begin     if(a==1'b1 && cnt5'd0)         cnt  详情 回复 发表于 2016-9-1 20:13
点赞 关注
 

回复
举报

530

帖子

4

TA的资源

一粒金砂(高级)

沙发
 
提供的信息太少,请说明a,b的信号属性,输入或者输出。  cnt的信号属性。
 
 

回复

1173

帖子

3

TA的资源

五彩晶圆(初级)

板凳
 
你这个逻辑不严谨。分析一下。
1、当前时刻如果 a= 1,cnt=0;如果下一个时钟来,a=0了。那么这个时候符合 if(a==1'b0 && cnt==5'd0)
所以会发生b=0;而cnt需要等待下次 a=1 才会加,估计就是你18个周期后a才被赋值1。这种情况就出现你这样的问题。
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

4
 
传媒学子 发表于 2016-9-1 11:23
提供的信息太少,请说明a,b的信号属性,输入或者输出。  cnt的信号属性。

a是信号输入,a为周期3KHZ,脉宽320us的波形,b是信号输出。cnt 是程序中定义的5位寄存器
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(中级)

5
 
输入信号有做过同步处理吗,不同时钟域的东西还是同步下吧
 
 
 

回复

1950

帖子

4

TA的资源

版主

6
 
整理了下
always(@posedge clk)
begin
    if(a==1'b1 && cnt<5'd18)
        cnt<=cnt+1'b1;
    else if(a==1'b1 && cnt==5'd18)
        b<=1'b1;
    else if(a==1'b0 && cnt>5'd0)
        cnt<=cnt-1'b1;
    else if(a==1'b0 && cnt==5'd0)
        b<=1'b0;
    else begin
        cnt<=5'd0;
        b<=1'b0;
    end
end

a等于1,cnt自加到18时,b 置为 1
a等于0,cnt自减到0是,b 置为 0

cnt<5'd18
cnt>5'd0
这两个写法,改了吧

另外,这代码我看了8分钟
硬件代码,不是这样的,的闭着眼都能确保 无误得过。
就得这么简单

个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表