vhdl - 在 MAX10 FPGA 上使用 PLL 产生优于 400Mhz 的时钟信号
问题描述
我正在使用 10M50 FPGA 通过 MIPI-CSI2 从相机读取数据,但我在板上的时钟运行速度不够快。所以现在我正在尝试使用 PLL 来生成更快的时钟信号。
我正在使用以下代码来测试生成的时钟信号是否正确,方法是手动设置 v1 变量,使我的 LED 每秒闪烁一次。在本例中,PLL(由 Quartus IP 目录中的 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 PLL 10M50 User Guide
解决方案
您的设计是否受到时间限制?时间报告说什么?
也许不是锁相环,但结构本身足够慢,可以在更高的频率下工作。你有一些 30 位比较器和一个 30 位加法器,以 400 Mhz 单时钟工作,这对 MAX10 来说是相当苛刻的。您应该考虑增加加法器流水线,这将提高其频率性能,但它只会在每 2 个或 3 个或更多时钟周期产生一次结果,因此您将需要在其输出端增加一个锁存器。
至于比较器,如果您切换到 2 的幂作为限制,则可能根本不需要它们。将 v1 设置为 31 位值,并为 s_led0 使用 v1 的第 31 位,这将为您提供另一个分频比,但逻辑上要简单得多。而且您也不需要重置 v1 - 加法器会自动环绕它。
推荐阅读
- ios - **WEA.AppPages.DesignedFor** 出现在 Appstore 网站上
- azure - Azure CLI 可以上传/更新由 azure cli 和 powershell 编写的脚本吗?
- symfony - 如何解决 Symfony 网站上的 403 Forbidden
- c# - 自定义验证属性的依赖注入
- php - PHP根据日期和时间有条件地使表单字段只读
- python-3.x - 如何从 AWS 策略文档中获取操作值并将其存储为列表?
- sql - SQL 选择具有特定值的不同 ID
- python - 在 Python 中绘制 4D 轮廓(X、Y、Z + 数据)
- html - 我的 css 在 bootstrap 4 中不起作用我该如何解决?
- c - 警告 C4244:'function':从 'int' 转换为 'float',可能丢失数据