以VHDL,UCF样式按名称连接端口

时间:2014-02-06 01:13:34

标签: vhdl xilinx

我有一个像这样定义的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实体,而只是直接使用RealEntitydcm,并通过共享连接两个CLK_50MHZ端口他们的名字,基本上模仿我的UCF文件中存在的CLK_50MHZ

2 个答案:

答案 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
      );