本文へジャンプ

学科概要
  • HOME
  • 学科概要
  • 学生による学科紹介

学生による学科紹介

実際の授業をいくつか文書におこしてみました。先生方の仮想講義を体験してみてください。情報科学科の講義は90分授業です。午前中の講義は10時15分から、午後の講義は13時から始まります。14時45分からの講義がある曜日もあります。

ハードウェア構成法 | 構成法 小林 芳直
開講時間: | 1
シラバス
ASIC の論理回路設計の説明をする。 組合せ回路、同期式回路設計、ステートマシンによる同期、 順序制御、排他制御、演算回路。
要約
5学期に行われるハードウェア実験、6学期に行われるプロセッサ実験のための準備として、デジタル回路設計の基本を学習します。
論理演算を使用して高速な乗算器や簡単なステートマシンの設計ができるようになることを目指します。
学習すること
授業の一番初めは、1と0だけからなる論理演算(ブール演算)と論理圧縮から入ります。
その後は大まかに言うと、学期の前半は組み合わせ回路、後半は順序回路のしくみと設計方法を学びます。

組み合わせ回路とは、論理演算子(ANDやORやNOTなど)のパーツを組み合わせることによって、ある入力に対して一意な出力を与えるものです。
例えば整数同士の加算器は、足す数と足される数を与えると加算結果が1つに決まり、それを出力として返してくれるので組み合わせ回路の一例と言えます。

授業では、まずハーフ・アダーという2進数での1桁(1ビット)同士の加算を行うパーツが、論理演算子を使って簡単に構成されることが説明されます。
次に、ハーフ・アダーを基本とするパーツをいくつも組み合わせることで、何桁でも計算できる立派な加算器が作られるということを学びます。
このような過程で、ある複雑な演算回路もより簡単なパーツの集まりで構成されていることが理解できるようになります。

一方で順序回路とは、組み合わせ回路と違って、入力と回路内部の状況によって出力が決まるものです。
例えばアップダウン・カウンタは、回路内部が保持している値と「+1又は-1せよ」という外部からの入力(命令)の2つがあってはじめて、カウントアップ、またはカウントダウンした値を出力します。
値を保持するためにはフリップフロップというパーツが使用されますが、これも論理演算子の組み合わせで構成することができます。
思考が数学寄りな人は、授業中ここでちょっとつまづいてしまうこともあるかもしれませんが、順序回路を正確に理解することができれば、回路設計ができるようになるための大きな一歩となります。
コンピュータが行う「計算」のイメージは組み合わせ回路に近いかもしれません。
しかし、コンピュータがその演算の計算結果を記憶したり、繰り返し演算を行ったりするためには順序回路が不可欠なのです。

以上のように基本的な知識がそろえば、それを利用して減算器、乗算器、比較器などの作り方を勉強します。
それぞれ整数の引き算、掛け算、大小の比較を行なうものですが、実際のCPUではこれらをまとめてALU(演算論理装置)と呼んだりします。
さらに進んで、小数(正確には浮動小数点数)用の四則演算などを行なう演算ユニット(FPUと呼びます)や、ステートマシン(いくつかの状態を入力に応じて遷移するような構造を実現する回路で、順序回路で構成する)を利用したメモリアクセスの方法まで勉強します。
浮動小数点数は絶対値が極端に大きい値と極端に小さい(0に近い)値を表せるようにするため、データが指数部と仮数部という2つの領域に分かれています。
浮動小数点数の加減乗除は指数部と仮数部で別々の処理を行なわなければならず、それぞれの演算結果が互いに影響を及ぼしあう(丸め処理)ので複雑な演算回路になります。
また、メモリアクセスを行なうための制御回路はデータを要求するクロックと受け取るクロックなど、正確なタイミング制御が必要です。そのような場合は、しっかりとあらゆるパターンのタイミングチャートを書いて回路が正しく動作するか手作業で確認したりすることもあります。

この他に、様々なテクニックによるゲート数の削減や、乗算器におけるワラスツリーやステートマシンにおけるマイナーループの除去など、高周波数クロックで動作させる上で信頼性を向上させるためのTipsや高速化のテクニックを紹介してくださいます。
プロセッサ実験で使用するCADツールは、そういった最適化のほとんどを自動化するツールなので直接的にそれらの知識を生かしてCPUを設計するわけではありません。
しかし、そういった知識に基づくセンスを養っておくと、プロセッサ実験でCPUの速さを競い合うときにとても有利になります。
授業の雰囲気
指定教科書が存在しますが、教科書通りに授業が進むことはほとんどありません。
また、デジタル回路といっても、たまにアナログ回路についての知識が必要になったり、知っているとすんなり理解できることがあります。
なので、授業中に必要に応じて半導体物性(たとえば、NANDゲートがトランジスタを用いてどのように構成されているか)も教えてくださいます。

授業終盤では、3年生のCPU実験での回路設計に用いるプログラミング言語(VHDL)を使用して回路の挙動を説明されます。
CPU実験で主流になっているパイプラインアーキテクチャに関連して、昨今のパイプライン技術について説明しだくださったりもします。

雑談もおもしろく、航空機の話をされていたかと思えば、いつまにか動作周波数についての話題に繋がっていたりと、そういった話に興味がある人にとっては楽しくて仕方がありません。
雑談のために、資料を持っていらっしゃることもあります。

わからないことがあれば、その場で質問することもできますし、授業後に伺いにいくこともできます。
筆者の経験では、ちょっとわからないことがあった時に教科書を参照して期待する答えが書いてあったのは5割程度です。
毎回、授業が終わった後はわからなかった部分やさらに進んだことを質問する学生がたくさんいます。
それに対して、先生とTAの方が丁寧に解説してくださいます。
あまりにも話が弾んでしまって守衛さんが教室を閉めにくるまで対応してくださることも多々あります。
試験について
例年、試験では「こういう動作をするような回路を設計しなさい」というお題が与えられます。
内容は、ごく簡単な組み合わせ回路を作る問題から、実際にメーカの出しているSRAMの仕様書(英語)を読んで仕様に沿ったアクセス方法を要求される問題まで様々です。
しかし共通しているのは、指定されていないことは全て自分で勝手に決めてよいという点で、かなり自由度の高い試験になっています。
問題を解くだけなら、授業でやった回路設計の基本知識だけで対応することができます。
次のステップへ
この授業の中では、実際に抵抗やコンデンサを触ったりすることが無いので、初めて回路設計を勉強する人にとっては、自分の勉強していることに対して実感が湧きにくいかもしれません。
しかし冒頭で述べた通り、この授業は5学期に行われる実験Iの中のハードウェア実験の導入に位置づけられており、ハードウェア実験では、好きなだけトランジスタなどを使って回路を作ってみたり、VHDLによる回路設計をコーディングしてみたりできます。
またFPUの設計、さらにCPU本体の設計は6学期のプロセッサ実験で本格的に行なうことになります。
この授業は、一度も回路を触ったことが無い人が情報科学科に進学してから本格的に回路を設計するための橋渡しの授業になっているのです。