Спасибо user1155120 за полезные комментарии.
Проблема заключалась в том, что:
constant clk_period: time := (1 / (clk_freq))*sec;
оценивал таким образом, что это приводило к нулевой или отрицательной задержке. Подстановка этой строки для:
constant clk_period: time := 39.2157 us;
исправила проблему.