1

VHDLを使用してTフリップフロップをモデル化しようとしています。

library ieee;
use ieee.std_logic_1164.all;
entity tff is
    port (
        clk: std_logic;
        t: in bit;
        q: out bit;
        qbar: out bit);
end tff;

architecture tff_arch of tff is
begin
    process(clk)
    begin
        if (clk = '1' and t = '1')
        then
            q <= not q;
            qbar <= not qbar;
        end if;
    end process;
end tff_arch;

しかし、私が得ているエラーは

Error: CSVHDL0168: tff.vhdl: (line 17): Identifier 'q' is not readable
Error: CSVHDL0168: tff.vhdl: (line 18): Identifier 'qbar' is not readable

私が思うエラーの理由は、qが初期化されていないときに「notq」を使用しているためです。私が間違っている場合は、ここで私を訂正してください。

そして、この問題を回避するために何をすべきでしょうか?Symphony EDAの無料バージョンを使用して、Dフリップフロップとそのテストベンチの波形を正しくモデル化しました。

4

3 に答える 3

3

昔は出力を読むことができなかったので、次のいずれかを行う必要がありました。

  • それをinout(あなたが本当に意味する方向を混乱させているので少し不快です、ちょうどあなたがそれを読むことができるように)-これは機能しますが、業界では広く使用されていません(私が知る限り)
  • にしますがbuffer、(VHDL-2002より前の)欠点があり、その信号の残りのすべての階層をbuffersで駆動する必要があります。私の経験ではほとんど使用されていません。
  • と中間signal(読み取り可能)を使用してから、割り当てを使用して出力をその信号の値に設定します。これは、実践的なエンジニアの間でそれを行う慣用的な方法です。

VHDL-2008以降、出力ポートを読み取ることができます(ただし、これは検証目的でのみ使用することを目的としています)。VHDL-2008モードを有効にするには、おそらくツールスイッチが必要です。(そして、あなたの特定のシミュレーター/シンセサイザーがまだVHDL-2008をサポートしていない可能性があります。これは、EDAツールの世界で驚異的な開発ペースを示しています!)

于 2011-10-27T09:04:22.783 に答える
1

qエンティティの出力です。

出力を読み取ることはできません。とても簡単です。

フィードバックループに使用する内部バージョンが必要です。その後q <= local_q、;

于 2011-10-27T08:49:41.857 に答える
0

VHDLをあまりよく覚えていませんが、これはあなたに手がかりを与えるかもしれません:

問題は、それqはあなたの実体からの信号にすぎないので、あなたがそれを読み込もうとしたときにアクセスするものが何もないということです。

したがって、宿題を解決しないために、次のように考えてください。

それにアクセスするために入力として持つ必要があるか(おそらくあなたが望むものではない)、または内部qに保存する必要がありますq(または少なくとも次の値)。これは、パーツで(または)をq指定することで実行できます。例えば:qq_nextsignalarchitecture

architecture tff_arch of tff is
  signal q_next: std_logic;
begin

等々。同じことがあなたのqbar信号にも当てはまります。

于 2011-10-27T08:52:45.990 に答える