2012-03-19 6 views
2

私はFPGAとVerilogの新機能を使用していますが、シミュレータで実行するコードを取得するのに問題があります。 Isimシミュレータは私のコード内の整数で "動作していない"ようです。以下は、関連コードのスニペットです。私は整数が10に達するたびにSCK_genをトグルすることによってclkパルスを分割しようとしています。このコードをIsimで実行すると、SCK_genは決して値を変更しません。また、FPGA上にコードを組み込むと、期待通りに動作し、クロック周波数の1/10のパルスを観測することができます。誰かが私を正しい方向に向けることができれば、私は感謝しています。ありがとうザイリンクス、シミュレーションにおけるVerilogの整数型のIsim処理

//signals 
//for SCK_clock 
reg SCK_gen, SCK_hold; 
integer i; 
reg en_SCK; 
wire neg_edge_SCK; 


//SCK_generator 
always @(posedge clk, posedge reset) 
    if (reset) 
     begin 
      SCK_gen <= 0; 
     end 
    else 
     begin 
      i <= i+1; 
      SCK_hold <= SCK_gen; 
       if(i == 10) 
        begin 
         SCK_gen <= ~SCK_gen; 
         i <= 0; 
        end 
     end 

//detect neg edge of SCK 
assign neg_edge_SCK = SCK_hold & SCK_gen; 
+0

iのリセット値はありますか? –

答えて

4

オペランドのいずれかが 'x'の場合、算術演算または論理等価演算の結果は 'x'になります。 iが初期化されていないように見えるので、i <= i+1というステートメントはiには影響しません。したがって、(i == 10)の比較は常にfalseになります。

+0

私は投稿した直後にこの部分を見つけました。私は**初期**ステートメントでこの問題を解決しました。だから私はこの権利を持っているかどうかを確認するために、regまたは変数に初期値を指定しないと、値が割り当てられるまで値は** x **です。一方、ハードウェアで実装されている場合は、** 0 **の値をとります。これは正しいです?また、合成とハードウェアでの実装の前に私の**初期**ステートメントをコメントする必要がありますか、それらは通常無視されますか? –

+0

はい。必ずしもそうではありませんが、これはあなたのツールチェーンとターゲットハードウェアの動作です。シミュレータはこれをRTL記述から知る方法がないため、信号を未知のものとしてマークしました。 –

関連する問題