我理解如何在Quartus II中生成PLL组件并在框图中使用它,但如何在下面的VHDL代码中将CLKOUT连接到GPIO引脚?
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;
答案 0 :(得分:3)
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'
状态驱动器以避免
警告