我无法在reg类型的数组中写入数据。这是默认写入xxxx

时间:2016-05-03 06:33:58

标签: verilog system-verilog

`include "top.v"
`include "c_top.v"

module fixture;

reg [31:0]F[0:100];
reg [31:0]F2[0:50];
reg [31:0]F3[0:50];
reg [31:0]a,b;
reg clk,reset,s;

wire [31:0]r_expected,r_actual;
wire exception_expected,exception_actual;

integer i;
integer j=32;

integer k;
integer m,u;

topdut t1(a,b,s,clk,reset,r_actual,exception_actual);
c_toptest t2(a,b,s,clk,reset,r_expected,exception_expected);

initial 
begin
clk = 1'b1;
forever #10 clk = ~clk;
end

//initial
 //$monitor($time,"clk=%b  reset =%b a=%h b=%h s=%b exception=%b  r=%h ",clk,reset,a,b,s,exception,r);

integer ab;

initial
begin
        ab=$fopen("input_ab.txt","w");
        for(i=0;i<100;i=i+1)
            begin
                $fdisplay(ab,"%b",$random());
            end
        $fclose(ab);

end

initial
begin
        $readmemb("input_ab.txt",F);
end

always@(posedge clk or negedge reset)
begin
    if(!reset)
    begin
    a <= 32'b0;
    b <= 32'b0;
    k <= 0;
    m <=0;


u <=0;
    end
    else
    begin
    a <= F[k];
    b <= F[k+50];
    k <= k+1;
    $display("r is %b and m is %i",r_expected,m);
    F2[m] <= r_expected;
    m <= m+1;
    if(k>=29)
    begin
    F3[u] <= r_actual;
    u <= u+1;
    end
    end
end 
initial
begin
    for(i=0;i<100;i = i+1)
    begin
        $display("c%b c2%b a%b b%b",F2[i],F3[i],F[i],F[i+50]);
        end

end

initial 
begin
        // Initialize Inputs
        reset = 1'b0;
    #30
    reset = 1'b1;
    s = 1'b0;

   end
    initial 
    begin
            #1500 $finish; 
    end



endmodule

当我显示F2 []和F3 []时,它正在显示xxxxxxx。 即使m和r具有有效值。

请提出一些解决方案。 我知道这里有一个小故障。

我猜我的所有声明都是正确的。

我的所有模块都从DUT提供正确的输出。 只有在这个测试平台上才出现问题

1 个答案:

答案 0 :(得分:0)

reg声明初始化为x。显示语句在时间零点执行,之后F2和F3已分配给其他值。显示正确的x初始值。