今回はプログラミングではなく、その手前の論理の話
論理回路やメモリ階層など、基本・応用情報試験でやったような話が出てきました。
毎週Discussion Form(DF)への500-700words程度の投稿とコメント返し、字数制限がないAssignment Activity(AA)の提出が必要でした。
論理回路については教科書的なReading課題がありましたが、後半はネット記事がReading課題として出されていて、Tuition freeな感じでした
最初の方は電子回路を自分で書ききって理解を深めようとしたので、丸1日かかっていましたが、後半はXXを活用したアイディアについて、というような創造性で書ける内容が多かったので数時間で終わらせました。
Contents
Unit1:Digital Design
XORゲートやANDゲートを使って2進数の足し算をする方法をDFで投稿。
Reading課題に加算器の内容はなかったので、自分なりに繰り上げの方法を分解して説明しました。
AAは簡単すぎて逆に何を書けばよいのか分からなくなる内容。。
論理回路を一切使わなくて解決できてしまうお題について、なぜ論理回路を使わなくて良いのかを説明して終わりました。
結果的に10点満点だったので合っていたようです。
Unit2:Combinational Logic Design
与えられた値を処理するだけのCombinational Circuitと、前回与えられた値を保存する機能を持ち合わせたSequential Circuitの違いと、Combinational Circuitの活用例についてDFとAAで投稿。
エレベーター、信号、部屋のロックなど単純な仕組みをいかにCombinational circuitで解くかを考えました。
Unit3:Sequential Logic Design
Unit2時点でなんでANDやORだけで値保存ができるのかちょっと疑問だったのですが、その疑問を突き詰めて考える週でした。
DFではD Flip-Flopsを使ってカウントアップ機能を作る方法を検討。
Clock Signalと前回値という概念が入ると、初期状態、次の状態、、とそれぞれの論理回路に今どの値が入っているのかを考えないとなぜカウントアップできるのか説明ができないので、納得できるまでひたすら図を書いて0と1を書き並べてました。
chatGPT先生も回路図は書いてくれないので、こういう回路図で順を追って説明してくれているサイトがありがたかったです
https://meyon.gonna.jp/study/electronic/8880/
Unit4:Computer Arithmetic
一番時間がかかった、というか、時間をかけた週でした。
論理回路で四則演算する方法について学びます。
Ripple Carry Adderを使った足し算については色んなところに説明があるので論理ゲートをならべて回路図で示すことができましたが、引き算と組み合わせたりすると回路図で表記するには複雑すぎるので省略されて記載されることが多いです。
論理ゲートの表記だけで計算させたくなってしまい、色んな図を作りました。
これはFull Adderを組み合わせて、Cが1の時は引き算、0の時は足し算をする例です。

これまでも全課題10点満点でしたが、Unit4はAAの評価コメントで褒めてもらえたのが嬉しかったです。
とはいえ、Unit5以降も似たようなコメントだったので、なんか特別感なくなってきた?
This is an exceptionally well structured assignment. One of the best in the class. Great work!
Unit5:Memory and Programmable Logic
メモリ階層や、ROMとRAMの違いについて。
RAMは揮発性だけどROMは不揮発性でシステムの基本プログラム保存に使われるとか、
Cache→Main Memory→Secondary Storageの順にアクセスに時間がかかるとか。
Unit5以降は回路図を書くような話ではなく、内容を説明して活用例を提示するだけなので毎週数時間で終わりました
Unit6:Computer Architecture
CPUやISA(Instruction set architecture)の役割について
普通の大学だったらZ80 microprocessorでカウンター作る授業とかあったのかな。
まあなんとなく何してるのかは分かるとはいえ、ちょっと楽しそう。
Unit7:Assembler Language
アセンブリ言語の基本的な構造についてで、アセンブリ言語を記述してみようという課題もありましたが、うまく環境が作れなかった上今回しか使わないよなと思い、https://godbolt.org/でC言語をアセンブリ言語に翻訳させて、どういう処理の流れになっているのかを説明することにしました。
結果的に10点満点で評価コメントも良かったので、これで良かったのでしょう。
DFはPythonをJavaに翻訳するには何を検討すれば良いか、というお題でした。
Pythonってとにかく人間に分かりやすい言語だったんだなー、そりゃCS1001が簡単だったはずだと妙に納得しました
Unit8:Compiler Processes Overview
Unit7でアセンブリ言語の環境構築をやっていないので、Unit8で本格的にコード記述させられたらどうしようと思っていたのですが、コンパイルの流れと役割という概念的な話に戻ってくれました。
関数や変数といったシンボルをどうやってアセンブリ言語、機械に出せる単純な命令に変換するか、という話でした
DF、AAの評価は全部満点だったのですが、Final Examを2,3問落としたようで最終評価は97.3点
Aだけど、A+は逃してしまいました