为什么当我使用 std::randomize 时会出现“object std is not statements”错误?

问题描述 投票:0回答:1

我正在尝试模拟 N 位全加器的 SystemVerilog 代码,但收到此错误:

错误(10161):full_adder_tb.sv(73)处的 Verilog HDL 错误:对象“std” 没有声明。验证对象名称是否正确。如果名字是 正确,声明对象。

为什么说“std”未声明?我使用quartus prime软件来模拟代码。

这是我的测试平台代码。

module full_adder_tb;

    timeunit 1ns;
    timeprecision 1ps;
    
    localparam N = 8 ;

    logic signed[N-1:0] A,B,S;
    logic ci,co;
    
    N_bit_adder #(.N(N)) dut(.*);
    
    initial begin
        A = 8'd80 ; 
        B = 8'd12 ;
        
        #1 assert({co,S}==A+B+ci) 
            
            $display("OK");
            
        else $error("Not OK");
        
        repeat(10) begin
            #9
            std::randomize(ci);
            
            #1
            
            assert({co,S} == A+B+ci) $display("OK");
            
            else $error("Error occurred");
        end         
    end
endmodule

有人知道这个问题的解决办法吗?

我在不同的网站上搜索过,但代码似乎没有错误。但是,它给出了错误消息“std”未声明。

system-verilog test-bench
1个回答
0
投票

我在使用另外 2 个模拟器时没有遇到任何错误。在 EDAPlayground 上尝试您的代码。

这可能是 Quartus 中的一个错误,或者您可能需要以某种方式启用此功能。请参阅工具文档。

如果您简单地省略,您的代码可能会起作用

std::

        randomize(ci);

作为替代方案,您可以尝试:

        ci = $urandom_range(1);

请参阅 IEEE Std 1800-2017,第 18.13.2 节 $urandom_range()

© www.soinside.com 2019 - 2024. All rights reserved.