https://vlsiweb.com/switch-level-modelling-in-verilog/