Consider the following device; a ripple counter:
module ripple(out2, out1, out0, clk);
input clk;
output reg out2 = 1'b0, out1 = 1'b0, out0 = 1'b0;
always @ (posedge clk) begin
out0 = out0 + 1'b1;
end
always @ (negedge out0) begin
out1 = out1 + 1'b1;
end
always @ (negedge out1) begin
out2 = out2 + 1'b1;
end
endmodule
Is such a construct generally synthesizable? What determines which connections may be used as clocks?