来自子模块的fwrite变量

时间:2017-10-07 13:32:57

标签: verilog system-verilog hdl

我对Verilog很陌生,并试图通过编写我工作所需的DSP模块来学习。

我正在尝试将子模块的变量写入txt / m文件以在matlab中使用。

顶部块是TB,子模块实例名为“sync_short_inst”,如下所示:

enter image description here

我在三个不同的文件中写了三个变量:顶部块中的两个变量和子模块中的一个变量,在此线程的末尾复制。

我在从文件中的子模块写入变量时遇到问题。代码编译没有错误但是当我运行模拟时,我得到错误,我没有在文件中得到任何东西。当我评论第三个$ fwrite时,模拟没有问题,但第三个$ fwrite会产生以下错误。

如果有人可以建议我如何解决问题,我将不胜感激。

enter image description here

`timescale 1ns / 1ps

 module TB( );  
`include "common_params.v"

reg clock;
reg reset;
reg enable;

reg set_stb;
reg [7:0] set_addr;
reg [31:0] set_data;

reg signed [31:0] data_in;
reg input_strobe;
wire short_preamble_detected;

// RAM
//localparam RAM_SIZE = 1<<132;
reg [31:0] FileData [0:10000];   // 10000 words of size 32
reg [31:0] addr1;      
integer fID_i, fID_q, fID_mag_sq_av;



`define SAMPLE_FILE "SampleFile.txt"
sync_short  sync_short_inst(
    .clock(clock),
    .reset(reset),
    .enable(enable),

    .set_stb(set_stb),
    .set_addr(set_addr),
    .set_data(set_data),

    .sample_in(data_in),
    .sample_in_strobe(input_strobe),

    .short_preamble_detected(short_preamble_detected)
    );


initial 
    begin                       
        $display("Reading memory from...");
        $display(`SAMPLE_FILE);
        $readmemh(`SAMPLE_FILE, FileData);
        $display("Done.");   
        clock = 1'b0;
        reset = 1'b1;
        enable = 1'b0;
        input_strobe = 1'b0;

        # 20 
        reset = 1'b0;
        enable = 1'b1;
        set_stb = 1;
        # 20
        set_addr = SR_SKIP_SAMPLE;  // do not skip sample
        set_data = 0;

        input_strobe = 1'b1;
        # 20 input_strobe = 1'b0;  
        # 20 input_strobe = 1'b1;
    end

always @(posedge clock) 
    begin      
        if (reset)
            begin
                data_in <= 0;
                input_strobe <= 0;

                addr1 <= 0;
            end 
        else if (enable & input_strobe) 
            begin
                data_in <= FileData[addr1]; 
                addr1 <= addr1 + 'd1;
                $fwrite(fID_i,$signed(TB.data_in[31:16]),"\n");
                $fwrite(fID_q,$signed(TB.data_in[15:0]),"\n");
                //$fwrite(fID_mag_sq_av,$signed(TB.sync_short_inst.clock),"\n");    
                $display($signed(TB.sync_short_inst.clock));
            end

    end                                    


always #5 clock = !clock;
initial 
    begin
        fID_i =$fopen("IO_Files/file_i.m");  $fwrite(fID_i,"x=0; z=0; i=[... \n");
        fID_q =$fopen("IO_Files/file_q.m");  $fwrite(fID_q,"x=0; z=0; q=[... \n");
        fID_mag_sq_av= $fopen("IO_Files/file_mag_sq_av.m");  $fwrite(fID_mag_sq_av,"x=0; z=0; i=[... \n");  
        #80000
        $fwrite(fID_i,"]; clear x, clear z");  
        $fwrite(fID_q,"]; clear x, clear z"); 
        $fwrite(fID_mag_sq_av,"]; clear x, clear z");
        $fclose(fID_i);
        $fclose(fID_q);
        $fclose(fID_mag_sq_av);
    end 

endmodule

1 个答案:

答案 0 :(得分:1)

我无法在您在Active 10.1上发布的代码或最新版本上重现您的问题。您需要发布可以重复的完整样本。

请与供应商技术支持联系以解决此问题。