首页 > 解决方案 > 始终不分配输出的循环

问题描述

我正在做一个平均重置 EDA Playground 上的每个周期。模拟器 Icarus Verilog 上没有显示任何错误,但输出一直未分配(当然,这不是我想要的)。

这是我的设计:

    module shift
      (
        input [13:0] in,
        input clock,
        output [31:0] sum,
        output [14:0] avg);

      integer reset;
      reg [31:0] sum_reg;
      reg [14:0] avg_reg;

      always @(posedge clock)
        if (reset == 8) begin
          avg_reg = sum_reg >> 3;
          sum_reg = 0;
          reset = 0;
        end else begin
          sum_reg = sum_reg + in;
          reset = reset + 1;
        end

      assign sum = sum_reg;
      assign avg = avg_reg;
    endmodule

这是我的测试平台:

    module shift_tb;
      reg [13:0] in;
      reg clock = 1'b0;
      reg reset;
      wire [31:0] sum;
      wire [14:0] avg;

      shift s
      (
        .in(in),
        .clock(clock),
        .sum(sum),
        .avg(avg));

      integer f;

      initial begin
        for (f = 9000; f < 10000; f = f + 10) begin
          in = f;
          $display("in = %d, sum = %d, avg = %d", in, sum, avg);
        end
      end

      always
        #1 clock = ~clock;
    endmodule

这段代码有什么问题?

标签: verilogsystem-verilog

解决方案


一个问题是最初reset是这样的,并且一直保持这种状态。您需要一种将其初始化为 0 的方法。integerx

另一个问题是您的 testbench for-loop 没有延迟。你应该添加@(nedgedge clk)


推荐阅读