プロセス ステートメントは非常に便利です。使用しないように言われたのはどのような状況ですか?
プロセス ステートメントを使用するケースはさまざまありますが、そのいくつかを以下に概説します。
process ステートメント (合成用) の最も一般的な使用法の 1 つは、クロック信号に同期するロジックを記述することです。
DATA_REGISTER : process(CLOCK)
begin
if rising_edge(CLOCK) then
if RESET = '1' then
COUNTER <= (others => '0');
else
COUNTER <= COUNTER + 1; --COUNTER is assumed to be of type 'unsigned'
end if;
end if;
end process;
設計がより複雑になるにつれて、必然的にある時点でステート マシンを実装することになります。実装するステート マシンのスタイルに応じて、1 つまたは複数のプロセスが使用されます。
動作コードの場合、プロセスを待機ステートメントと組み合わせて使用して、テスト ベクトルを生成したり、実際のシステムの動作をモデル化したりできます。以下は、私のテストベンチの 1 つから取った 100MHz クロック ジェネレーターの非常に基本的な例です。
architecture BEH of ethernet_receive_tb is
signal s_clock : std_logic := '0'; --Initial assignment to clock kicks off the process.
begin
CLOCKGEN : process(s_clock)
begin
s_clock <= not s_clock after 5 NS;
end process CLOCKGEN;
...
プロセスで非同期ロジックを記述することもできます。この場合、プロセスで読み取られるすべてのシグナルをセンシティビティ リストに含める必要があり、推論されたラッチを回避するために出力が常に定義されていることを確認する必要があります。
IF_ELSE: process (SEL, A, B)
begin
F <= B; -- Default assignment
if SEL = '1' then
F <= A;
end if;
end process;
process ステートメントが非常に便利で、さまざまな状況で使用できることを理解していただければ幸いです。これがあなたの質問に答えたことを願っています!