Other gotchas and how to avoid them
As we near the end of our journey, there are a few more things that we should look at, along with how we can detect them or avoid them all together.
Inferring single bit wires
From the advent of Verilog, it has always been legal to use a wire without defining it. This can happen if it is a port on an instantiate module. There is an example project: https://github.com/PacktPublishing/Learn-FPGA-Programming/blob/master/CH11/build/inferred_wire/inferred_wire.xpr.
You can see that I've created a variable-width adder
module and connected three of them up:
adder #(4) u_add0 (.in0(SW[3:0]),  .in1(SW[7:4]),                      .out(add0_out)); adder #(4) u_add1 (.in0(SW[11:8]), .in1(SW[15:12]),                    .out(add1_out...