2

以下のような2つのプロセスがあります。

A = 1、B = 2、C = 3とすると、シミュレーションで発生するのは、rising_edge B=1とC=2です。これは、私が望む結果です。

しかし、デザインがfpgaに実装されている場合にも、これが当てはまることが保証されていますか?

私が心配しているのは、プロセスBCの余分なif状態に関連する遅延です。

AB : process(A,clk)
begin
  if rising_edge(clk) then
    B <= A;
  end if;
end process;

BC : process(B,clk)
begin
  if rising_edge(clk) then
    if (some_statement) then
      C <= B;
    end if;
  end if;
end process;
4

3 に答える 3

4

B は A の値を取り (B=1)、C は B の値を取ります (C=2)。

ただし、実際に何をしたいのかを説明していないと思います。問題は、2 つのプロセスのセンシティビティ リストに A と B があることです。これは、プロセス AB では、A が変化するたびに B が変化することを意味しrising_edge(clk)ます。工程BCについても同様である。直列の 2 つのレジスタを記述したいと仮定すると、コードは次のようになります。

AB : process(clk)
begin
  if rising_edge(clk) then
    B <= A;
  end if;
end process;

BC : process(clk)
begin
  if rising_edge(clk) then
    if (some_statement) then
      C <= B;
    end if;
  end if;
end process;

この場合、このコードを FPGA に合成すると、2 つのレジスタが推論されます。プロセス BC のレジスタは、 のブール出力に接続されているレジスタ イネーブル信号を使用しますsome_statementsome_statementがすでに単一の信号である場合std_logic、追加の遅延は発生しませんが、ルーティング リソースが必要になるため、実際には必要のない場所でのイネーブル信号の使用は避ける必要があります。

于 2012-08-22T06:40:36.193 に答える
1

問題をもう少し明確にするために、Simon が質問に完全に答えたと思います。データの初期値が A=1、B=2、C=3 の場合、シミュレーション中に次のようになります。

  • 開始時 A=1、B=2、C=3
  • クロックの最初の立ち上がりエッジの後、A=1、B=1、C=2
  • クロックの 2 番目の立ち上がりエッジの後、A=1、B=1、C=1
  • その後、すべての信号が 1 になります。

if ステートメントの遅延は、「クロック周期」 - 「内部レジスタに必要なホールド時間」よりも長くなければ、問題が発生しません。そこに複数のクロックドメインからの信号を使用する非常に複雑なロジックがない限り、コードで問題が発生するリスクが少しあります (より正確なコードは、Simon によって送信されたものです)。

于 2012-08-22T08:12:36.017 に答える
0

しかし、設計が fpga に実装された場合にもこれが当てはまることは保証されていますか?

シンセサイザーは、シミュレーターでの VHDL の動作と一致する FPGA を生成する必要がありますそうでない場合は、バグです。

いくつかの「許容される」偏差があることに注意してください。たとえば、感度リストから右側の信号を逃した場合、シンセサイザーはそこに配置するつもりだったと想定しますが、シミュレーターは、あなたが何をしているのかを知っていると想定します。となり、ミスマッチが発生します。個人的には、この動作をバグと見なしていますが、あまりにも多くのツールによって固定されすぎており、変更されることはありません。

私が心配しているのは、プロセス BC の余分な if ステートに関連する遅延です。

あなたのようなクロックプロセスのすべては、単一のクロックティック内で「実行」されます。ロジックが多すぎる場合 (たとえば、ネストされた各ifロジックが新しいロジック レイヤーを導入する場合)、クロック ティックが必要以上に長く続く必要がある場合があります。

(すべてが「必要なだけ時間がかかる」最新のマイクロのソフトウェアとは異なり、キャッシュやTLBなどの状態によっては予測できないことがよくあります。)

于 2012-08-22T11:49:02.057 に答える