2016-04-03 37 views
0

下記のJ-KフリップフロップのVerilogコードで、ワイヤタイプqとq_barをある値で初期化したいと思います。たとえば、qとq_barを0で初期化していますが、出力ではqとq_barにはdo not care(1'hx)の値があります。どのように定数でワイヤータイプを初期化するのですか?Verilogで定数を持つワイヤを初期化するには?

module JK_FF(j,k,clk,q,q_bar) ; 
input j,k,clk ; 
output q , q_bar ; 
wire s,r,w,z ; 

assign w = q ; 
assign z = q_bar ; 

nand U1(s,j,clk,z) ; 
nand U2(r,k,clk,w) ; 
nand U3(q,s,z) ; 
nand U4(q_bar,r,w) ; 

endmodule 

/* TEST BENCH */ 

module JK_FF_TB ; 

reg j,k,clk ; 
wire q , q_bar ; 

assign q = 1'b0 ; 
assign q_bar = 1'b0 ; 

initial begin 
clk = 1'b1 ; 
end 

JK_FF DUT(j,k,clk,q,q_bar) ; 

initial 
begin 
j = 1'b0 ; 
k = 1'b0 ; 

#5 

    j = 1'b0 ; 
    k = 1'b1 ; 

    #5 

    j = 1'b1 ; 
    k = 1'b0 ; 

    #5 

    j = 1'b1 ; 
    k = 1'b1 ; 

    end 
    endmodule 
+0

を。リセットロジックを追加してください。また、「常に」ブロックを使ってフロップを作成する方法は、一般的にVerilogで使用されています。 – sharvil111

+0

詳細を教えてください。私はVerilogで素朴です!プラスqとq_barはタイプのワイヤーなので、私たちはそれらを常にブロック内に置くことはできないと思います。私が間違っていれば私を修正してください –

+0

はい。あなたはregとしてqとqbarを持つ必要があります。あなたはいつもフロップをブロックするために[このリンク](http://verilogbynaresh.blogspot.in/2013/07/design-of-jk-flip-flop-using-behavior.html?m=1)を見ることができます。 – sharvil111

答えて

1

解決すべきいくつかの問題があります。

Verilogの状態は、フリップフロップの値と同様に、通常regタイプに保持されます。値はinitialで初期化できます。しかし、ゲートで作られたシンプルなフリップフロップにはワイヤのみがあり、初期化することはできません。

ハードウェアの実装では、交差NANDゲートを使用するデザインは、ワイヤが最初に定義されていない場合でも、起動時に安定した値になります1'bX。クロックパルスは常にためにあまりにも長くなりますので、Verilogの実装はしかし、競合状態を与える

assign w = q !== 1'b0; // 1'bX => 1 
assign z = q_bar === 1'b1; // 1'bX => 0 

:あなたはとして割り当てる使っqq_bar1'Xから1'b0または1'b1への変換を用いた回路でこれをエミュレートすることができますこのデザインがシミュレートされた場合に発生する即時の変更。これは、通常、シミュレーション中に無限の反復として示され、その結果、反復の限界に達し、その結果エラーが発生します。

ので、より多くの変更が必要とされている、とあなたはここで偉大なチュートリアルを見つけることができます:あなたが必要とするすべては** `q`と` q_bar`の**の値をリセットすることですThe JK Flip Flop

+0

ここでq = 1'b0; q!== 1'b0は1にwを返します。私は正しい? –

+0

'q = 1'b0'ならば、q!== 1'b0 = 1'b0!== 1'b0 =! (1'b0 === 1'b0)=! 1 = 0'なので、これは '0'を' w'に返し、 '1'を返すことはありません。 –

関連する問題