• verilog \$test\$plusargs的使用


    1. 作用

    $test$plusargs是verilog在仿真运行时调用的系统函数, 可以根据仿真选项不同, 创建不同的运行分支.

    2. 举例

    module tb;
    
    logic clk;
    
    initial begin
        #0 clk = 0;
    
        forever begin
            #5 clk = ~clk;
        end
    end
    
    initial begin
        #500 $finish;
    end
    
    reg a0, a1;
    reg b0, b1;
    
    always@(posedge clk)begin
        if(! $test$plusargs("DEL_A"))begin
            a0 = 1'b0;
            a1 = 1'b1;
        end
    
        if(! $test$plusargs("DEL_B"))begin
            b0 = 1'b0;
            b1 = 1'b1;
        end
    end
    
    endmodule
    

    编译后, 根据选项不同, 进行不同的仿真:

    simv               # 没有设置DEL_A和DEL_B, 会把a0/a1/b0/b1都初始化;
    simv +DEL_A        # 设置了DEL_A, a0/a1不初始化(都是x), b0/b1初始化.
    simv +DEL_A +DEL_B # 设置了DEL_A和DEL_B, a0/a1/b0/b1都不初始化(都是x);
    
    

    3. 与宏定义的区别

    使用宏定义也可以达到上述目的.
    但使用宏定义的缺点是: 修改DEL_A和DEL_B的设置时, 需要重新编译, 直接修改simv参数无效.

    module tb;
    
    logic clk;
    
    initial begin
        #0 clk = 0;
    
        forever begin
            #5 clk = ~clk;
        end
    end
    
    initial begin
        #500 $finish;
    end
    
    reg a0, a1;
    reg b0, b1;
    
    always@(posedge clk)begin
        `ifndef DEL_A
            a0 = 1'b0;
            a1 = 1'b1;
        `endif
    
        `ifndef DEL_B
            b0 = 1'b0;
            b1 = 1'b1;
        `endif
    end
    
    endmodule
    
  • 相关阅读:
    1020 Tree Traversals
    1021 Deepest Root
    1022 Digital Library
    1023 Have Fun with Numbers
    1024 Palindromic Number
    1025 PAT Ranking
    1026 Table Tennis
    面向对象知识点梳理篇一
    面向对象知识点梳理篇二
    logging模块
  • 原文地址:https://www.cnblogs.com/gaiqingfeng/p/15854580.html
Copyright © 2020-2023  润新知