У меня Lattice iCE40 HX8K FPGA в 256 BGA корпусах.Я хочу использовать один из доступных модулей PLL для преобразования внешней тактовой частоты 37 МГц во внутреннюю тактовую частоту для использования внутри ПЛИС 74 МГц.
Я использовал «Настроить модуль ФАПЧ» в IceCube2 и использовал следующую конфигурацию: - Раздел «Тип ФАПЧ»: - Глобальные сети, управляемые выходом ФАПЧ: 1;- Выделенная панель с часами;- Режимы работы ФАПЧ: - Режим без компенсации;- Дополнительные настройки задержки: нет;- частота: - вход - 37 МГц;- Выход - 74 МГц;- Другие - ничего не выбрано;
Затем я получаю два файла VHDL - SO_pll.vhd и SO_pll_inst.vhd.У меня есть файл Design.vhd, куда должен идти мой код.Если я правильно понимаю документацию Lattice, мне нужно указать, что мой Design.vhd (его сущность) является модулем верхнего уровня, что я и сделал.Мне нужно включить SO_pll.vhd в список файлов дизайна в IceCube2, что я и сделал.И последнее - мне нужно использовать шаблон, предоставленный в SO_pll_inst.vhd, для создания экземпляра в моем основном коде PLL с помощью порта, отображающего сигналы PLL в сигналы в моем Design.vhd.Тут возникает проблема - как это сделать?
---Design.vhd---
library IEEE;
use IEEE.std_logic_1164.all;
entity Design is
port(
I_CLK: in std_logic
);
end entity Design;
architecture RTL of Design is
signal S_CLK : std_logic;
signal S_RESET : std_logic;
begin
SO_pll_inst: SO_pll
port map(
REFERENCECLK => I_CLK,
PLLOUTCORE => open,
PLLOUTGLOBAL => S_CLK,
RESET => S_RESET
);
end RTL;
---SO_pll_inst.vhd---Generated by IceCube2
SO_pll_inst: SO_pll
port map(
REFERENCECLK => ,
PLLOUTCORE => ,
PLLOUTGLOBAL => ,
RESET =>
);
---SO_pll.vhd---Generated by IceCube2
library IEEE;
use IEEE.std_logic_1164.all;
entity SO_pll is
port(
REFERENCECLK: in std_logic;
RESET: in std_logic;
PLLOUTCORE: out std_logic;
PLLOUTGLOBAL: out std_logic
);
end entity SO_pll;
architecture BEHAVIOR of SO_pll is
signal openwire : std_logic;
signal openwirebus : std_logic_vector (7 downto 0);
component SB_PLL40_CORE
generic (
--- Feedback
FEEDBACK_PATH : string := "SIMPLE"; -- String (simple, delay,
phase_and_delay, external)
DELAY_ADJUSTMENT_MODE_FEEDBACK : string := "FIXED";
DELAY_ADJUSTMENT_MODE_RELATIVE : string := "FIXED";
SHIFTREG_DIV_MODE : bit_vector(1 downto 0) := "00";
-- 0-->Divide by 4, 1-->Divide by 7, 3 -->Divide by 5
FDA_FEEDBACK : bit_vector(3 downto 0) := "0000";
-- Integer (0-15).
FDA_RELATIVE : bit_vector(3 downto 0) := "0000";
-- Integer (0-15).
PLLOUT_SELECT : string := "GENCLK";
--- Use the spread sheet to populate the values below
DIVF : bit_vector(6 downto 0);
-- Determine a good default value
DIVR : bit_vector(3 downto 0);
-- Determine a good default value
DIVQ : bit_vector(2 downto 0);
-- Determine a good default value
FILTER_RANGE : bit_vector(2 downto 0);
-- Determine a good default value
--- Additional C-Bits
ENABLE_ICEGATE : bit := '0';
--- Test Mode Parameter
TEST_MODE : bit := '0';
EXTERNAL_DIVIDE_FACTOR : integer := 1
-- Not Used by model, Added for PLL config GUI
);
port (
REFERENCECLK : in std_logic; -- Driven by core logic
PLLOUTCORE : out std_logic; -- PLL output to core logic
PLLOUTGLOBAL : out std_logic; -- PLL output to global network
EXTFEEDBACK : in std_logic; -- Driven by core logic
DYNAMICDELAY : in std_logic_vector (7 downto 0); -- Driven by core
logic
LOCK : out std_logic; -- Output of PLL
BYPASS : in std_logic; -- Driven by core logic
RESETB : in std_logic; -- Driven by core logic
LATCHINPUTVALUE : in std_logic; -- iCEGate Signal
-- Test Pins
SDO : out std_logic; -- Output of PLL
SDI : in std_logic; -- Driven by core logic
SCLK : in std_logic -- Driven by core logic
);
end component;
begin
SO_pll_inst: SB_PLL40_CORE
-- Fin=37, Fout=74
generic map(
DIVR => "0000",
DIVF => "0001111",
DIVQ => "011",
FILTER_RANGE => "011",
FEEDBACK_PATH => "SIMPLE",
DELAY_ADJUSTMENT_MODE_FEEDBACK => "FIXED",
FDA_FEEDBACK => "0000",
DELAY_ADJUSTMENT_MODE_RELATIVE => "FIXED",
FDA_RELATIVE => "0000",
SHIFTREG_DIV_MODE => "00",
PLLOUT_SELECT => "GENCLK",
ENABLE_ICEGATE => '0'
)
port map(
REFERENCECLK => REFERENCECLK,
PLLOUTCORE => PLLOUTCORE,
PLLOUTGLOBAL => PLLOUTGLOBAL,
EXTFEEDBACK => openwire,
DYNAMICDELAY => openwirebus,
RESETB => RESET,
BYPASS => '0',
LATCHINPUTVALUE => openwire,
LOCK => open,
SDI => openwire,
SDO => open,
SCLK => openwire
);
end BEHAVIOR;
Я только что добавил Design.vhd и SO_pll.vhd в список файлов дизайна.Если я запускаю синтез с использованием Lattice LSE, то синтез завершается успешно, но в отчете о размещении говорится, что используются 0/2 ФАПЧ.Если я запускаю Synthesys с Synplify Pro, в отчете говорится, что используется 1/2 PLL, но я действительно не могу его использовать, поскольку не сопоставил сигналы.
Когда я получаю шаблон из SO_pll_inst.vhd и помещаю его вВ архитектуре Design.vhd я получаю сообщение об ошибке: «ОШИБКА - синтез: design.vhd (19): so_pll не объявлено. VHDL-1241» Ну, видимо, я что-то упустил.Если это шаблон, я ожидал бы просто отобразить свой сигнал и запустить его.Но нет.Либо я делаю что-то не так, либо ... Я делаю что-то не так :) Пожалуйста, помогите.