FE EXAM

シフトレジスタ(Shift Register)

クロックに合わせて記憶したビット列を1つずつ横にずらすレジスタ。

INTERACTIVE VISUALIZATION
入力
FF
出力
フェーズ
idle
レジスタ Q1-Q4
0 0 0 0
出力ビット
シナリオ
ステップ1 / 6
STEP 1/6初期状態(全ビット0)シフトレジスタは、フリップフロップ(=1ビットを覚える部品)を一列に並べたものです。左端の Q1 から右端の Q4 まで4個が直列につながっています。最初はすべて 0 です。左から SI(シリアル入力)でビットを1つずつ送り込みます。
SIQ10Q20Q30Q40SOクロックごとに右へ1ビットずつシフト →
並列に取り出した4ビット(Q1〜Q4を同時に読む)
Q1
0
Q2
0
Q3
0
Q4
0
解説

📌
シフトレジスタとは

FFFFFFFF

シフトレジスタとは、フリップフロップ(=1ビットを覚える部品)を直列に並べ、クロックの合図のたびに記憶したビット列を1つずつ横へずらす回路のことです。状態を覚えて動くので、順序回路の仲間です。

身近な例で考えると、バケツリレーに似ています。一列に並んだ人が、合図のたびに手元のバケツを隣へ手渡していくイメージです。新しいバケツは先頭から入り、列の端まで来たバケツは外へ出ていきます。

上のツールで▶ボタンを押すと、左から入力したビット 1 0 1 1 が、クロックのたびに隣のフリップフロップへ順々にずれていく様子を確認できます。

⚙️
動作の仕組み

前:1011後:0101

シフトレジスタの動きは、クロックの立ち上がり(=0から1に変わる瞬間)を合図に、全フリップフロップが一斉に隣の値を取り込むというものです。

1クロックでの動きは次の3つが同時に起こります。
左端に入力:先頭のフリップフロップが、外からの入力 SI を取り込む
中はずれる:各フリップフロップが、左隣が持っていた値を受け取る(全員が1つ右へずれる)
右端から出力:いちばん右にあったビットは押し出され、外へ出力 SO される

たとえば [1, 0, 1, 1] の状態で左から 0 を入れると、右端の 1 が出ていき、全体は [0, 1, 0, 1] になります。各ビットが「ところてん」のように押し出されていくイメージです。クロックの合図でそろって動くのが、組合せ回路にはない順序回路ならではの特徴です。

🔁
用途(シリアル⇔パラレル変換等)

1本ずつ(直列)1シフトレジスタ1011まとめて(並列)

シフトレジスタの代表的な使い道はシリアル(直列)とパラレル(並列)のデータ変換です。直列とは「1本の線で1ビットずつ順番に送る」形式、並列とは「複数の線で同時にまとめて送る」形式のことです。

おもな変換は次の2方向です。
直列→並列(SIPO):1本ずつ届いたビットを順々にためて、4個のフリップフロップを同時に読むことで4ビットをまとめて取り出す
並列→直列(PISO):4ビットをいっぺんに読み込み、クロックごとに1ビットずつ右端から送り出す

身近な例で考えると、1車線の道路と複数車線の道路をつなぐ合流・分流に似ています。配線の本数を減らしたい通信では「並列→直列」で1本にまとめて送り、受け取った側が「直列→並列」で元のまとまりに戻します。ほかにも、ビットを順にずらす性質を使って、データを 2 倍する乗算や時刻を刻むタイマーの一部としても利用されます。

練習問題

🎯
基本情報技術者 練習問題

Q1.シフトレジスタの説明として最も適切なものはどれか。
A.フリップフロップを直列に並べ、クロックごとに記憶したビットを1つずつ横へずらす回路
B.入力の組合せだけで出力が決まり、記憶を持たない回路
C.2つの数を足し算する回路
D.電圧を一定に保つ回路
Q2.4ビットの右シフトレジスタが [1, 0, 1, 1](左端Q1〜右端Q4)の状態のとき、左端から SI=0 を入れて1回シフトすると、右端 Q4 から出力されるビットはどれか。
A.0
B.1
C.出力は出ない
D.入力の0がそのまま出力される
Q3.シフトレジスタの代表的な用途として正しいものはどれか。
A.1本の線で順番に届くビット列を、まとめて読める並列データに変換する(直列→並列変換)
B.入力された数の偶数・奇数を1ステップで判定する
C.足し算と掛け算を同時に行う
D.電源を入れた瞬間に全ビットを1にする

関連コンテンツ