/* inc4fexb: by karttu, Jan 2 2005. Increment the four-digit factorial expansion specified in one-bit register in_f0 (the least significant digit) and the next thee digits in three binary registers (in_f1 - in_f3) and give the results in out_fo - out_f3. Note that in_f0 can be used as a kind of "incrementation enable" signal, because the incrementing is carried only when it is 1. This differs from inc4fex in that here we don't use "one hot" encoding, but instead each digit is presented with the ordinary binary encoding. */ module inc4fexb(input in_f0, input [1:0] in_f1, // 0-2 (2b'00, 2b'01 or 2b'10) input [1:0] in_f2, // 0-3 (2b'00, 2b'01, 2b'10 or 2b'11) input [2:0] in_f3, // 0-4 (3b'000 - 3b'100) output out_f0, output [1:0] out_f1, output [1:0] out_f2, output [2:0] out_f3); assign out_f0 = ~in_f0; // How to do this with (nested) generate loop(s) ? assign out_f1 = (in_f0 ? (2 == in_f1 ? 0 : in_f1+1) : in_f1); assign out_f2 = ((in_f0 && (2 == in_f1)) ? in_f2+1 : in_f2); assign out_f3 = ((in_f0 && (2 == in_f1) && (3 == in_f2)) ? (4 == in_f3 ? 0 : in_f3+1) : in_f3); endmodule