0

こんにちは、

ifステートメントの右側の値が何を意味するのか説明できると思いますか?私がよく理解していない例では、2つの宣言された符号なしベクトルがあります。

CONSTANT ZERO : UNSIGNED(3 DOWNTO 0) := (OTHERS=>'0); 
SIGNAL count : UNSIGNED(3 DOWNTO 0) := ZERO;

次に続きます:

IF clk'EVENT AND clk='1' THEN
    if count<(2-1) THEN
         output<='1';
         etc...

私が問題を抱えているのは一部です

カウントの場合< (2-1)

この2-1はどういう意味ですか?私にはいくつかのアイデアがあります。グーグルから、vector_name(n-1 downto 0)がベクトルを宣言する一般的な方法であることがわかりました。ここで、n=ビット数またはバスの幅です。ただし、これには例との共通点はないようです。別の推測:左側の値は符号なしバイナリ信号なので、おそらく2-nは、比較前のnをバイナリに変換する必要があることを意味しますか?

PSこの例は、分周器からのものです。

4

1 に答える 1

3

nude_stdを使用すると、言わない理由がわかりませんif count < 1

おそらくそれは、意図したものとの予期しないオフバイワンの問題に対する厄介な修正を半文書化する方法ですif count < 2。たとえば、パイプラインを支援するために比較が1サイクル早く移動された場合はどうでしょうか。

「オフバイワン」問題は、フェンスポスト問題とも呼ばれ、おそらく要件が混乱していました。ただし、パイプラインに変更が加えられたパイプライン設計でも発生する可能性があります。パイプラインの1つのステージが遅すぎる場合は、そのステージの一部を中断して、最終結果を変更せずに、前または後のサイクルで実行する必要があります。したがって、「count = 2の場合」に何かを行う必要があるが、それを1サイクル早く移動する必要がある場合は、「count」と比較する値を調整する必要があります。

これは決定的な答えではありません。実際のコードのコンテキストで検討する必要があります。

2つの「符号なし」宣言がある理由に関して:最初は名前付き定数であり、これは良い習慣です。大きなデザインでの入力が少なくなり、理解とメンテナンスが容易になります。

さらに良いのは:

subtype Digit is UNSIGNED(3 DOWNTO 0);
CONSTANT ZERO : Digit := (OTHERS=>'0'); 

SIGNAL count : Digit := ZERO;

など...次に、DigitとZeroをパッケージに移動すると、すべてのモジュールでそれらを再利用できます。

于 2012-12-15T13:59:04.097 に答える