搜索
bottom↓
回复: 14

请教关于verilog中if-else的行为问题

[复制链接]

出0入0汤圆

发表于 2015-8-27 11:11:11 | 显示全部楼层 |阅读模式
现在程序中有如下语句

input test;
reg timer[15:0];

always @ (posedge clk)
begin
        if(!test)
                timer <= timer + 1'b1;
        else
                timer <= 1'b0;
end

在调试中发现,当test变为低电平的时候,timer可以正确累加,但是test变高之后timer并不会清零
也就是说else没有被执行
会导致test的低电平时间被累加
把test加到事件列表中没有作用
但是以下程序

always @ (posedge timer[9] or posedge RST)
begin
        if(timer[9])
                Out <= 1'b1;
        else
                Out <= 1'b0;
end

却可以正常地输出1和0
请问是为什么?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2015-8-27 11:23:31 | 显示全部楼层
笔误吧
timer <= 1'b0;

出0入0汤圆

发表于 2015-8-27 11:24:04 | 显示全部楼层
timer <= 16'd0;

出0入0汤圆

发表于 2015-8-27 11:42:05 | 显示全部楼层
好像是你的触发条件是上升沿有效

出0入0汤圆

发表于 2015-8-27 11:57:34 | 显示全部楼层
应该等到下一个触发条件到来的时候就会清零了

出0入0汤圆

发表于 2015-8-27 12:26:28 | 显示全部楼层
timer <=16'd0;

出0入0汤圆

 楼主| 发表于 2015-8-27 13:44:49 | 显示全部楼层

似乎编译器自己会处理位数……

出0入0汤圆

 楼主| 发表于 2015-8-27 13:47:19 | 显示全部楼层

我试过1'd0和16'd0,似乎并没有什么影响,依然不会自动清零

出0入0汤圆

 楼主| 发表于 2015-8-27 13:50:26 | 显示全部楼层
小平别飞 发表于 2015-8-27 11:57
应该等到下一个触发条件到来的时候就会清零了

50MHz的CLK下,我给test一个脉宽1us,周期1Hz的低电平脉冲,等一段时间之后仍然会导致Out变高

else的部分没有被执行

出0入17汤圆

发表于 2015-8-27 13:59:14 | 显示全部楼层
加长高电平时间看看

出0入0汤圆

 楼主| 发表于 2015-8-27 14:06:02 | 显示全部楼层
zjykwym 发表于 2015-8-27 13:59
加长高电平时间看看

CLK的频率远高于test的频率

出0入17汤圆

发表于 2015-8-27 15:03:08 | 显示全部楼层
ccen12345 发表于 2015-8-27 14:06
CLK的频率远高于test的频率

那如果改成异步复位有效果吗?

出0入0汤圆

 楼主| 发表于 2015-8-27 15:12:16 | 显示全部楼层
zjykwym 发表于 2015-8-27 15:03
那如果改成异步复位有效果吗?

从RTL图来看

顶楼的程序是一个MUX后面接一个D锁存器
照着Altera的counter例程改了一下就变成带CLR的D锁存器了

差不多的逻辑,综合出来也会有这么大的差别吗?

出0入0汤圆

发表于 2015-8-27 15:15:24 | 显示全部楼层
最好翻过来写逻辑。
目前这么写的综合出来一般是输入带有MUX的Reg/计数器;反过来是带同步Reset的计数器。

如果你用仿真环境,就这段代码而言没什么毛病,看看具体的波形;
如果是FPGA综合,看综合后反向出来的SCH之类的吧。

出0入0汤圆

 楼主| 发表于 2015-9-17 10:32:20 | 显示全部楼层
dr2001 发表于 2015-8-27 15:15
最好翻过来写逻辑。
目前这么写的综合出来一般是输入带有MUX的Reg/计数器;反过来是带同步Reset的计数器。
...

改成异步复位就可以了……

反过来写逻辑是什么意思?

我是CPLD的综合
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 23:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表