2017-01-29 7 views
0

私は、aclrn = 0の場合は非同期リセットに、sclrn = 0の場合は同期してDラッチを実装する必要があります。実装は、両方のリセット方法に従うことができるはずです。VHDLでの非同期とシンクロ両方のリセットを伴うDラッチ

ここでは、基本的なDラッチに基づくVHDL(私はプロセスのみを含む)で思いついたことがあります。

process(aclrn,clock) 
begin 
if (aclrn='0') then 
q <= '0'; 
elsif (rising_edge(clock)) then 
    if (sclrn='0') then 
    q <= '0'; 
    else 
    q <= d; 
end if; 
end if; 
end process; 

どこ

clock, d, aclrn, sclrn : in std_logic; q : out std_logic 

私は、プロセスは、引数が、唯一のaclrnとクロックとしてsclrnに取る必要がないことを修正するのですか?他の矛盾はありますか?

ありがとうございます。

+0

感度リストには問題ありません。他の矛盾:ブール式(3x)の括弧は不必要な混乱、インデントは矛盾しています。 –

+0

@BrianDrummondそれを指摘していただきありがとうございます!かっこはJavaの習慣です。 –

答えて

2

あなたはDラッチだが、コード化されたフリップフロップと言う。あなたは本当にDラッチが必要ですか、不注意にレジスタの代わりにラッチを使用していますか? 本当にフリップフロップが必要な場合は、正しく完了しています。 aclrnとclockを機密リストに入れました。 sclrnは同期しているので、リストに入れる必要はありません。ポジティブエッジクロックと非同期でフリップフロップのためのポジティブ・エッジクロックと同期セット

architecture archi of registers_3 is 
begin 
    process (C) 
    begin 
     if (C'event and C='1') then 
      if (S='1') then 
       Q <= '1'; 
      else 
       Q <= D; 
      end if; 
     end if; 
    end process; 
end archi; 

とXSTのコード例ではフリップフロップのための ザイリンクスのXSTのチュートリアルの例では、これらを混合することにより

architecture archi of registers_2 is 
begin 
    process (C, CLR) 
    begin 
     if (CLR = '1')then 
      Q <= '0'; 
     elsif (C'event and C='1')then 
      Q <= D; 
     end if; 
    end process; 
end archi; 

をリセット2つはあなたの答えを得る。あなたのコードに間違いはありません。あなたが尋ねられたことをコードしているかどうかを知る最良の方法は、シミュレーションすることです。

ラッチが必要な場合、ラッチはエッジではなくレベルに影響されやすいことに注意してください。これはポジティブゲートと非同期リセット付きのLATCHの例です

architecture archi of latches_2 is 
    begin 
     process (CLR, D, G) 
     begin 
      if (CLR='1') then 
       Q <= '0'; 
      elsif (G='1') then 
       Q <= D; 
      end if; 
     end process; 
    end archi; 
+0

ありがとう、偉大な答え!あなたは正しい、私はDフリップフロップを意味した、それはちょうど私の教科書は、便宜上、これらの2つの名前を区別していない、それを残念。 –

+0

@ P.Lance大丈夫です。 FFの代わりにラッチを使うのは非常に一般的です:) – Laleh

+0

@BrianDrummond完了! :) – Laleh

関連する問題