Wenn Du von "diskreter Logik" sprichst, meinst vermutlich so etwas wie
Gatterebene. Noch diskreter wären Transistoren, aber damit tut man sich
etwas schwer in VHDL.
In deiner Implementierung gibt es aber nirgendwo Gatter. Stattdessen
gibt es Variablen und Schleifen. Hast du da vielleicht ein
"VHDL-Programm" geschrieben?
Zum Verständnis: Eine Multiplikation in VHDL beschreibt man
üblicherweise mit p <= a*b und überlässt es der Synthese, daraus eine
Gatterschaltung zu erzeugen (das ist die Aufgabe der Synthese).
Zu Übungszwecken kannst (und solltest) du natürlich auch den
Multiplizierer mal "diskret" formulieren. Dazu darfst du nur Gatter und
Flipflops verwenden, oder im VHDL-Sprech: Kombinatorische Ausdrücke und
getaktete Prozesse. Oder Gatterprimitive, wenn du es auf die ganz harte
Tour machen willst, aber das muss wirklich nicht sein.
Also schau dir mal die Multipliziererverfahren an, die oben schon
verlinkt wurden, und versuche daraus mal eine Gatterschaltung zu machen,
und die formulierst du dann in VHDL. Als Einstieg könntest du erst mal
mit einem Addierer anfangen.
Und lass die Finger von Schleifen und Variablen. Als Anfänger
fabrizierst du damit nur Unfug. Diese Konstrukte haben in VHDL eine
andere Bedeutung als in Programmiersprachen.