打印

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

[复制链接]
2991|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 谢谢!
5
sxhhhjicbb| | 2011-9-7 21:36 | 只看该作者
LZ好强呀.组合逻辑里面,用自加操作....LZ加法器都跑晕了.

使用特权

评论回复
6
viatuzi| | 2011-9-14 21:10 | 只看该作者
一般情况下,在使用if语句的时候,要补全else,否则,编译器会综合出latch而不是DFF。

使用特权

评论回复
7
wangwenjia|  楼主 | 2011-9-26 13:24 | 只看该作者
多谢 utopiaworld
3 一个always块 只对一个信号进行赋值
按照这条改了之后就可以了 谢谢 !

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

79

帖子

0

粉丝