VGA コントローラで使用するために、50MHz クロックを 25.175MHz まで遅くしようとしています。クロック分周器は既に持っていますが、現在のクロック速度と目的のクロック速度を除算した結果が整数でない場合は常に、クロックを遅くするのに問題があります。IE 50000000/25175000 ~ 1.98. クロック分周器はコンパイルして実行しますが、分周が 10 進数の場合は何も出力しません。これが私のコードです:
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 データ型を使用すると 10 進数を使用できることがわかりましたが、使用している変数を 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 まで下げる方法を知っている人はいますか? また、コンパイラが結果の除算が10進数値であることに満足できるように、クロックを遅くする方法を知っている人はいますか?
ありがとう