我有一个像这样定义的VHDL实体:
entity RealEntity is
port(
CLK_50MHZ: in std_logic;
LED : out std_logic_vector(3 downto 0)
);
end RealEntity;
如果我还有LED<0>..LED<3>
和CLK_50MHZ
的UCF条目,那么我可以直接编译这个实体。
但是,我的电路板上实际上没有50 MHz时钟,所以我必须使用时钟管理器芯片。我正在使用Xilinx工具,它有一个添加DCM核心的向导,然后我将它包装在另一个VHDL实体中以方便使用:
entity dcm is
port(
CLK_32MHZ: in std_logic;
CLK_50MHZ: out std_logic
);
end dcm;
其中CLK_32MHZ
是我的UCF中实际存在的东西。
要连接这两个,我目前正在使用第三个实体作为我的顶级实体:
entity main is
port(
CLK_32MHZ : in std_logic;
LED : out std_logic_vector(3 downto 0)
);
end main;
architecture arch of main is
signal CLK_50MHZ : std_logic;
component dcm
port(
CLK_32MHZ : in std_logic;
CLK_50MHZ : out std_logic
);
end component;
component RealEntity
port(CLK_50MHZ : in std_logic;
LED : out std_logic_vector(3 downto 0)
);
end component;
begin
inst_dcm : dcm
port map(
CLK_32MHZ => CLK_32MHZ,
CLK_50MHZ => CLK_50MHZ
);
inst_RealEntity : RealEntity
port map(
CLK_50MHZ => CLK_50MHZ,
LED => LED
);
end arch;
如您所见,第三个实体是100%样板。
我的问题是,是否可以避免编写此main
实体,而只是直接使用RealEntity
和dcm
,并通过共享连接两个CLK_50MHZ
端口他们的名字,基本上模仿我的UCF文件中存在的CLK_50MHZ
?
答案 0 :(得分:3)
我不知道语言本身有任何这样的设施,我宁愿看不到这样的&#34;隐含的连接&#34;因为太脆弱了。顶层通常不是相当样板,而是适配器层,这样的隐式连接会导致太多意外错误。
有简化创建样板顶层的工具:Mentor Graphics&#34; Renoir&#34; cough "HDL Designer"就是这样一个工具,可以从程序框图中自动创建它:您可以将其视为可编译的文档......但价格昂贵。
我从来没有亲自与Emacs相处,但我希望它能够为你创建样板非常接近:在那里,我会鼓励它来创建默认&#34;隐含连接&#34;为了你,拯救你的工作,仍然给你最终控制。
Sigasi也被提及,非常值得一看。
我有兴趣听到其他工具来实现同样的目标。
答案 1 :(得分:3)
不知何故,您必须告诉工具如何连接DCM和您的真实实体。你的&#34;样板&#34;顶级实体就是实现这一目标的。您无法在UCF文件中执行此操作,因为它不允许您创建连接,只需将各种属性附加到您所建立的连接。
所以你的问题就变成了什么工具之一,使你能够“连接起来”#34;尽可能高效。 Brian在那里列举了一些选项...
您可以使用直接实例化减少样板。删除component
声明,然后执行:
inst_RealEntity : entity work.RealEntity
port map(
CLK_50MHZ => CLK_50MHZ,
LED => LED
);