端口映射中的低电平有效复位

时间:2017-03-01 06:47:37

标签: vhdl reset fpga

因此,当在"顶层文件"上端口映射组件时,是否可以在端口映射时反转复位输入,如下例所示?

假设顶级文件代码为:

        entity topfile is
        port(
              clk : in std_logic;
              reset : in std_logic
              --Other input and outputs
                );


         architecture arch of topfile is
         begin

          c1: entity work.component1(behavioral)
          port map(
                    clk => clk,
                    reset => not reset,
                    .
                    .
                    .
                     );
          c2: entity work.component2(behavioral)
          port map(
                    clk => clk,
                    reset => not reset,
                    .
                    .
                    .
                     );


               end arch;

3 个答案:

答案 0 :(得分:2)

是的,您可以,但您必须使用VHDL 2008.在VHDL 2008之前,不允许在端口映射中使用所谓的表达式

不要轻易决定使用VHDL 2008。并非所有工具都支持VHDL 2008,即使您发现当前使用的所有工具都支持它,您是否可以确定将来可能希望切换到的任何工具都支持它?

鉴于使用VHDL 2008解决这个特定问题的优势很小,我建议使用这样的虚拟信号:

    entity topfile is
    port(
          clk : in std_logic;
          reset : in std_logic
          --Other input and outputs
            );


     architecture arch of topfile is
          signal resetn : std_logic
     begin

     resetn <= not reset;

      c1: entity work.component1(behavioral)
      port map(
                clk => clk,
                reset => resetn,
                .
                .
                .
                 );
      c2: entity work.component2(behavioral)
      port map(
                clk => clk,
                reset => resetn,
                .
                .
                .
                 );

端口映射中的表达式添加了额外的delta延迟,因此上面将模拟与原始代码完全相同

答案 1 :(得分:1)

正如Matthew所指出的那样,2008年之前的端口映射中不允许使用表达式,但在2008年之前支持转换函数,至少是Vivado,ISE和的ModelSim。您可以编写一个简单的invert函数并将其放在一个在其他源文件中获得use d的包中。像这样:

function invert (input : std_logic) return std_logic is
begin
  return not input;
end function;

然后,您可以在端口映射中使用reset => invert(reset),,而无需在工具中支持VHDL2008。这仍然非常易读,不使用任何额外的&#39;信号。

在相关的说明中,我建议不要在FPGA中使用有源低内部信号。器件中的时钟使能和复位通常不是低电平有效,因此将它们写为低电平有效会导致额外的反转逻辑。

答案 2 :(得分:0)

是的,你可以。只要“被操纵”信号的类型和长度与端口匹配。