在xilinx-ise的旧Xilinx综合工具(XST)中,可以直接在设计中手动实例化IPAD
或OPAD
原语。它允许设计人员隐藏端口,使其不会暴露在顶层。
在XST中,*PAD
实例中未绑定的组件并被视为黑盒子。甚至translate
抱怨黑盒子。但是,map
神奇地认出了这些组件并且很开心,所以放置和放置。路线很成功。甚至可以使用VHDL属性指定填充位置,从而隐藏对UCF文件的需要。并不是说我在测试后使用了这个功能,但它确实有效!
如何在Vivado中实现这一目标?
我创建了一个与Xilinx ISE相似的示例。在Xilinx Vivado中,我收到以下警告:
[Project 1-486]无法解析非原始黑盒子单元'OutPad'实例化为'OPad'[“C:/Temp/IOBuffer/src/top.vhd”:63]
这是我的测试代码:
library IEEE;
use IEEE.std_logic_1164.all;
library UniSim;
use UniSim.VComponents.all;
entity top is
port (
AC701_SystemClock_200MHz_p : in std_logic;
AC701_SystemClock_200MHz_n : in std_logic;
AC701_GPIO_Button_CPU_Reset : in std_logic;
AC701_GPIO_LED : out std_logic_vector(3 downto 0)
);
end entity;
architecture rtl of top is
attribute DONT_TOUCH : boolean;
attribute BLACK_BOX : string;
signal AC701_SystemClock_200MHz : std_logic;
signal SystemClock_200MHz : std_logic;
signal DataIn : std_logic;
signal DataOut : std_logic := '0';
signal DataInternal : std_logic := '0';
signal DataToPad : std_logic;
component OPAD is
port (
Pad : in std_logic
);
end component;
attribute DONT_TOUCH of DataToPad : signal is FALSE;
attribute DONT_TOUCH of OPAD : component is FALSE;
attribute BLACK_BOX of OPAD : component is "YES";
begin
BufDS: IBUFDS
port map (
I => AC701_SystemClock_200MHz_p,
IB => AC701_SystemClock_200MHz_n,
O => AC701_SystemClock_200MHz
);
ClkBuf: BUFG
port map (
I => AC701_SystemClock_200MHz,
O => SystemClock_200MHz
);
DataIn <= AC701_GPIO_Button_CPU_Reset;
DataOut <= DataIn when rising_edge(SystemClock_200MHz);
DataInternal <= DataInternal xor DataIn when rising_edge(SystemClock_200MHz);
AC701_GPIO_LED <= (others => DataOut);
Buf: OBuf
port map (
I => DataInternal,
O => DataToPad
);
OutPad: OPAD
port map (
Pad => DataToPad
);
end architecture;