3

私は Verilog を初めて使用し、多くの問題を抱えています。たとえば、それぞれが 8 ビット幅の 8 つのセルを含む配列が必要です。以下は機能しません。

reg [7:0] transitionTable [0:7];
assign transitionTable[0] = 10;

やるだけtransitionTable[0] = 10;でもいいし、transitionTable[0] = 8'h10;何かアイデアはありませんか?

(それが明白で関連性がない場合: 有限状態マシンを作成し、状態遷移を配列で指定したいと考えています。これは、大規模なケース スイッチよりも簡単に思えるためです。)

4

4 に答える 4

8

使用するときは、配列をではなくassignとして宣言する必要があります。wirereg

于 2011-01-31T09:18:16.720 に答える
2

目標は FSM を設計することなので、状態値を配列に格納する必要はありません。これは通常、Verilogparameterstateregister とnext_statewith acase/endcaseステートメントを使用して行われます。

次の論文は完全な例を示しています: FSM Fundamentals

于 2011-01-31T14:05:26.820 に答える
1

これが合成を対象としている場合:

上記の回答を少し超えて、ツールがより良い最適化を実行できるように準拠する必要がある標準のFSMコーディングスタイルがあります。Cummingsの論文で説明されているように、通常、ワンホットはFPGAデバイスに最適であり、実際、ISE(デフォルト設定)はエンコーディングを無視し、デバイス上のリソースを最大限に活用すると思われるものを実装します。これにより、FSMが認識される場合、選択したステートエンコーディングに関係なく、ほぼ常にワンホットエンコードされたFSMが生成されます。

于 2011-02-08T19:38:02.223 に答える
0

では、質問に答えるために、Verilog 構文をもう少し掘り下げてみましょう。

まず、ビットの範囲を指定するには、[MSB:LSB]またはを実行し[LSB:MSB]ます。標準はMSB:LSBここにありますが、ここでは本当にあなた次第ですが、一貫性を保つようにしてください.

次に、配列のインスタンス化では次のようになります。

reg WIDTH reg_name NUMBER;

ここWIDTHで、 は各要素の「サイズ」でありNUMBER、配列内の要素の数です。

したがって、最初に次のことを行います。

reg [7:0] transitionTable [7:0];

次に、特定のバイト (8 ビット = 1 バイト) を割り当てるには、次のようにします。

initial begin
    transitionTable[0] = 8'h10;
end

Verilog を学ぶのに適した本は、Pong P. Chu によるFPGA Prototyping By Verilog Examplesです。

于 2011-01-31T01:40:48.083 に答える