ハードウェア記述言語と検証

Verilogのwire型とreg型の違いとして正しいものはどれか。

  1. Aregは必ずフリップフロップになり、wireは必ず組み合わせ回路になる
  2. Bwireはassign文などでつながれる配線を表し、regはalwaysブロックの中で値を代入する信号を表すが、regが必ずフリップフロップになるわけではない
  3. Cwireは数値を、regは文字を入れるための型である
答えと解説を見る

正解:B. wireはassign文などでつながれる配線を表し、regはalwaysブロックの中で値を代入する信号を表すが、regが必ずフリップフロップになるわけではない

Verilogでは、assign文やmoduleの出力で駆動される信号はwire、alwaysブロックの中で代入される信号はregと宣言する決まりです。regは「レジスタ」の略に見えますが、always @(*)の中で代入すれば組み合わせ回路になり、フリップフロップにはなりません。フリップフロップになるかどうかは、クロックのエッジで値を更新する書き方かどうかで決まります。SystemVerilogでは両方をlogic型で書けます。

  • A. regという名前でも、組み合わせ回路になることがあります。
  • B. 正しい。regはalways @(*)で組み合わせ回路にもなります。
  • C. 文字の型ではありません。
この分野を解く 分野ページへ

ハードウェア記述言語と検証のほかの問題

  1. 上のVerilogのassign文が表す回路として正しいものはどれか。
  2. 上のVerilogの記述が論理合成で作る回路として正しいものはどれか。
  3. Verilogのノンブロッキング代入(<=)の動作として正しいものはどれか。
  4. 上の記述で、クロックの立ち上がりの直前にa=0、b=1だった。立ち上がりの後のaとbの値はどうなるか。
  5. 2段のシフトレジスタのつもりで、上のようにブロッキング代入(=)で書いた。起こる問題として正しいものはどれか。