always @(posedge clk) begin // 描述对应当前状态 if (rst == 1'b1) begin // 如果复位信号生效,则当前状态为初始化 status <= 2'b00; endelsebegin // 否则,状态为下一状态 status <= nextstatus; end end
always @(*) begin // 描述下一状态 case (status) 2'b00 : nextstatus <= 2'b01; 2'b01 : nextstatus <= 2'b10; 2'b10 : nextstatus <= 2'b01; endcase end
always @(*) begin // 描述输出 case (status) 2'b00 : begin ra = 32'b1; rb = 32'b1; count = 4'b0011; end 2'b01 : begin if (count < n) begin rb = ra; ra = wf; count = count + 1; end end 2'b10 : begin if (count < n) begin rb = ra; ra = wf; count = count + 1; end end endcase end
assign result = wf;
alu add(.a(ra), .b(rb), .op(4'b0001), .f(wf)); // wf = ra+rb