verilog 某处多一个if语句便运行不正常的问题

[复制链接]
3708|6
 楼主| wangwenjia 发表于 2011-9-6 09:42 | 显示全部楼层 |阅读模式
always @(pulse_in)
begin
if(pulse_in==0) pulse_out=0;

if(pulse_in==1)
begin
  now_main <= now_main+1;
    pulse_out<=1;
end
end


always @(pulse_in)
begin
if(pulse_in==0) pulse_out=0;

if(pulse_in==1)
begin
  now_main <= now_main+1;
if(now_main>(now_sec*2))
begin
    pulse_out<=1;
    now_sec<= now_sec+1;
end
end
end

第一个运行正常
第二个写法就运行的不对
这是咋回事呀 ?
 楼主| wangwenjia 发表于 2011-9-6 09:47 | 显示全部楼层
两段代码仿真结果分别如下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
jakfens 发表于 2011-9-7 08:52 | 显示全部楼层
感觉没有else容易产生锁存器
utopiaworld 发表于 2011-9-7 20:19 | 显示全部楼层
程序蛮混乱的,
给 LZ 几个个编码建议
1 组合逻辑用阻塞赋值    用always@(*)
2 时序逻辑用非阻塞赋值 用always@(posedge clk or negedge rst_n)
3 一个always块 只对一个信号进行赋值
然后LZ可以重新写一下

评分

参与人数 1威望 +1 收起 理由
wangwenjia + 1 谢谢!

查看全部评分

sxhhhjicbb 发表于 2011-9-7 21:36 | 显示全部楼层
LZ好强呀.组合逻辑里面,用自加操作....LZ加法器都跑晕了.
viatuzi 发表于 2011-9-14 21:10 | 显示全部楼层
一般情况下,在使用if语句的时候,要补全else,否则,编译器会综合出latch而不是DFF。
 楼主| wangwenjia 发表于 2011-9-26 13:24 | 显示全部楼层
多谢 utopiaworld
3 一个always块 只对一个信号进行赋值
按照这条改了之后就可以了 谢谢 !
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

79

帖子

0

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