1 module gcd(clk,clr,go_i,x_i,y_i,d_o); 2 input clk,clr; 3 input go_i; 4 input[3:0] x_i,y_i; 5 output reg[3:0] d_o; 6 reg[3:0] x,y,r; 7 always@(posedge clk, posedge clr) 8 if(clr) 9 begin 10 x=0;y=0;d_o=0; 11 end 12 else 13 begin 14 if(go_i) 15 begin 16 if(x_i<y_i) begin x=y_i; y=x_i; end 17 else begin x=x_i; y=y_i; end 18 end 19 else 20 begin 21 if(!y) 22 begin d_o=x; end 23 else 24 begin r=x%y; x=y; y=r; end 25 end 26 end 27 endmodule