如何在时钟的正沿显示内存文件中的数据?

问题描述

我有一个包含十六进制数据的文本文件。我只想在时钟的正沿显示数据,从而控制数据的频率。我写了以下代码

module testbench;
    reg [15:0] in[0:5];
    reg clk;
    integer i;
    initial
     clk=1'b0;
     always
      #5 clk = ~clk;
    
    initial
      $readmemh("Input_rsvd.dat",in);
      always @ (posedge clk)
      begin
       for(i=0;i<5;i=i+1)
        $display( "result = %h",in);
      end
endmodule

显然,代码有一些我无法弄清楚的问题。有人可以帮我吗?

解决方法

当我尝试运行您的代码时,在多个模拟器上出现编译错误。您不能像那样将内存变量传递给 $display。我认为您打算一次打印一个值。要修复它,请更改:

    $display( "result = %h",in);

到:

    $display( "result = %h",in[i]);

另外,如果要打印所有 6 个值,请更改:

   for(i=0;i<5;i=i+1)

到:

   for(i=0;i<6;i=i+1)

这是新代码,使用更一致的布局:

module testbench;
    reg [15:0] in [0:5];
    reg clk;
    integer i;

    initial clk = 1'b0;

    always #5 clk = ~clk;
    
    initial $readmemh("Input_rsvd.dat",in);

    always @(posedge clk) begin
       for (i=0; i<6; i=i+1) $display("result = %h",in[i]);
    end
endmodule