I have never initialized signals. That way any signal missing a reset or assignment would be unknown or initialized. In some reference code they have initialization. This defeats what I wish. Also since intialization isn’t synthesizable, there could be a simulation/synthesis mismatch.
Is there any reason to initialize signals in this case?
EDIT 6/17/11: As @Adam12 asked, this is for both storage (Verilog reg) and combinatorial (wire) elements.
(The following advice depends greatly on device architecture and synthesis tools, I speak from experience with Xilinx FPGAs such as Virtex-5 parts).
Your supposition that initialization is not synthesizable is incorrect. Initializing a signal absolutely is synthesizable!
For example, this can be synthesized so it programs the device with an initial value:
Additionally, you can achieve better Quality of Results (QoR) using initialization of signals and forgoing the traditional async or sync global reset schemes. This is because the tools no longer need to route reset signals to all your FFs around your part. While some older generation FPGAs might have had dedicated resources for resets, this is not the case in newer parts. This means that the resets are routed just like every other signal in your design, slowing down your build process and dragging down performance.
What you can do instead? Use signal initialization.
If you really need to reset just a small part of your design (a “local” reset) then you should handle this as you typically handle resets.
Here are some references for Xilinx tools:
EDIT
After some further research I have found that specifying initial values, while helpful in improving QoR in some cases, it can hurt it in others. It really boils down to how your synthesis tool vendor will honor the initial value. At its core, an initial value is a constraint on the tool. When your design is synthesized and then mapped to the part, a note gets added to your design that “when you implement this memory element, give it this initial value.” In many cases, adding this constraint prevents the element from being optimized (removed, combined, etc).
Suggestion: There is no hard/fast/one-size-fits-all rule for reset and initialization. For best optimization and resource utilization you must know your synthesis tool, and you must know your targeted technology.