我了解如何在Quartus II中生成PLL组件并在框图中使用它,但是如何将ClkOut连接到下面的VHDL代码中的GPIO PIN?
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY pll_test3 IS
PORT(
CLOCK_24: IN STD_LOGIC_VECTOR(1 downto 0);
RST : IN STD_LOGIC;
CLKOUT : OUT STD_LOGIC;
GPIO_0 :inout std_logic_vector(35 downto 0)
);
END pll_test3;
ARCHITECTURE MAIN OF pll_test3 IS
component PLL3 is
port (
clk_in_clk : in std_logic := 'X'; -- clk
rst_reset : in std_logic := 'X'; -- reset
clk_out_clk : out std_logic -- clk
);
end component PLL3;
BEGIN
C1: PLL3 PORT MAP(CLOCK_24(0),RST,CLKOUT);
---this generates error because CLKOUT is an output
GPIO_0(0) <= CLKOUT;
END MAIN;
CLKOUT
端口是模式out
,但用于读取,因为在右侧在表达式GPIO_0(0) <= CLKOUT
和VHDL-2002(及以前)中非法读取输出端口。
用PLL时钟输出中的内部信号修复此问题,然后使用此信号驱动CLKOUT
和GPIO_0(0)
,并使用:
signal clkout_sig : std_logic;
begin
C1: PLL3 PORT MAP(CLOCK_24(0),RST,clkout_sig);
CLKOUT <= clkout_sig;
GPIO_0(0) <= clkout_sig;
请注意,GPIO_0(0)
的永久驱动器可能会发出Quartus的警告ii,由于GPIO_0
是模式inout
,因此请添加'Z'
状态驱动器以避免警告