1

私は汎用パラメーターを持つステートマシンを作成していますが、いくつかの状態の存在はこれに依存しています。私は列挙型のようなもので定義された状態を持っているので (vhdl 用語を知りません)、ジェネリックに応じてこの列挙型を次のように定義できるかどうか疑問に思います。

generic(x: bool);  -- in the entity
....

architecture ...
    if x then generate
        type states_t is (State1, State2, State3ifX)
    else
        type states_t is (State1, State2)
    end generate;
    variable state : states_t;
begin
   case state is
       ....
       if x then generate
           when State3ifX =>
                ...
       end if;
   end case
end architecture;

自重を運ぶ必要がありますか (状態 3 のロジック、それに陥る危険性 (私の場合は放射を期待しないので問題ありません)、以降の追加ビットceil(ld(3))=2 > ld(2)=1)、または不要な状態を削除する可能性がありますか? ?

(私の場合、削除できる状態がいくつかありますが、個別のアーキテクチャは努力する価値がありません)

4

3 に答える 3

2

ジェネリックを使用してオプションで生成されるプロセスで「状態」タイプを定義できます。以下の参照例を参照してください。

entity blabla is
   generic(sel: std_logic := '0');
port(
...

architecture Behavioral of blabla is
begin

q1: if sel='0' generate
p: process(clk)
    type t_state is (s1, s2, s3);
    variable state: t_state;
begin
    if rising_edge(clk) then
       ...
    end if;
end process;
end generate;

q2: if sel='1' generate
p: process(clk)
    type t_state is (s1, s2);
    variable state: t_state;
begin
    if rising_edge(clk) then
        ...
    end if;
end process;
end generate;
于 2013-05-30T17:12:48.543 に答える
1

必要なものを達成する方法が思いつきません。

利点として、「自重を運ぶ必要がある (状態 3 のロジック、それに陥る危険性)」という懸念は、心配する必要があるものではありません。シンセサイザーはロジックを最適化するため、状態レジスタは実際に到達できる州に必要な大きさです。

于 2013-05-31T09:39:43.903 に答える
0

私はそれが古いトレッドであることを知っていますが、それでもグーグルでヒットしているので、私がそれをどのように行っているかを追加します

ラベル: x が生成する場合

宣言 <- ここにタイプ、シグナル、および属性を入れます !!!!

始める

ur code

ラベルの生成を終了します。

2 番目のアーキテクチャ、またはさらに単純な別のエンティティ (名前が少し異なる別の vhd ファイル (_x1、次に _x2 など)) を検討することをお勧めします。

「汎用システム」は、より高度なケースでは実際には実用的ではないことがわかります (大量のコードを記述する必要があるため)。その後、異なるシンセサイザーを使用する可能性があるため、1 つのエンティティを持つ 2 つのアーキテクチャが機能しない可能性があり、内部のデカルレーションで生成されない可能性があります... . そのために別の vhd を作成します - すべてのケースで機能します)

乾杯

于 2016-10-28T10:26:43.640 に答える