2938|5

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

Verilog菜鸟请教各位大侠:为什么仿真的时候+1加到一个值后会突然乱掉 [复制链接]

各位大侠,问个关于Verilog的问题,为什么按照下面的程序
always @(negedge RST or posedge CLK or posedge rise or posedge fall)
        begin
        if((RST == 1'b0)||(rise == 1'b1)||(fall == 1'b1))
                begin
                watchdog_timer_count <= 9'b0_0000_0000;
                end
        else if(!watchdog_timer_done)
                begin
                watchdog_timer_count <= watchdog_timer_count +1;
                end
        end
assign watchdog_timer_done = (watchdog_timer_count == WATCHDOG -1) ? 1'b1 : 1'b0;

仿真结果到317突然就变到320了。其中WATCHDOG = 320。仿真的时候和这个有关的线 rise fall rst 都没有变动。。
仿真的时候用的是十进制。。watchdog_timer_done也都是低的。
看到这个仿真结果快吐血了。

对了,在317 到 320 的之间很有短时间的变成 311 310 300,但是时间极短。

各位大侠帮帮忙~

最新回复

low
谢谢了 。。突然发现出什么问题了。。。我把进制定错了。定成8进制了。谢谢麻烦了!  详情 回复 发表于 2009-12-25 12:56
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
先友情帮顶下
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
一般在敏感列表里面只写 posedge clock,或者再加上异步的reset。

我觉得照你的意思rise和fall应该是一个同步信号。如果这两个信号中一个为低,一个有下降沿则会增加计数。

always @ (posedge CLK or negedge RST)
    if((RST == 1'b0)
        watchdog_timer_counter <= 9'h0;
    else if ( ( rise == 1'b1 ) || (fall == 1'b1) )
        watchdog_timer_counter <= 9'h0;
    else if(!watchdog_timer_done)
        watchdog_timer_count <= watchdog_timer_count +1;

assign watchdog_timer_done = (watchdog_timer_count == WATCHDOG -1) ? 1'b1 : 1'b0;
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 1 楼 kyzf 的回复:
先友情帮顶下


谢谢帮顶!
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 2 楼 js_xxh 的回复:
一般在敏感列表里面只写 posedge clock,或者再加上异步的reset。

我觉得照你的意思rise和fall应该是一个同步信号。如果这两个信号中一个为低,一个有下降沿则会增加计数。


照这样改了,但是还是那样。。先谢谢大侠了。
那个里面仿真的时候 fall rise 一直是低,RST 也一直是1,没有跳变。但是突然间就计数就不对了。。(从317突然跳到320了)是时序仿真。
然后看那个watchdog_timer_done也一直低。如果计数对的话到319就要跳变了。。但是这样以来直接给路过了。。。。杯具。。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 2 楼 js_xxh 的回复:
一般在敏感列表里面只写 posedge clock,或者再加上异步的reset。

我觉得照你的意思rise和fall应该是一个同步信号。如果这两个信号中一个为低,一个有下降沿则会增加计数。

always @ (posedge CLK or negedge RST)
? ? if((RST == 1'b0)
? ? ? ? watchdog_timer_counter <= 9'h0;
? ? else if ( ( rise == 1'b1 ) || (fall == 1'b1) )
? ? ? ? watchdog_timer_counter <= 9'h0;
? ? else if(!watchdog_timer_done)
? ? ? ? watchdog_timer_count <= watchdog_timer_count +1;

assign watchdog_timer_done = (watchdog_timer_count == WATCHDOG -1) ? 1'b1 : 1'b0;


谢谢了 。。突然发现出什么问题了。。。我把进制定错了。定成8进制了。谢谢麻烦了!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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