Я пытаюсь замедлить тактовую частоту 50 МГц до 25,175 МГц для использования в контроллере VGA. У меня уже есть делитель часов, но у меня возникают проблемы с замедлением часов, когда результирующее деление текущей тактовой частоты и желаемой тактовой частоты не является целым числом. т.е. 50000000/25175000 ~ 1,98. Делитель часов компилируется и запускается, но ничего не выводит, если деление представляет собой десятичное число. Вот мой код:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Clockdiv IS PORT (
Clkin: IN STD_LOGIC;
Clk: OUT STD_LOGIC);
END Clockdiv;
ARCHITECTURE Behavior OF Clockdiv IS
CONSTANT max: INTEGER := 50000000/25175000;
CONSTANT half: INTEGER := max/2;
SIGNAL count: INTEGER RANGE 0 TO max;
BEGIN
PROCESS
BEGIN
WAIT UNTIL Clkin'EVENT and Clkin = '1';
IF count < max THEN
count <= count + 1;
ELSE
count <= 0;
END IF;
IF count < half THEN
Clk <= '0';
ELSE
Clk <= '1';
END IF;
END PROCESS;
END Behavior;
Я искал в Google и обнаружил, что использование типа данных REAL позволит вам использовать десятичные дроби, но когда я изменил используемые переменные на REAL, Quartus выдает мне ошибку: Error (10414): VHDL Unsupported Feature error at Clockdiv.vhd(12): cannot synthesize non-constant real objects or values
.
Затем, если я изменю "count" на тип CONSTANT
, я получу ошибку: Error (10477): VHDL error at Clockdiv.vhd(18): name "count" must represent signal
.
Кто-нибудь знает, как я могу замедлить часы до 25,175 МГц? Кроме того, кто-нибудь знает, как замедлить часы, чтобы компилятор был доволен результирующим делением, являющимся десятичным значением?
Спасибо