当有一个单一的实体多种架构会发生什么?(What happens when there are mu

2019-10-22 15:18发布

假设一个具有已定义两种架构的实体。 这两个体系结构具有相同的实体(明显)工作,随后在两个设定的输出引脚为不同的值。 我的问题是,如何在程序(模拟器)确定哪些输出应该是(即其架构选择)?

下面是一个例子:

library ieee;
use ieee.std_logic_1164.all;

entity Exercise_4 is 
generic (n : integer := 4);
port(
a, b : std_logic_vector (n-1 downto 0);
clk, rst : std_logic;
q, qn : buffer std_logic_vector (n-1 downto 0));
end;

architecture one of Exercise_4  is
begin
process (clk, rst)
    begin
    if rst = '0' then 
        q <= (others=>'0');
    elsif (clk' event and clk = '0') then
        q <= a ;
    end if;
end process;

process (clk, rst)
begin
    if rst = '0' then 
        qn <= (others=>'1');
    elsif (clk' event and clk = '0') then
        for i in a'range loop
            qn(i) <= not q(i) ;
        end loop;
    end if;
end process;
end;

architecture two of Exercise_4  is
begin
process (clk,rst)
    begin
    if rst = '0' then 
        q <= (others=>'0'); 
        qn <= (others=>'0');
    elsif (clk' event and clk = '0') then
        q <= a;
        qn <= b ;
    end if;
end process;
end;

我做了模拟,发现是q得到分配的价值和QN得到说明B赋值。 看来,第二个体系结构已经由编译器,我不明白为什么程序决定这样做选择。

谢谢。

Answer 1:

如果没有指定自己choose²其架构,然后编译器会采取(假设编译器是符合IEEE标准)“与实体声明相关的最近分析了建筑体” [1]。

²您可以选择您喜欢例如,在组件声明节(你映射的信号),在更高的设计水平架构:

entity topentity is 
end;

architecture toparch of topentity is

  -- component instantiation
  component Exercise_4 is
  generic (n : integer := 4);
  port(
    a, b : std_logic_vector (n-1 downto 0);
    clk, rst : std_logic;
    q, qn : buffer std_logic_vector (n-1 downto 0));
  end component Exercise_4;

begin

  -- component mapping
  E4: entity work.Exercise_4(one)
  generic map ( .. )
  port( .. );

end architecture toparch;

[1] IEEE标准一〇七六年至2008年7.3.3缺省绑定指示,第4段。


免责声明:答案与上述意见的帮助下构建的。 无侵犯版权之意。 ,P



文章来源: What happens when there are multiple architectures on a single entity?