我正在尝试将 50MHz 时钟降低到 25.175MHz,以便在 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
.
然后,如果我将“计数”更改为一种CONSTANT
类型,我会收到错误:Error (10477): VHDL error at Clockdiv.vhd(18): name "count" must represent signal
.
有谁知道我怎样才能把时钟减慢到 25.175MHz?另外,有没有人知道如何减慢时钟,以便编译器对得到的除法是十进制值感到满意?
谢谢