Verilog 具有内部分配延迟的阻塞语句和非阻塞语句之间的差异

Verilog 具有内部分配延迟的阻塞语句和非阻塞语句之间的差异,verilog,blocking,nonblocking,Verilog,Blocking,Nonblocking,以下两段verilog代码之间有什么区别 (一) 及 (二) 始终@(在中) out在#5延迟启动之前,当in切换时,它们产生不同的输出。无论中的切换速度有多快,非阻塞分配始终会将中的延迟#5 操场上的例子。请注意sim卡输出中的差异 out=#5英寸在5个时间单位内阻止下一个操作。它将阻止监控下一个@(in),直到5个时间单位过去。如果在分配前后添加$display语句,您将看到5个时间单位已过去 always @(in) begin $display("enter @ %0t"

以下两段verilog代码之间有什么区别

(一)

(二)

始终@(在中)

out在
#5
延迟启动之前,当
in
切换时,它们产生不同的输出。无论
中的切换速度有多快,非阻塞分配始终会将中的延迟
#5

操场上的例子。请注意sim卡输出中的差异

  • out=#5英寸在5个时间单位内阻止下一个操作。它将阻止监控下一个
    @(in)
    ,直到5个时间单位过去。如果在分配前后添加
    $display
    语句,您将看到5个时间单位已过去

    always @(in) begin
        $display("enter @ %0t",$realtime);
        out = #5 in;
        $display("exit @ %0t",$realtime);
    end
    /*******************
     * Example output:
     * enter @ time 10
     * exit @ time 15
     *******************/
    

    out谢谢你的解释,这很有帮助!相关问题:是不是
    #5 out=in
    #5完全相同,语句前面的延迟始终被视为阻塞语句。基本上Verilog推断出分号<代码>#5 out…
    #5相同;输出…
    。阻塞(
    =
    )和非阻塞(
    
    
     always@(in)
       out <= #5 in;
    
    always @(in) begin
        $display("enter @ %0t",$realtime);
        out = #5 in;
        $display("exit @ %0t",$realtime);
    end
    /*******************
     * Example output:
     * enter @ time 10
     * exit @ time 15
     *******************/
    
    always @(in) begin
        $display("enter @ %0t",$realtime);
        out <= #5 in;
        $display("exit @ %0t",$realtime);
    end
    /*******************
     * Example output:
     * enter @ time 10
     * exit @ time 10
     *******************/