1

私は学校のプロジェクトに取り組んでおり、次のフリップフロップ エンティティがあります。

-- define the width-bit flip flop entity
entity flopr is
    generic (width: integer);
    port (clk, reset: in  STD_LOGIC;
          d:          in  STD_LOGIC_VECTOR(width-1 downto 0);
          q:          out STD_LOGIC_VECTOR(width-1 downto 0));
end flopr;

-- define the width-bit flip flop architecture
architecture asynchronous of flopr is
begin
    process(clk, reset) 
    begin
        if reset ='1' then 
            q <= (others => '0');
        elsif rising_edge(clk) then
            q <= d;
        end if;
    end process;
end;

(ベクトル)の代わりにSTD_LOGIC信号 (ビット)を渡す必要があります。dqSTD_LOGIC_VECTOR

ただし、変換せずに単純に渡すと、サイズが 1 であっても、渡される型 ( ) がエンティティSTD_LOGIC内の型 ( ) と同じではないため、コンパイル エラーが発生します。floprSTD_LOGIC_VECTORSTD_LOGIC_VECTOR

ちょっとしたグーグルと実験から、私はこれを思いつきました:

zeroMFlopr: entity work.flopr generic map(1) port map(clk => clk, reset => reset, d => (0=>zeroE), q(0) => zeroM);

zeroEzeroMSTD_LOGICです。

それはコンパイルされますが、これはこれを行う正しい方法ですか?

編集: Quartus でコンパイルしようとしましたが、正常に動作したと言いましたが、modelsim でコンパイルしようとすると、次のエラーが表示されます。

正式な "d" の実際の式 (集計) は、グローバルに静的ではありません。

エラーは、私が上に投稿した行を参照しています。

4

2 に答える 2