Перейти к содержанию

Внутренний генератор тактовой частоты на MAX-10.

Осваиваю Verilog и MAX-10.

Захотел запустить внутренний тактовый генератор.

Посмотрел в Tools->IP-catalog (Quartus prime 17.1.0) - в разделе Library->Clock;PLLs and Resets.

Там - ALTCLKCTRL, ALTPLL и ALTPLL_RECONFIG.

Интуитивно понятно, что всё не то.

Полистал документ UG-M10CLKPLL (Intel® MAX® 10 Clocking and PLL User Guide).

Там были в т.ч. четыре раздела:

1) ALTCLKCTRL IP Core References

2) ALTPLL IP Core References

3) ALTPLL_RECONFIG IP Core References

4) Internal Oscillator IP Core References

"Номер четыре - это то, что нужно!" - подумал я. Заодно прочитал, что:

Clock Frequency 10M02, 10M04, 10M08, 10M16, and 10M25: 55 MHz, 116 MHz.

Отлично! Значит я смогу назначить своей 10M02 или 55МГц или 116МГц.

Но где его взять, это IP Core?

Начал гуглить по словам - на сочетание "Internal Oscillator IP Core References" попадался лишь этот самый раздел даташита.

Начал рыться в папках Квартуса. Нашел altera_int_osc. Даже без глубокого знания Verilog было видно, что это обертка над функцией (мегафункцией? модулем?) "fiftyfivenm_oscillator". О!! fiftyfive - это же "пятьдесят пять" по английски. Как одна из двух возможных частот для 10M02.

Загуглил "fiftyfivenm_oscillator" и получил от гугла... ровно две ссылки. Одну - на текст "altera_int_osc", вторую - на альтеровский форум где она вскользь упоминается в контексте невозможности на MAX-10 присоединить внутренний генератор к внутреннему PLL-у.

Скопировал текст загадочной функции из altera_int_osc в свой модуль прописав свой проводок-выход clk_test в .clkout и лог.1 в .oscena

            fiftyfivenm_oscillator # (
                .device_id("08"),
                .clock_frequency("dummy")
            ) oscillator_dut ( 
                .clkout(clk_test),
                .clkout1(),
                .oscena(1'b1));
            end

На выходе появился меандр на частоте 80МГц. Это и не 55МГц и не 116МГц. Попробовал наугад поменять параметр .clock_frequency - без изменений, меандр 80МГц. Попробовал поменять параметры .clock_frequency и .device_id на откровенную белиберду. Без изменений, меандр на 80МГц.

В общем. Что это за "fiftyfivenm_oscillator", где про нее прочитать, есть ли более правильный способ включения внутреннего тактового генератора, где мои 55МГц?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Осваиваю Verilog и MAX-10.

Захотел запустить внутренний тактовый генератор.

Посмотрел в Tools->IP-catalog (Quartus prime 17.1.0) - в разделе Library->Clock;PLLs and Resets.

Смотрите в IP Catalog раздел Basic Function - Configuratiion and Programming.

В нем - Internal Oscillator.

 

Описание: Intel MAX 10 Clocking and PLL Overview , раздел 8 "Internal Oscillator IP Core References", стр.65 (хотя там и читать-то особо нечего..).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Большое спасибо!

 

P.S. Теперь у Гугла будет 3 ссылки на загадочное "fiftyfivenm_oscillator" :)

Изменено пользователем flammmable

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Теперь у Гугла будет 3 ссылки на загадочное "fiftyfivenm_oscillator" :)

Что ж тут загадочного-то?

fiftyfivenm = 55 нм, т.е. проектная норма, по которой MAX 10 выпускаются. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Отлично! Значит я смогу назначить своей 10M02 или 55МГц или 116МГц.

Вы вставляете мегафункцию и получаете выход клока.

55 и 116 - это крайние значения генератора. Реально вы получите нечто среднее в зависимости от температуры и напряжения питания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
fiftyfivenm = 55 нм

Точно!

55 и 116 - это крайние значения генератора.

Там прямо в IP Core можно выбрать или 55 или 116 мегагерц. Надо еще проверить, но сдается мне - это точные значения, а не крайние.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, а нафига вообще нужен внутренний генератор с такими параметрами (вернее, с отсутствием таковых), какое у него может быть реальное применение ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Кстати, а нафига вообще нужен внутренний генератор с такими параметрами (вернее, с отсутствием таковых), какое у него может быть реальное применение ?

Ну например когда система не критична к времени работы. Например меряем температуру на улице. По меркам машинного времени температура изменяется бесконечно долго.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Кстати, а нафига вообще нужен внутренний генератор с такими параметрами (вернее, с отсутствием таковых), какое у него может быть реальное применение ?

Для работы с внутренним флэшом.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот pll для МАХ10. генерируйте до 4 выходов и подсоединяйте куда хотите.

component pll is
    port
    (
        inclk0 : in STD_LOGIC  := '0';
        c0         : out STD_LOGIC 
        --c1         : out STD_LOGIC 
    );
end component;
U_SYS_PLL : pll 
    port map
    (
        inclk0  =>  CLK,
         c0        => s_pll_clk
        --c1      => open
    );

 

pll.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Кстати, а нафига вообще нужен внутренний генератор с такими параметрами (вернее, с отсутствием таковых), какое у него может быть реальное применение ?

Например, тактировать конфигурирование по SPI внешнего генератора частоты, который потом выдаст на FPGA основной тактовый сигнал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация