我得出的平均数将重置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
此代码有什么问题?
答案 0 :(得分:0)
一个问题是reset
是最初integer
并保持这种状态的x
。您需要一种将其初始化为0的方法。
另一个问题是您的测试平台for
循环没有延迟。您应该添加@(nedgedge clk)