2016-11-04 5 views
-1

私のコード( - >)でイベントトリガを使用しようとしています。これは合成されますか?イベントトリガーはVerilogで合成可能ですか?

always @(posedge clk) begin 
count <= count + 1; 
-> x; 
end 

always @(x) flag = 1; 

これは単なるサンプルコードです。私がしたいのは、私が旗を高くしたいという事件がこれまでにあった時でした。そうでなければ、それは低く保つべきです。私の場合、カウント値は7クロックサイクルごとに増加します。これに対してイベントトリガーを使用できますか?私の要求を満たすために私は何ができますか?

+0

おそらくそうではありません。あなたはそれを試したとき何が起こったのですか? – toolic

答えて

0

ツールがそれをサポートすることを選択した場合は、シミュレーションで実行できるものは合成することができます。しかし、ほとんどのRTL合成ツールはこれをサポートしていません。

単純なケースでは、イベントトリガーをタスクコール(またはSystemVerilogのvoid関数呼び出し)に置き換えることができます。

always @(posedge clk) begin 
    count <= count + 1; 
    x; 
end 
task x; 
flag <= 1; 
endtask 
-1

ソフトウェアによっては合成することもできますが、それは良いコードではありません。これを行うと、コードは同期しません。 同期するには、すべての«常に»ステートメントがclkの同じエッジでトグルする必要があります。

0

合成可能なコードでこれを行うべきではありません。いくつかのツールは同等のロジックを作成することができますが、代わりに使用する必要があるほとんどのオプションがあります。例えば、あなたのコードのように書き換えることができます。

always @(posedge clk) begin 
    count <= count + 1; 
    -> x; 
end 

always @(count) flag = 1; 
関連する問題