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

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

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

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

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

Timer Trigger【NandGame編】

はじめに

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

セミリタイア・ミジンコのIPUSIRONです😀

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

References
1 0にリセットするという方法もありますが、その場合は255に到達した時点でtrから1を出力する必要があります。