Использование PLL для генерации тактового сигнала, превосходящего 400 МГц на ПЛИС MAX10 - PullRequest
0 голосов
/ 15 апреля 2020

Я использую 10M50 FPGA для чтения данных с камеры через MIPI-CSI2, но часы на плате не могут работать достаточно быстро. Поэтому сейчас я пытаюсь использовать PLL для генерации более быстрого тактового сигнала.

Я использую следующий код для проверки правильности генерируемого тактового сигнала, вручную установив переменную v1, чтобы мой светодиод мигал каждую секунду. В этом примере PLL (созданный мастером ALTPLL из каталога IP Quartus) настроен на прием тактового сигнала 100 МГц и должен отображать тактовый сигнал 400 МГц, однако ничего не происходит.

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;

Я смог использовать это для генерации и тестирования сигнала до 320 МГц, но, похоже, он не может go выше, хотя я не нашел ни одной документации, подтверждающей, что это было невозможно. (мои источники - это в основном руководство пользователя 10M50 и руководство пользователя Intel Max10 Clocking и PLL)

Я также пытался использовать PLL в каскаде, вводя выходной тактовый сигнал 100 -> 200 МГц PLL в 200 -> PLL на 400 МГц, но у меня был тот же результат, что означает, что мой светодиод не будет мигать.

Так что, я чего-то упускаю или невозможно сгенерировать такой сигнал с моей текущей платы?

Редактировать: таблица данных, которую я использую в качестве справочной информации: MAX10 Clocking и PLL 10M50 Руководство пользователя

1 Ответ

1 голос
/ 17 апреля 2020

Ваш дизайн ограничен по времени? О чем говорит отчет о сроках?

Возможно, это не PLL, но сам fabri c достаточно медленный, чтобы работать на более высоких частотах. У вас есть несколько 30-битных компараторов и 30-битный сумматор, работающий по одному такту с частотой 400 МГц, что довольно сложно sh для MAX10. Вы должны рассмотреть возможность увеличения конвейерной обработки сумматора, это повысит его частоту, но даст результат только один раз за 2 или 3 или более тактов, поэтому вам потребуется дополнительная защелка на его выходе.

Что касается компараторов, они могут вообще не понадобиться, если вы переключитесь на степени 2 в качестве своих пределов. Установите v1 в качестве 31-битного значения и используйте 31-й бит v1 для s_led0, это даст вам еще один коэффициент деления, но будет намного проще для логических операций c. И вам также не нужно будет сбрасывать v1 - сумматор автоматически обернет его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...