0

注意してください、これは学習問題です。

vhdl で単純な d-latch を記述してから合成する必要があります。問題は、それが「単項」の d ラッチであり、その単一の入力がその出力 (Q および nQ) に直接マップされることです。これは、clk 信号が常に高い従来の非同期 d ラッチとして想像できます。これはロジックでは役に立たない要素であり、ほとんどの場合、ザイリンクス シンセサイザーは空のテクノロジ スキーマを提供します。ただし、この要素を保持する理由は、たとえば、スキーマに存在するがそのロジックには影響しないハードウェアの「透かし」を作成するためです。
次のコードを思いつきました:

entity dLatch is
  port(
    d: in std_logic;
    q: out std_logic);
end dLatch;

architecture dLatch_beh of dLatch is  
  signal o: std_logic;
begin
  latch: process(d)
  begin
    if d = '1' then
      o <= '1';
    elsif d = '0' then
      o <= '0';
    end if;
  end process;

  q <= o;
end;

このコードは、次のテクノロジ スキーマを生成します。

リンク

しかし、nQ 出力ポートを追加しようとすると、ラッチが重複します。

entity dLatch is
  port(
    d: in std_logic;
    q, nq: out std_logic);
end dLatch;

architecture dLatch_beh of dLatch is  
  signal o: std_logic;
begin
  latch: process(d)
  begin
    if d = '1' then
      o <= '1';
    elsif d = '0' then
      o <= '0';
    end if;
  end process;

  q <= o;
  nq <= not o;
end;

技術スキーマ:リンク

ここで 2 つの完全に等しいラッチが得られる理由がわかりません。追加の 'not' ゲートは 1 つだけだと思っていました。したがって、私の質問は、ラッチの重複を回避する方法、またはこの問題を解決する他の方法です。合成には Xilinx ISE Web Pack 14.6 を使用しています。

UPD 解決策は、シンセサイザーのフラグ -register_duplication を false に設定することです。

4

2 に答える 2

0

ラッチがまったくありません。[Technology] ビューを見ているので、マップされたザイリンクス コンポーネントが表示されています。まず、代わりに RTL ビューを確認する必要があります。

第二に、教授がおそらくあなたに気づいたように、ラッチは悪いです。彼は説明の中で、ツールがラッチを生成しないため、ビューが空白になるとさえ言っています。それらはファブリックには存在しません。

于 2013-11-07T13:23:29.543 に答える
0

解決策は、シンセサイザーのフラグ -register_duplication を false に設定することです。

于 2013-11-07T22:41:14.083 に答える