将verilog输出写入文本文件的测试台

将verilog输出写入文本文件的测试台,verilog,vlsi,Verilog,Vlsi,我无法在文本文件中获得正确的输出,但是modelsim中的模拟非常正常。。但是,当我把它写入文本文件时,每次输入都会得到XX。可能有一些语法错误或其他错误。如果有,可以帮助plz写下测试台,以写入触发器的dout(输出)(例如),每个dout(输出)显示在文本文件的新行中 代码: 模块LFSR(时钟、复位、输出); 参数宽度=4; 输入时钟,复位; 输出[width-1:0]输出; reg[width-1:0]lfsr; 整数r; 线反馈=lfsr[width-1]^lfsr[width-2];

我无法在文本文件中获得正确的输出,但是modelsim中的模拟非常正常。。但是,当我把它写入文本文件时,每次输入都会得到XX。可能有一些语法错误或其他错误。如果有,可以帮助plz写下测试台,以写入触发器的dout(输出)(例如),每个dout(输出)显示在文本文件的新行中

代码:

模块LFSR(时钟、复位、输出);
参数宽度=4;
输入时钟,复位;
输出[width-1:0]输出;
reg[width-1:0]lfsr;
整数r;
线反馈=lfsr[width-1]^lfsr[width-2];
始终@(posedge clk)
如果(重置)
开始

lfsr我希望您考虑以下代码部分:

initial begin
  f = $fopen("output.txt","w");
end

initial begin
  for (i = 0; i<14; i=i+1)
    $fwrite(f,"%b\n",lfsr[i]);
end

initial begin
  $fclose(f);  
end
保持2个时钟上升沿的复位断言

使用工作示例更新 有一些奇怪的事情发生,你在
#140
之后调用
$stop
(不是
$finish
),但也尝试循环14次,$stop意味着只执行4个循环

您的测试程序由2个并行运行的
初始开始
组成,而不是一个顺序执行的程序。您毫不延迟地写出了文本文件,并且编写了lfsr的缓冲版本,而不是直接输出lfsr

以下示例正确模拟并写入要查找的文本文件:

module aaatest();

  parameter width =4;
  reg   clk,reset;
  wire [width-1:0] out;
  reg  [width-1:0] lfsr[13:0];
  integer f,i;

  LFSR patt (clk,reset,out);

  always #5 clk=~clk;

  //Clock and reset release
  initial begin
    clk=0; reset=1; //Clock low at time zero
    @(posedge clk);
    @(posedge clk);
    reset=0;
  end

  initial begin
    f = $fopen("output.txt","w");

    @(negedge reset); //Wait for reset to be released
    @(posedge clk);   //Wait for fisrt clock out of reset

    for (i = 0; i<14; i=i+1) begin
      @(posedge clk);
      lfsr[i] <= out;
      $display("LFSR %b", out);
      $fwrite(f,"%b\n",   out);
    end

    $fclose(f);  

    $finish;
  end
endmodule
模块aaatest();
参数宽度=4;
reg clk,复位;
线[width-1:0]输出;
reg[width-1:0]lfsr[13:0];
整数f,i;
LFSR patt(时钟、复位、输出);
始终#5 clk=~clk;
//时钟和复位释放
初始开始
clk=0;重置=1//时钟在时间零点低
@(中电);
@(中电);
重置=0;
结束
初始开始
f=$fopen(“output.txt”,“w”);
@(负边缘复位)//等待重置被释放
@(中电)//等待第一个时钟退出复位

对于(i=0;iattached是代码..如果您现在可以检查plz..(jst考虑4位LFSR一段时间,因为我需要对其进行一些更改..)另外,请说明是否有任何方法可以比较verilog中的输出。就像我不希望任何输出重复一样,我可以检查一下吗?如果您有其他问题,请将其作为单独的问题发布。这样,您可以获得每个问题的最佳答案,并且可以根据他们回答的问题接受/投票。注意:您可能需要进行研究前离子posting@user3432905,您可能还想查看将lfsr设置为输出的初始块。首先,您在其中设置为
clk=1
,这在您处理另一个块中的clk时是不需要的。其次,由于您使用非阻塞分配,Morgan建议的修复可能无法捕获更新的lfsr,因为fwrite将触发n相同的sim周期,但在输出传递给lfsr之后。
initial begin
  f = $fopen("output.txt","w");
end

initial begin
  for (i = 0; i<14; i=i+1)
    $fwrite(f,"%b\n",lfsr[i]);
end

initial begin
  $fclose(f);  
end
initial begin
  f = $fopen("output.txt","w");

  @(negedge reset); //Wait for reset to be released
  @(posedge clk);   //Wait for fisrt clock out of reset

  for (i = 0; i<14; i=i+1) begin
    $fwrite(f,"%b\n",lfsr[i]);
  end

  $fclose(f);  
end
initial begin
  clk=0; reset=1; //Clock low at time zero
  @(posedge clk);
  @(posedge clk);
  reset=0;
  # 140 $stop;
end
module aaatest();

  parameter width =4;
  reg   clk,reset;
  wire [width-1:0] out;
  reg  [width-1:0] lfsr[13:0];
  integer f,i;

  LFSR patt (clk,reset,out);

  always #5 clk=~clk;

  //Clock and reset release
  initial begin
    clk=0; reset=1; //Clock low at time zero
    @(posedge clk);
    @(posedge clk);
    reset=0;
  end

  initial begin
    f = $fopen("output.txt","w");

    @(negedge reset); //Wait for reset to be released
    @(posedge clk);   //Wait for fisrt clock out of reset

    for (i = 0; i<14; i=i+1) begin
      @(posedge clk);
      lfsr[i] <= out;
      $display("LFSR %b", out);
      $fwrite(f,"%b\n",   out);
    end

    $fclose(f);  

    $finish;
  end
endmodule