当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。

Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。

広告配信等の詳細については、プライバシーポリシーページに掲載しています。

消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題の表現がありましたら、問い合わせページよりご連絡ください。

参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

Mode controller【NandGame編】

はじめに

いつもブログをご覧いただきありがとうございます。

コーストFIRE中のIPUSIRONです😀

IPUSIRONのプロフィールを見る

Mode controllerレベル

Mode controllerレベルのゴールは、モードコントローラーの回路を組むことです。

モードコントローラーには、1ビットのモードレジスターがあります。

  • Mode=0のとき、カーネルモード(kernel mode)と呼ぶ。
  • Mode=1のとき、ユーザーモード(user mode)と呼ぶ。

モードコントローラーの回路の入出力は、次のとおりです。

入力・sw:モードの切り替えビット
・tt:タイマートリガー信号
ユーザーモードではモードが切り替わるが、カーネルモードでは無視される。
※ユーザーモード時のモード切替は割り込み、カーネルモード時のモード切替はレジュームと呼ぶ。
・cl:クロック信号
出力・md:現在のモード
・sw:モードの変更が発生するとswから1を出力する。
※モードの切替は、入力swやttによって起こる。どちらであっても、モードが変更されれば、出力swは1を出力する。
・IR:割り込み(ユーザーモード時のモード切替)の原因を示す16ビット値(sw=1の場合のみ)。
01=タイマートリガー(timer trigger)・・・tt端子による「ユーザーモード⇒カーネルモード」への切替
10=スワップ(swap)・・・sw端子による「ユーザーモード⇒カーネルモード」への切替
回路の入出力

Mode controllerレベルを解く

1:回路の設計方針を検討する

・モードは2種類しかないので、切替のたびにNOTゲートを通る。

・入力clはクロック信号なので、クロック信号を要するコンポーネントに接続するだけ。

・入力ttは内部的にユーザーモード(Mode=1)のときだけ、カーネルモードに切り替わる。ANDゲートを使えばよさそう。

・入力swは常にモードの切替のきっかけになる。

※実質ビットが変化するときにモードが変わる。

・出力IRにはbundlerコンポーネントを接続し、下位2ビットだけ使う。

2:用意されているコンポーネントを確認する

D-FFであるdffコンポーネントが用意されています。

モードコントローラーは内部にモードレジスターを保持する必要があります。1ビット分でよいので、これを1つのD-FFで記憶しておくことにします。

3:回路を実装する

回路の設計方針をいろいろと決めたので、簡単なところから回路を組んでみます。

入力sw=1によってモードを切り替えるので、dffコンポーネントのstピンに接続します。さらに、回路の出力にあるsw端子にも接続します。

しかし、回路の入力にあるtt端子によってもモードが切り替わることがあります。つまり、dffコンポーネントのstピンとsw端子の間にORゲートを挟みます。

そのORゲートにtt端子側から1がくるには、ユーザーモード(Mode=1)のときでなければなりません。これはANDゲートで判定できます。

ここまで判明したことを回路に組み込んでみます。

完成に近づいてきました。残りはIR端子から出力されるデータを作るだけになります。

IR端子からの出力ビット列(下位2桁のみに注目)は、次の3種類があります。

  • 01b・・・タイマートリガー時。tt端子による「ユーザーモード⇒カーネルモード」への切替
  • 10b・・・スワップ時。sw端子による「ユーザーモード⇒カーネルモード」への切替
  • 00b・・・それ以外のとき。

タイマートリガー時とは、回路の下にあるandコンポーネントの出力が1のときです。よって、この出力ピンとbundlerコンポーネントの0ビット目がつながります。

スワップ時とは、入力sw端子が1のときです。よって、この端子とbundlerコンポーネントの1ビット目がつながります。

4:テストする

テストにパスすると、クリアになります。