首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试从Verilog写入文本文件,但输出文件为空

尝试从Verilog写入文本文件,但输出文件为空
EN

Stack Overflow用户
提问于 2015-06-01 21:42:57
回答 2查看 1.1K关注 0票数 0

我需要在一个文件中一个接一个地写两个来自Verilog模块的变量。在单周期信号freq_rdy的上升沿更新变量。我正在使用下面的代码。

代码语言:javascript
复制
integer write_file1;
integer freq_rdy_1,freq_rdy_2;

initial begin

write_file1 = $fopen("frequencies.txt","w");        
freq_rdy_1 = testbench.UUT.read_controller.freq_rdy;
freq_rdy_2 = testbench.UUT.read_controller_2.freq_rdy;
        
@(posedge freq_rdy_1)
    $fwrite(write_file1,"%d \n",testbench.UUT.read_controller.frequency_i); 

@(posedge freq_rdy_2)  
    $fwrite(write_file1,"%d \n",testbench.UUT.read_controller_2.frequency_i); 

 
#1000000
$fclose(write_file1);    
end

输出文本文件为空。我在这段代码中做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2015-06-01 21:56:55

问题是你只在看到freq_rdy_1或freq_rdy_2的posedge时才写入文件,但是,你永远不会得到这些信号的posedge,因为你只设置了一次(在@posedge语句之前)。因此,您永远不会向文件中写入任何内容。

也许这就是你要找的:

代码语言:javascript
复制
integer write_file1;
initial begin
    write_file1 = $fopen("frequencies.txt","w");
    forever begin
        fork
            begin
                @(posedge testbench.UUT.read_controller.freq_rdy);
                $fwrite(write_file1,"%d \n",testbench.UUT.read_controller.frequency_i);
            end
            begin
                @(posedge testbench.UUT.read_controller_2.freq_rdy);
                $fwrite(write_file1,"%d \n",testbench.UUT.read_controller_2.frequency_i);
            end
            begin
                #1_000_000;
                $fclose(write_file1);
            end
        join
    end
end
票数 2
EN

Stack Overflow用户

发布于 2015-06-03 02:52:58

我能看到波形中的边缘。

通过用a替换w,解决了这个问题。

而不是

代码语言:javascript
复制
$fopen("frequencies.txt","w");

我写了

代码语言:javascript
复制
$fopen("frequencies.txt","a");

虽然我每次运行模拟时都要删除文件。

其余的逻辑是使用always块实现的。

代码语言:javascript
复制
initial begin 
write_file1 = $fopen("frequencies.txt","a");
end 
always @(posedge. testbench.UUT.read_controller.freq_rdy)         begin 
$fwrite(write_file1,"%d \n",testbench.UUT.read_controller.frequency_i);
end 
always @(posedge testbench.UUT.read_controller_2.freq_rdy)       begin 
$fwrite(write_file1,"%d \n",testbench.UUT.read_controller_2.frequency_i); 
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30575166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档