W ramach poznawania podstaw VHDL-a na CPLD pracuję obecnie nad pewnym projektem. O ile bez większego problemu udało mi się napisać większość potrzebnych komponentów (dzielnik częstotliwości, licznik binarny, sterownik wyświetlacza siedmiosegmentowego). Niestety - wygląda na to, że utknąłem na zagadnieniu konwersji liczby zakodowanej binarnie na kod BCD. Na wejściu komponentu mam siedmiobitowy STD_LOGIC_VECTOR, przez ktory przekazuję wartość mieszczącą się między 0 i 99. Na wyjściu znajduje się ośmiobitowy STD_LOGIC_VECTOR. Jego starszy półbajt ma mieścić liczbę dziesiątek, młodszy liczbę jedności.
Wydawało mi się, że mogę to zrobić prosto, tak samo jak na mikrokontrolerach - dziesiątki uzyskując za pomocą dzielenia przez 10, a jednostki za sprawą operacji modulo 10.
Napisałem więc coś następującego:
bcdval(7 DOWNTO 4) <= binval/10; bcdval(7 DOWNTO 0) <= binval MOD 10;
Niestety, synteza kodu wywala się właśnie w tym miejscu, zwracając błąd: "Operator <DIVIDE> must have constnt operands or first operand must be power of 2".
Wygląda więc na to, że nie mogę w prosty sposób wykonać dzielenia dowolnej liczby przez inną dowolną liczbę.
Jak w takim razie powinien być zrealizowany taki konwerter?