2

チップを初期化するためのVHDLステートマシンをどのように賢く設計しますか。

私の現在の設計は(擬似コードで):

....
....
ケース状態:
s0 =>
VHDL_CODE_FOR_WRITING_VALUE_TO_REGISTER
状態の場合:= s1;
s1 =>
VHDL_CODE_FOR_WRITING_ANOTHER_VALUE_TO_REGISTER
状態の場合:= s1; s2
=>
DO_SOMETHING_ELSE_TO_FINISH_INIT........
エンド ケースの場合;

s0とs1のコードは、レジスタに書き込まれる値によってのみ異なります。

これは私にもっと賢い方法があるに違いないと思いました(それはまだ合成可能です)?

何かもっと賢くできると思ったのは、「自分を繰り返さないでください」というフレーズですが、これがVHDLに当てはまるかどうかはわかりません。

4

2 に答える 2

3

状態s0とs1に共通の割り当てがある場合は、それをcaseステートメントから引き出します。

case state:
when s0 =>    
    a <= '0';
    b <= '1';
    c <= '0';
    nextState <= s1;
when s1 =>    
    a <= '0';
    b <= '1';
    c <= '1';
    nextState <= s2;
when s2 =>    
    a <= '1';
    b <= '0';
    c <= '1';
endcase;

...になるだろう...

a <= '0';
b <= '1';
c <= '1';

case state:
when s0 =>    
    c <= '0';
    nextState <= s1;
when s1 =>    
    nextState <= s2;
when s2 =>    
    a <= '1';
    b <= '0';
endcase;

...またはそれが適切でない場合は、コードを関数にプルして、それぞれの場合にそれを呼び出します。

ただし、これに固有のVHDLはありません。

于 2012-08-13T16:57:11.410 に答える
2

VHDLアンサー(私を含む)の継続的なリフレインは「ソフトウェアではなくハードウェアを考える」ですが、今回はソフトウェアの思考プロセスがあなたに役立つものです:)

通常の自分自身を繰り返さない(DRY)ソリューションは、関数またはプロシージャに必要な動作をカプセル化することです。これはVHDLで行うことができ、有能なツールであれば問題ありません。

于 2012-08-14T08:44:44.230 に答える