module ring_bcd4(Q,Init, Enable, Clk); output [15:0] Q; input Init; input Enable; input Clk; parameter WIDTH=10; function [3:0] decode_ring; //Good to 16 bits input [WIDTH-1:0] Q; case (Q) 1: decode_ring = 0; 2: decode_ring = 1; 4: decode_ring = 2; 8: decode_ring = 3; 16: decode_ring = 4; 32: decode_ring = 5; 64: decode_ring = 6; 128: decode_ring = 7; 256: decode_ring = 8; 512: decode_ring = 9; 1024: decode_ring = 'hA; 2048: decode_ring = 'hB; 4096: decode_ring = 'hC; 8192: decode_ring = 'hD; 16384: decode_ring = 'hE; 32768: decode_ring = 'hF; default: decode_ring = 'hx; endcase endfunction wire [WIDTH - 1:0] Q1,Q2,Q3,Q4; ring #(WIDTH) DUT1(Q1, Co1, Init, Enable, Clk); ring #(WIDTH) DUT2(Q2, Co2, Init, Co1, Clk); ring #(WIDTH) DUT3(Q3, Co3, Init, Co2, Clk); ring #(WIDTH) DUT4(Q4, Co4, Init, Co3, Clk); assign Q ={decode_ring(Q4), decode_ring(Q3), decode_ring(Q2), decode_ring(Q1)}; endmodule