Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么verilog任务的输出在第一个周期变成x(未知值)?_Verilog - Fatal编程技术网

为什么verilog任务的输出在第一个周期变成x(未知值)?

为什么verilog任务的输出在第一个周期变成x(未知值)?,verilog,Verilog,我对verilog中的任务语句感到困惑。 为了理解任务行为,我准备了以下示例代码。 但模拟结果与我预期的不同,因为我认为任务输出 在第一个循环中,应为零,而不是X(未知值)。 为什么会出现这样的问题?有人知道如何避免这个问题吗? 任何帮助都可以 谢谢,谢谢 [样本代码] `timescale 1ns/10ps module TaskTest_tb; parameter CK_PERIOD = 10; reg simCk; reg [15:0] task_output; integer j;

我对verilog中的任务语句感到困惑。 为了理解任务行为,我准备了以下示例代码。 但模拟结果与我预期的不同,因为我认为任务输出 在第一个循环中,应为零,而不是X(未知值)。 为什么会出现这样的问题?有人知道如何避免这个问题吗? 任何帮助都可以 谢谢,谢谢

[样本代码]

`timescale 1ns/10ps

module TaskTest_tb;
parameter CK_PERIOD = 10;
reg simCk;
reg [15:0] task_output;
integer j;


initial begin
    simCk = 0;
    task_output = 0;

    for(j=0; j<16; j=j+1) begin
        @(posedge simCk)  sample_task(8'h01, j[7:0], task_output);
    end
end

always #(CK_PERIOD/2) simCk <= ~simCk; 

task sample_task;
    input [7:0] x;
    input [7:0] count;
    output reg [15:0] y;
    reg [15:0] y_int;
    integer i;
    begin
        @(posedge simCk) y_int <= 0;

        for(i=0; i<count; i=i+1) begin
            @(posedge simCk) y_int <= y_int + x; 
        end
        @(posedge simCk) y <= y_int;
    end
endtask
endmodule
`时标1ns/10ps
模块任务测试;
参数CK_PERIOD=10;
雷格·辛克;
reg[15:0]任务输出;
整数j;
初始开始
simCk=0;
任务输出=0;

对于(j=0;j您是否尝试过初始化任务的输出值。我希望从调用任务时起,它可能会持续驱动该值,并且直到最后一步才定义任务中的
y

task sample_task;
    input [7:0] x;
    input [7:0] count;
    output reg [15:0] y;
    reg [15:0] y_int;
    integer i;
    begin
        y<=0; //<--Added line
        @(posedge simCk) y_int <= 0;

        for(i=0; i<count; i=i+1) begin
            @(posedge simCk) y_int <= y_int + x; 
        end
        @(posedge simCk) y <= y_int;
    end
endtask
任务示例\u任务;
输入[7:0]x;
输入[7:0]计数;
输出寄存器[15:0]y;
注册[15:0]y_int;
整数i;
开始

I这个任务是针对RTL(合成)还是验证?@Morgan这个任务本身只是这个问题的一个示例代码。我想在验证阶段使用测试模式生成器这样的任务。它不是可合成的RTL代码。