Modelsimのシミュレーションは「正しく動作しますが、「正しく」定義する方法は指定していません。私はそれをシミュレートし、何も面白いことは起こりません。cnt
は、それを初期化する仕組みがないので、4'bx
のままです。私はあなたがsig
のすべての立上りエッジでインクリメントするようにcnt
を意図していると思います。あなたがcnt
を初期化(コメントアウトコードを参照)ない場合、これが発生します。このコードを合成することができる一方で、しかし
https://www.edaplayground.com/x/4zXf
を、(これは同期デザインではなく、それはナンセンスに合成します加算器と4つのラッチ)。あなたがsig
の立ち上がりエッジ毎にインクリメントするcnt
を必要とし、あなたはこの設計をインクリメントする必要があると仮定すると、同期:
always @(posedge sig)
cnt <= cnt + 1;
これは、加算器と4 D型フリップフロップに合成されます。
実際のハードウェアではカウンタが不明な値を持つため(シミュレーションでは4'bx
)、カウンタをリセットするのが普通です。
reg [3:0] cnt = 4'b0;
ができますが、代わりにリセット信号を検討する必要があります:あなたは、FPGAに
cnt
を初期化して逃げることができ
always @(posedge sig, posedge reset)
if(reset)
cnt <= 4'b0; // or some other reset value
else
cnt <= cnt + 1;
私はsig
のあなたの命名に悩まされています。ほとんどの人はこれをclk
またはclock
などと呼んでいます。この名前は、おそらく同期設計に慣れていないことを示唆しています。もしそうなら、あなたはそれについて知っているべきであり、この答えhereも読むべきです。