Chop onion, carrot, celery, garlic in a chopper or mini food processor.
In a large pot, melt the butter. Add the chopped vegetables, salt and pepper and sauté on low heat until soft, about 5 minutes.
Stir in the flour to create a roux, cooking for 2 minutes to remove the raw flour taste.
Gradually whisk in the chicken broth, ensuring there are no lumps.
Add the milk and increase heat to high until it comes to a boil, then add broccoli florets, Parmesan cheese, and stir well.
Adjust salt and pepper to taste. Cook uncovered over low heat until broccoli is cooked, about 10 minutes.
Using an immersion blender quickly blend part of the soup for a quick second or two. If you don't have an immersion blender, remove about 1-2 cups of soup and blend, then add it back to the soup. This helps thicken it a bit.
Gently stir in the shredded cheddar cheese, allowing it to melt smoothly.
Serve the soup hot, garnished with additional cheddar cheese, if desired.