Are you referring to a specific circuit?
There have been designs, that managed to implement a low speed USB device as a pure software solution. It's a nightmare of assembler code and a good idea to drive someone mad.
See e.g. this design for ATtiny
https://www.obdev.at/products/vusb/index.html
According to ATmega port properties, the design can't implement e.g. a true differential input receiver. But that's only a minor problem. The USB D+ and D- signals have at least typically sufficient swing to be read by single ended CMOS/TTL inputs.
Better, you'll use dedicated USB enabled microcontrollers, e.g. AT90USBxxx devices if you rely on AVR topology.