VHDL - PLL的直接实例化

时间:2016-02-06 14:33:13

标签: vhdl intel-fpga quartus

我正在尝试在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;

编译模型时,我收到以下错误消息:

  

错误(12006):节点实例“altpll_0”实例化未定义的实体“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)?

1 个答案:

答案 0 :(得分:2)

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

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

altpll_0 : entity work.PLL_altpll_0
  port map (