2017-06-26 5 views
0

私は、プロシージャブロック(always)のようにassignステートメントを使うことができることを知りました。 )。私はいつも絶対に割り当てを使う必要があるのですか?Verilog(常に割り当てます)

+0

関連する質問https://stackoverflow.com/q/31472546/1959732および https://stackoverflow.com/q/23687172/1959732 – Greg

答えて

0

決して、assignキーワードは継続的な割り当てのためであり、合成時に組み合わせロジックを生成します。実際には、あなたは常にブロックでassign挙動を得ることができます。

wire test; 
//At all times, test equals input 
assign test = input; 

は同等です:

reg test; 
//Each time input changes(with the [email protected]*), test takes its value 
[email protected]* 
    test = input; 

always内のブロック、あなたが唯一の非ブロックの割り当てを使用する必要があります(「< =」)手続き割り当てです。ブロッキング割り当てを使用することは可能ですが、あなたが望むことを確実にする必要があります。 this threadから

:私は例外なくの知っていることによって、生きるため

つのルール:

  1. 常にクロックが

    を割り当てだけでなく、組み合わせまたはレベルセンシティブコードのブロック割り当てを使用します
  2. クロックエッジに書き込まれ、別のプロセスで同じクロックエッジで読み取られる変数には、常にノンブロッキング割り当てを使用します。

0

を割り当て、対応DEASSIGNとも呼ばれる「手続き連続assighment」(常にブロックがで)特定の目的のために、常にブロックで使用することができます。ほとんどの場合、これは合成不可能であり、私はその使用を一度も経験していませんでした。

例:

reg in1, in2, out; 
    reg [1:0] select; 

    always @* begin 
     case (select) 
     2'b01: assign out = in1; 
     2'b10: assign out = in2; 
     2'b11: deassign out; 
     endcase // case (select) 
    end 

一般recommendateion - それを使用しないでください。

関連する問題