module left(fp,ws,lutin,minpy,delta,xs,ks,ys,p,y,plessy,ylessp,pgty,lutout); output fp,ws; output [9:0] lutin,minpy,delta; input xs,ks,ys,pgty; input [9:0] p,y,plessy,ylessp; input [15:0] lutout; reg [9:0] lutin,minpy,fplus,fminus,delta; reg ws,fm,fp; reg ps; //generate product (msbs = x+k ; lsbs = 0) always @ (xs or ks or ys or plessy or ylessp or pgty or fm or fp or p or y) begin ps = xs ^ ks; //generate sign pf product // now the generation of fm and fp fm = ps ^ ys; fp = !fm; // now find minpy = min(p,y) and lutin = |y-p| if (pgty) begin lutin = plessy; minpy = {y[7:0],2'b00}; ws = ys; end else begin lutin = ylessp; minpy = {p[7:0],2'b00}; ws = ps; end end // Note that lutout[15:0] breaks into fm and fp as follows: always @ (lutout or fp) begin fminus [9:0] = ~lutout[9:0]; fplus [9:0] = {4'b1111,~lutout[15:10]}; if (fp) begin delta = fplus; end else begin delta = fminus; end end endmodule