我試圖在VGA控制器中使用50MHz時鐘降至25.175MHz。我已經有了一個時鐘分頻器,但是無論何時當前時鐘速度和所需時鐘速度的分頻不是整數,都無法減慢時鐘速度。 I.E. 50000000/25175000~1.98。時鐘分頻器編譯並運行,但如果除法是十進制數,則不輸出。這裏是我的代碼:具有小數點的VHDL時鐘分頻器
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;
我搜索的谷歌,發現使用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.175MHz?另外,是否有人知道如何減慢時鐘速度,以便編譯器對得到的除法是十進制值感到滿意?
感謝
你在做什麼板子?它可能帶有一個數字時鐘管理器(DCM),它可以提供更好的分割結果和更簡單的實現。我知道Xilinx的Spartan 3a主板有他們 –
我正在使用Altera DE1主板。該電路板上的FPGA有4個PLL,但據我所知,它沒有Paul Seeb提到的數字時鐘管理器。所以,我想我的下一個問題是,我如何利用Quartus中的PLL作爲時鐘分頻器? –
如果你有PLL,只要硬件可以達到所需的頻率,就可以製作更高/更低頻率的時鐘。我認爲大多數DCM都是這樣做的。例如,通過將時鐘與90度相移時鐘信號異或來實現時鐘速度翻倍 –