2016-04-27 7 views
-2

私はクロック信号を生成するためにISE 14.7を使って簡単なコードを書いていますが、iSimの出力は常に0になります。< =と時計が働いている理由を教えてください。Verilogクロックジェネレータエラー?

module nonblocking(clk); 
output reg clk; 

initial 
    #10 clk =0; 

always @ (clk) 
#10 clk = ~ clk; // change to <= to work 

endmodule 
+0

合成またはシミュレーション用のコードですか?どのツールチェイン/シミュレータ/シンセツール/コンパイラを使用していますか? 'clk'の値を反転させて' always @ clk'を使用している間に遅延がないということを考えれば、正確に何を達成しようとしていますか? – hexafraction

+0

私は単純に次のようにしたいと思います: 'initial clk = 0;常に#10 clk =〜clk; ' – rahulcodesinverilog

答えて

0

このコードは正直なところ意味がありません。

clkに基づいて、clkの値は~clkである必要があります。 <=を使用するときは、少なくとも非ブロック割り当てを指定していますが、これはやや意味がありますが、まだ分かりません。

あなたはシミュレーションのためのクロックジェネレータを使用する場合は、最初のブロックの中に、以下の(10nsの期間を与える)を使用する:あなたはFPGA合成用のクロックジェネレータを使用する場合は

forever begin 
    #5 clk <= ~clk; 
end 

を、いずれかに物理的な発振子を接続デバイスのクロック入力ピンに接続するか、または内蔵発振器を使用します(デバイスで使用可能な場合)。 DCM/PLL/CMT/MMCM/FPGAを使用してクロック周波数を調整することができます。

+1

永遠に最初の内にする必要があります。 – Morgan

+0

私はISE 14.7を使用していますが、ノンブロッキング割り当てを使用すると、iSimにクロックが表示されます –

+0

@ HayderAl-Amilyうまくいくかもしれませんが、明確な方法ではありません。クロックを生成したい場合は、他のコードの読者には分かりやすい方法で生成します。時間の経過とともにレジスタに割り当てられる非エッジトリガのプロセスにあるという事実は、クロックジェネレータがテストベンチのために通常作られる方法と同様には見えません。このコードは、合成可能にするために書かなければならないものと一致しません。 – hexafraction