Roughly chop the onions and celery into medium sized pieces. Smash the garlic cloves. Sautee in a large pot over medium low heat until the onions are translucent and the celery is tender. Season generously.
Add wine and turn the heat up to high. Simmer until almost all of the wine has evaporated.
Add the stock and bring to a boil. Check for seasoning.
Cut the broccoli stems into small pieces. Add the broccoli stems and cook until very tender, about 6 minutes.
Add the broccoli florets and simmer until bright green, about 1 minute.
Transfer the soup to a blender. Add the cheese and butter if desired.
Carefully puree the soup. Start on low so the soup does not splatter. If the soup is too thick, add more stock or water. Gradually turn the speed up to high and puree until smooth.
If the color is not perfectly green, add raw spinach and puree until smooth.
The soup is ready to serve! Garnish with extra cheese and enjoy with crusty bread.