VHDL — прямая реализация для PLL

Я пытаюсь сделать контроллер VGA на плате DE0 и сделал следующий код:

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;

ENTITY VGA is 
PORT (clk                       :   IN   std_logic;
        vga_hs, vga_vs          :   OUT std_logic;
        vga_r, vga_g, vga_b :   OUT std_logic_vector(3 DOWNTO 0));
END ENTITY VGA;

ARCHITECTURE A1 OF VGA IS
SIGNAL rst, clk25   :   std_logic;
BEGIN
SYNC1   :   ENTITY work.sync(A1)
            PORT MAP (clk25, vga_hs, vga_vs, vga_r, vga_g, vga_b);
CLK_25  :   ENTITY work.pll(rtl)
            PORT MAP (clk, rst, clk25);

END ARCHITECTURE A1;

Когда я компилирую модель, я получаю следующее сообщение об ошибке:

Ошибка (12006): экземпляр узла «altpll_0» создает неопределенный объект «PLL_altpll_0».

Я создаю два компонента: первый SYNC1 — это счетчик синхронизации для дисплея с разрешением 640 x 480, второй (CLK_25) — это часы PLL, генерируемые quartus II. Со следующей моделью:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

entity PLL is
port (
    clk_clk    : in  std_logic := '0'; --    clk.clk
    rst_reset  : in  std_logic := '0'; --    rst.reset
    clk_25_clk : out std_logic         -- clk_25.clk
);
end entity PLL;

architecture rtl of PLL is
component PLL_altpll_0 is
    port (
        clk       : in  std_logic                     := 'X';             --    clk
        reset     : in  std_logic                     := 'X';             -- reset
        read      : in  std_logic                     := 'X';             -- read
        write     : in  std_logic                     := 'X';             -- write
        address   : in  std_logic_vector(1 downto 0)  := (others => 'X'); -- address
        readdata  : out std_logic_vector(31 downto 0);                    -- readdata
        writedata : in  std_logic_vector(31 downto 0) := (others => 'X'); -- writedata
        c0        : out std_logic;                                        -- clk
        areset    : in  std_logic                     := 'X';             -- export
        locked    : out std_logic;                                        -- export
        phasedone : out std_logic                                         -- export
    );
end component PLL_altpll_0;

begin

altpll_0 : component PLL_altpll_0
    port map (
        clk       => clk_clk,    --       inclk_interface.clk
        reset     => rst_reset,  -- inclk_interface_reset.reset
        read      => open,       --             pll_slave.read
        write     => open,       --                      .write
        address   => open,       --                      .address
        readdata  => open,       --                      .readdata
        writedata => open,       --                      .writedata
        c0        => clk_25_clk, --                    c0.clk
        areset    => open,       --        areset_conduit.export
        locked    => open,       --        locked_conduit.export
        phasedone => open        --     phasedone_conduit.export
    );

end architecture rtl; -- of PLL

Как я могу напрямую создать pll(rtl) из рабочей библиотеки?


person hoboBob    schedule 06.02.2016    source источник
comment
Вы сгенерировали PLL с помощью MegaWizard Quartus?   -  person Martin Zabel    schedule 06.02.2016


Ответы (1)


Создайте PLL с помощью MegaWizard в Quartus Prime, а затем включите сгенерированный файл .qip в проект. Я предполагаю, что MegaWizard используется для генерации PLL_altpll_0 в вашем примере.

Сгенерированный объект PLL затем компилируется в работу (или другую библиотеку, которая затем отображается в файле .qip), и затем вы можете создать экземпляр PLL с созданием экземпляра объекта и, таким образом, исключить избыточное объявление компонента в архитектуре, которая использует сгенерированный ПЛЛ. Например, если workPLL_altpll_0 скомпилирован в библиотеку work:

altpll_0 : entity work.PLL_altpll_0
  port map (
person Morten Zilmer    schedule 06.02.2016