スイッチとキーを含む常にブロックがあります。機密リストにキーしかない場合、正常に動作します (コードを 1 回だけ実行してからブロックを終了します)。スイッチを感度リストに追加すると、キーが押されていないときにトリガーするだけなのに、キーを押している間はおかしくなり、無期限にループしているように見えます。
キーを押すたびに1回だけインクリメントするカウンターを実装しようとしています。
センシティビティ リストにキーのみを含む作業コードを次に示します (sw[1] は、カウントアップまたはカウントダウンのどちらであるかを示します)。
always @ (negedge key[2]) begin
if (~key[2])
begin
if (sw[1] == 0) begin
if (p3ctr == 15) p3ctr = 0;
else p3ctr = p3ctr + 1;
end
else if (sw[1] == 1) begin
if (p3ctr == 0) p3ctr = 15;
else p3ctr = p3ctr - 1;
end
end
end
壊れたコードは次のとおりです (スイッチがオンになったときにカウンタをリセットするために sw[7] を使用しています。キー [2] が押されている間、このコードは無期限にループします)。
always @ (negedge key[2] or posedge sw[7]) begin
if (~key[2])
begin
if (sw[1] == 0) begin
if (p3ctr == 15) p3ctr = 0;
else p3ctr = p3ctr + 1;
end
else if (sw[1] == 1) begin
if (p3ctr == 0) p3ctr = 15;
else p3ctr = p3ctr - 1;
end
end
else begin
p3ctr = 0;
end
end
センシティビティ リストのシグナルが変更されたときに、always ブロック内のコードが 1 回だけ実行されると思っていましたが、明らかにそうではありません。
キーを押すたびにこのコードを1回だけ実行して、カウンターが適切に動作するようにする方法はありますか?
ありがとう!