3

2 つのアーキテクチャが定義されているエンティティがあるとします。これらの 2 つのアーキテクチャは (明らかに) 同じエンティティで動作し、その後、2 つの出力ピンが異なる値に設定されます。私の質問は、プログラム (シミュレーター) は出力がどうあるべきか (つまり、どのアーキテクチャーを選択するか) をどのように決定するのかということです。

次に例を示します。

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が割り当てられたaの値を取得し、 qnが割り当てられたbの値を取得することがわかりました。2 番目のアーキテクチャがコンパイラによって選択されたようです。なぜプログラムがそうすることにしたのかわかりません。

ありがとうございました。

4

2 に答える 2