Timer Trigger【NandGame編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
Multitaskingグループに突入
Timer Triggerレベル
Timer Triggerレベルのゴールは、256クロックごとに1を出力する回路を組むことです。
回路の入出力は次のとおりです。
入力 | ・cl:クロック信号。1ビット。 |
出力 | ・tr:トリガー信号。1ビット。 256クロックごとに1を出力する。 |
Timer Triggerレベルを解く
1:設計方針を考察する
基本的には出力trから0を出力しておきます。
入力clからクロック信号を受信するたびに、内部的のカウンターをインクリメントし、256まで到達したら出力trから1を出力し、内部のカウンターを1[1]0にリセットするという方法もありますが、その場合は255に到達した時点でtrから1を出力する必要があります。に初期化します。
2:用意されているコンポーネントを確認する
カウンターを実現するcounterコンポーネントが用意されています。入力stはインクリメントするか初期化するかの制御ビット、Xは初期値、clはクロック信号です。保持する16ビットのカウンター値は出力され続けます。
3:回路を実装する
counterコンポーネントを配置して、クロック信号をワイヤリングします。
カウンター値が256(=1 0000 0000b)に到達したときに、出力trが1にしたいのです。
そのためには、16ビットのカウンター値をsplitterコンポーネントで各桁に分岐し、8ビット目(右からゼロスタート)が1になったタイミングでtrを1にすればよいのです。この仕組みを回路に組み込むと、次のようになります。
カウンターの初期値は1としますので、counterコンポーネントの入力Xに常に1を与えます。
残っているのはcounterコンポーネントの入力stです。stに与える1ビットでカウンターの動作を振り分けます。st=0なら内部のカウンター値をインクリメント、st=1なら初期化します。
リセットするタイミングは256に到達したタイミングになります。8ビット目を出力trにワイヤリングして1を出力していましたが、この1をセレクターの制御ビットに流用することでうまく働きます。
8ビット目が1になる。
⇒select 16コンポーネントの入力sが1になる。
⇒select 16コンポーネントの出力は入力D1と同じになる。
⇒このときcounterコンポーネントの入力stに1を与えたい。
⇒select 16コンポーネントの入力D1に1を固定入力する。
select 16コンポーネントの入力D0が残っています。
D0には、リセット時を除く通常時にcounterコンポーネントの入力stに与える値を指定しておきます。インクリメントするにはstに0を与えるという仕様だったので、D0には0を固定入力します。
4:テストする
テストにパスすると、クリアになります。
References
↑1 | 0にリセットするという方法もありますが、その場合は255に到達した時点でtrから1を出力する必要があります。 |
---|