This answer record explains Vivado Synthesis best practices for SystemVerilog.
The following are the Vivado Synthesis best practices for SystemVerilog:
- Do not mix 2-state and 4-state types.
- Unique and Priority are runtime checks.
- As Unique and Priority are runtime checks they should be used cautiously in synthesis.
- Use Always_ff/Always_latch/Always_comb.
- Strings are supported as literals.
- String is a dynamic type in SystemVerilog and hence not synthesizable.
- Use fully specified modports for best results.
- Use .* for modular code with minimum connection errors.
- Functions are automatic by default.
- To enable RAM extraction, read/write in same module.
- Use enum instead of localparam.