2007/07/26(木)verilog HDLのalwaysで悩み

verilog HDLを勉強がてら遊んでいるのですが、つまずいています。

よくあるサンプルですが、

input [1:0] SW;
reg   [3:0] counter;

always @(posedge SW[0] or posedge SW[1]) begin
	if (SW[1] == 1)	// reset
		counter <= 0;
	else
		counter <= counter + 1;
	end
end

と書くと正しく動作します。ですが、

always @(posedge SW[0] or posedge SW[1]) begin
	if (SW[0] == 1)
		counter <= counter + 1;
	else
		counter <= 0;
	end
end

と書くとまともに動作しません。SW[0]を押したとき、値が不定値になります。またSW[0]を押している間、counterの値が随時変化し全く定まりません。どなたかお助け。

追記

シミュレーションだとどちらも正常に動きます。なんかバグ(不具合?)っぽい予感がヒシヒシと(汗)

OK キャンセル 確認 その他