在顺序块begin...end中,需要注意end前不能时延,否则会编译报错。

项目场景:在initial中,需要注意end前不能时延,否则会编译报错。


问题描述

我想着多添加一下延时的数自己测试看看,结果不小心在end前也添加了时延,导致我反复检查都没查出问题,
最后去看顺序块的定义,才发现end前不能添加时延!当然是initial中不可以,因为它执行一次,如果是循坏的always,那么是可以的。
顺序块中每条语句的时延总是与其前面语句执行的时间相关 点醒了我!

详细语法介绍:
https://www.runoob.com/w3cnote/verilog-statements-block.html
https://blog.youkuaiyun.com/qq_45355365/article/details/140738648

错误语法:

initial begin
    tb_key <= 1'b1;
    #200
    tb_key <= 1'b0;
    #300
    tb_key <= 1'b1; 
    #400
    tb_key <= 1'b0;
    #500
    tb_key <= 1'b1;
    #300
    tb_key <= 1'b0;
    #300//错误的地方
    end//软件编译发现错误的提示地方

原因分析:

由于end前添加了时延,导致延迟300个单位时间后,没有语句可以执行


解决方案:

把end前的时延删除!

我还按照其他人写的方法,用这样的方式改写了,这样似乎可读性更高。
之前的想法是:tb_key <= 1’b1 持续200后,再执行tb_key <= 1’b0
现在的想法是:执行tb_key <= 1’b1 后,延时200再执行tb_key <= 1’b0

initial begin
    tb_key <= 1'b1;
    
    #200 tb_key <= 1'b0;
    #300 tb_key <= 1'b1; 
    #400 tb_key <= 1'b0;
    #500 tb_key <= 1'b1;
    #300 tb_key <= 1'b0;
    
    end

收获:

1、可以多看语法定义
2、多看优秀的代码,学习人家是咋写的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值