SV学习笔记—wait和@的区别

本文深入解析Verilog中wait()和@()的使用差异。wait()在条件满足时仅触发一次,适合电平触发;而@()则在信号变化时触发,适用于边沿检测。在示例程序中,wait(clk)在clk为1时显示消息,而@(clk)在clk的上升沿触发。此外,wait()在fork-join结构中会因条件提前满足仅执行一次,而@()则会在每次满足条件时触发。
摘要由CSDN通过智能技术生成

总体上:wait()和@()都是等待()中的内容的触发

1.wait()中的内容为电平触发,即只要()中的内容为1就触发;而@()中的内容是0/1跳变才触发

program automatic test_event();
    logic clk,a,b,c;
    initial begin
        clk=1'b1;//固定到高电平
    end

    initial begin
        wait(clk) $display("i have reached clk");//只要clk为1就触发,因此只触发这句
    end

    initial begin
        @(clk) $display("reached posedge of clk");//clk跳变才触发,因此该处不会被触发
    end
endprogram

2.wait只等待一次,@每时每刻都在等待

program automatic test_event();
    logic clk,a,b,c;

    initial begin
        clk=1'b10;
        #3 clk=1'b1;
    end

    initial begin
        fork
            begin
                #5;
                wait(clk) $display("i have reached clk");//5ns时clk已经为1,所以这句后触发
            end
            begin
                @(clk) $display("reached negedge of clk");//3ns时发生了跳变,先触发这句
            end
        join
    end
endprogram
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值