Зависит от того, как этот блок потом использовать.
Скорее всего:
counter увеличивать нужно не каждый раз, а только по фронту.
Вместо переменной res_p можно было IF R_TRIG(CLK := res_c).Q THEN counter := 0; END_IF; Но это, наверное, дело вкуса.
Не факт, что PDM это то, что нужно в конкретной задаче.
Скорее, нужно было PWM с 50% скважностью или что-нибудь среднее между PDM/PWM.





Ответить с цитированием