VHDL - PLL 的直接实例化

VHDL - direct instantiation for PLL

我正在尝试在 DE0 板上制作 VGA 控制器并制作了以下代码:

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;

编译模型时出现以下错误消息:

Error (12006): Node instance "altpll_0" instantiates undefined entity "PLL_altpll_0"

我正在实例化两个组件,第一个 SYNC1 是 640 x 480 显示器的同步计数,第二个 (CLK_25) 是由 quartus II 生成的 PLL 时钟。使用以下型号:

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)?

在Quartus Prime中用MegaWizard生成PLL,然后在设计中包含生成的.qip文件。我假设 MegaWizard 用于在您的示例中生成 PLL_altpll_0

然后将生成的PLL实体编译成工作(或另一个库,然后显示在.qip文件中),然后您可以使用实体实例化来实例化PLL,从而省去冗余组件声明在.qip文件中使用生成的 PLL 的体系结构。代码类似,假设 workPLL_altpll_0 被编译为 work 库:

altpll_0 : entity work.PLL_altpll_0
  port map (