連載
» 2008年12月04日 00時00分 公開

完全マスター! 電子回路ドリル III(14):電子回路マスターへの道 〜栄光のゴール〜

電子ドリル3部作がついに完結。本シリーズで紹介した“電子回路の技”の数々を身に付けたあなたは立派な電子回路マスターだ!

[横田一弘 埼玉県立新座総合技術高等学校 教諭,@IT MONOist]

 前回行った3学期【期末考査】では、“Verilog HDLの記述スタイル”に関する内容を中心に出題しました。いかがでしたでしょうか?

 解けた方も解けなかった方も、次項の解答と解説をぜひ読んでみてください。

 仮に解けなかった問題があったとしても、今回の解説や過去問題を参考にして、1問1問確実に理解しながら解いていけば、必ずやその知識が身に付くはずです。

 それでは、解答を発表します!


期末考査−第1問の解答と解説

第1問

答え.

① assign X = ~(A & B);

② assign X = A | ~(A & B);

③ assign X = &a;



 ①では、NOT演算(“~”)はAND演算(“&”)よりも優先順位が高いので、括弧を使う必要があります。

 ②では、NAND演算をNOT演算(“~”)とAND演算(“&”)で記述し、さらにOR演算(“|”)を行います。

 ③のようにビット幅のある信号に同じ演算を行う場合は、リダクション演算子を使うとシンプルに記述できます。③では、4ビットの信号aのすべてのビットをAND演算しているので、

&a

と記述できます。

期末考査−第2問の解答と解説

第2問

答え.(ALU.v

第2問答え


 ALU(Arithmetic Logic Unit)は、加減算などの算術演算、AND、ORなどの論理演算を行う回路で、主にコンピュータの処理装置に搭載されています。【第2問】では、オペレーションopによって演算を切り替えています。

 この回路は【問題6】の解説で紹介した関数functionを使っても記述できますが、Verilog HDLのマスターにはalways文を使いこなすことが大切なので、今回はalways文を使ったものを模範解答としています。

 このALUは組み合わせ回路で実現できるので、

always @(op or A or B)

のように、always文のすべての入力(op、A、B)をレベルセンスとして記述します。

 そして演算は、

    case (op)
    3'b000: R <= A + B;
    3'b001: R <= A - B;
    3'b010: R <= -A;
 
(中略)
 
    default: R <= 8'hxx;
    endcase

のように、case文で切り替えられますが、ここでデフォルト(default)指定も記述します。

 always文は“すべての因果関係が記述されていないと組み合わせ回路になりません”。このcase文には、“000”から“111”まで“0”と“1”のすべての組み合わせが記述されていますが、シミュレータはさらに“x”(不定値)と“z”(ハイ・インピーダンス)を値として区別します。そのため、回路が確実に“組み合わせ回路”だと理解されるようにデフォルト指定が必要なのです。

期末考査−第3問の解答と解説

第3問

答え.(UpDownCounter.v

第3問答え


 【第3問】は、完全マスター! 電子回路ドリル IIの2学期【期末考査】−第4問と同等の回路をVerilog HDLで記述する問題です。

 アップダウンカウンタは、次のように記述します。

always @(posedge clock or negedge reset)
    if (reset == 1'b0)
        Q <= 4'd0;
    else if (down == 1'b0)
        Q <= Q + 4'd1;
    else
        Q <= Q - 4'd1;

 このalways文は、クロックclockの立ち上がりとリセットresetの立ち下がりで動作します。

 1つ目のif文はリセットresetを検知し、リセットresetが“0”でカウンタQをゼロクリアします。

 2つ目のif文が働くのは、リセットresetが“1”のときに限られます。ここでダウン信号downを検知し、Qをインクリメント(1増)、またはデクリメント(1減)しているのです。以上のように「if文の深さは信号の優先順位」を表しています。

期末考査−第4問の解答と解説

第4問

答え.

第4問答え1
  • シミュレーション結果
第4問答え2


 【第4問】の波形からいきなりテスト・ベンチを書くのは無理でしょう。そこで、図1のように波形にユニット時間を書き込んで考えていきます。

入力波形のタイミング 図1 入力波形のタイミング

 それでは、図1を基にテスト・ベンチを作ってみましょう。

 はじめに、クロックCLKを2ユニット時間ごとに反転させます。

always #2 CLK = ~CLK;

 次に、リセットRESとデータDを作ります。シャープ(“#”)は遅延時間を表しているので注意してください。

initial begin
        CLK = 0; RES = 0; D = 0;
#5      RES = 1;
#4      D = 1;
#8      D = 0;
#8      D = 1;
#4      D = 0;
#4      D = 1;
#9      $finish;
end

 では、【第4問】の回路はどのような働きをするのでしょうか? シミュレーションの結果を見てみましょう(表1)。

【第4問】の回路動作 表1 【第4問】の回路動作

 1つ目のクロックでは回路がリセットされているので、データDにかかわらず出力Qはゼロクリアされます。

 続いて、2つ目以降のクロックにおける回路動作に注目してください。分かりやすいように赤字で示しましたが、クロックごとにデータDは出力Qの最下位に取り込まれて、出力Qは左に1ビット・シフトしていることが分かります。つまり、クロックごとにビット・データを取り込んで、並列に並べているのです。

電子回路ドリル卒業式 〜継続は力なり〜

 さて、1学期編から3学期編まで長期にわたりお届けしてきた「完全マスター! 電子回路ドリル」も今回でシリーズ完結となります。そして、これまでの問題・解説を理解し、見事に「電子回路ドリル」をマスターされた読者の皆さんはめでたく卒業となります。

 これまで、電子回路の“技のバリエーション”を身に付けていただけるように、毎週「宿題」をお届けしてきましたが、全シリーズを通して“電子回路の進化”を実感していただけたのではないかと思います。

  • 1学期は、電流・電圧などの電気物理に関する内容について
  • 2学期は、デジタル回路、すなわち“0”と“1”の符号を処理する回路について
  • 3学期は、抽象度を高め、効率よく回路を表現するHDLについて

 “電子回路の進化”の功績のおかげで、大量の情報を蓄積・伝播・加工できるようになり、われわれは便利で快適な生活を送ることができるのです。そして、こうした進化の恩恵の陰には本シリーズで紹介してきたような「電子回路の技」が生きているのです。(連載完)

Copyright © ITmedia, Inc. All Rights Reserved.