Maybe a rephrased question is, what causes Verilog or VHDL to be unsynthesable if they are based on this style of block design
Maybe a rephrased question is, what causes Verilog or VHDL to be unsynthesable if they are based on this style of block design
- multi-driven nets where two or more signals are driving the same node
- the target not supporting certain features like multi-clocked FFs
- missing components or libraries (not uncommon if you're trying to use VHDL 2008, for example)
- timing analysis failing, meaning the HDL isn't fast enough / the critical path is too long for how fast the fpga is going to go
And while not necessarily being unsynthesizable, a lot of tools like Vivado will heavily optimize the HDL, meaning if you forget to connect a part of the HDL to the output or do something with it, it will be removed from the design.
You could of course only build on top of very simple blocks that are trivially correct like say piecing together logic gates and other very simple circuit elements, but that kinda defeats the purpose of using an HDL and doesn't scale well. Some of the blocks you get included with your development tools might be quite complex, e.g. entire complex DSP operations that are designed to exploit specific hardware features of your target.