question about Vivado synthesis and implementation
There are attributes that can be used to turn off bits of logic optimisation?
These tools are REALLY good at eliminating unused logic and at simplifying the logic that is used, and you want them to be good at that stuff. 

Attributes are somewhat implementation defined, for Vivado see UG901 chapter 2 in particular the "dont touch", and maybe the "keep" attributes.