input CLOCK; input START; input [7:0] C; input [7:0] D; output [15:0] P; reg [15:0] P; reg [7:0] M; reg [7:0] Q; reg [7:0] A; reg Qd; reg [16:0] SHIFT; integer CNT; always @(posedge START or posedge CLOCK) begin if (START) begin P <= 0; M <= C; Q <= D; A <= 0; Qd <= 0; SHIFT <= 0; CNT <= 8; end else begin if (CNT != 0) begin case ({Q[0], Qd}) 2'b01: begin A <= A + M; SHIFT <= {A[7], A, Q}; end 2'b10: begin A <= A + ~M + 1; SHIFT <= {A[7], A, Q}; end 2'b00, 2'b11: begin SHIFT <= {A[7], A, Q}; end endcase CNT <= CNT - 1; end else P <= SHIFT; end end