在MAX10 FPGA上使用PLL产生优于400Mhz的时钟信号

问题描述 投票:0回答:1

我正在使用10M50 FPGA通过MIPI-CSI2从摄像机读取数据,但是板上的时钟运行得不够快。因此,现在我正在尝试使用PLL生成更快的时钟信号。

我正在使用以下代码通过手动设置v1变量来测试我生成的时钟信号是否正确,以便我的led每秒闪烁一次。在该示例中,PLL(由Quartus IP Catalog中的ALTPLL向导生成)设置为接收100MHz时钟信号,并应显示400MHz时钟信号,但是什么也没有发生。

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

LIBRARY altera_mf;
USE altera_mf.all;

--   debut entity     --

entity test is 
    port(
        CLK : in std_logic;
        LED0 : out std_logic     -- leds are ON for '0' and OFF for '1'
    );
end test;


-- debut architecture --

architecture test_led of test is 
signal s_led0 : std_logic :='1';
signal c0 : std_logic;

component pll400
    port(   inclk0      : IN STD_LOGIC  := '0';
            c0      : OUT STD_LOGIC 
    );
end component;

begin

clk1:pll400
    port map(inclk0 => CLK, 
                c0 => c0
    );

p:process(c0,s_led0)
variable v1 : integer range 0 to 800000000 :=0;
begin               
    if c0'event and c0 = '1' then
        v1 := v1 + 1;       
        if v1 = 400000000 then
            s_led0 <='0';   
        end if; 
        if v1 = 800000000 then
            s_led0 <='1';
            v1 := 0;
        end if;
    end if;

LED0 <= s_led0;
end process;    
end test_led;

我能够使用它来生成和测试高达320MHz的信号,但是它似乎不能更高,尽管我没有找到任何文档说这是不可能的。 (我的资料主要是10M50用户指南以及Intel Max10 Clocking and PLL User guide)

[我也尝试过级联使用PLL,将100-> 200Mhz PLL的输出时钟输入200-> 400MHz PLL,但结果相同,这意味着我的LED不会闪烁。

所以我缺少什么东西吗,或者在当前的电路板上不可能产生这样的信号吗?

编辑:数据表,我正在用作参考:MAX10 Clocking and PLL10M50 User Guide

vhdl clock intel-fpga
1个回答
0
投票

您的设计时机是否固定?时序报告说什么?

也许不是PLL,但是结构本身足够慢,无法在更高的频率下工作。您有一些30位比较器和一个30位加法器以400 Mhz的单时钟工作,这对于MAX10来说非常苛刻。您应该考虑增加加法器流水线,这将提高其频率性能,但每2或3个或更多时钟周期只能产生一次结果,因此您需要在其输出端附加一个锁存器。

至于比较器,如果您切换为2的幂作为极限,则可能根本不需要它们。将v1设置为31位值,并对s_led0使用v1的第31位,这将为您提供另一个分频比,但是在逻辑上更加简单。而且您也不需要重置v1-加法器会自动将其环绕。

© www.soinside.com 2019 - 2024. All rights reserved.