Make/Day

毎日なにか作ります

47日目 ~7segLEDデコーダ~

こんにちは!今日はデジタル回路の話題で更新します。

今回は番外編ということで、CPUの出力などに使用する予定の7segLEDデコーダを設計していきます。
デコーダとは、入力信号からデータを複合して例えば人がわかるような出力に変換するような回路のことを指します。この7segLEDデコーダは、渡された入力を7セグメントLEDへ出力する機能を持ちます。

7セグメントLED

見ての通り、7セグメントLEDは数値を表示するための表示器です。これを繋ぐことで計算結果を表示することができます。

このディスプレイは数値を表すための7つ(+右下のドットを表す1つ)のLEDでできています。これらの接続は、私の使用している基板では

DE0-CV User Manualより

上記のように接続されているようです。7本の線で数値を表す部分だけ接続されており、0が入力されると点灯、1で消灯となっています。よって、例えば"0"を表示したいときはHEX0[6]のみ消灯して、"1000000"という配列で値を渡せば良いということになります
フム((¯ω¯*)フム

他の数値も同じように考えてVerilogのコードにすると、以下のようになります。

module seg7 (
    input [3:0] Qin,
    output [6:0] Qout
);
    always @* begin
        case (Qin)
            4'h0:Qout = 7'b1000000;
            4'h1:Qout = 7'b1111001;
            4'h2:Qout = 7'b0100100;
            4'h3:Qout = 7'b0110000;
            4'h4:Qout = 7'b0011001;
            4'h5:Qout = 7'b0010010;
            4'h6:Qout = 7'b0000010;
            4'h7:Qout = 7'b1011000;
            4'h8:Qout = 7'b0000000;
            4'h9:Qout = 7'b0010000;
            default: Qout = 7'b1111111;
        endcase
    end
endmodule

これは、上のユーザーマニュアルからの図を追ってみると分かりやすいと思います。
これで値を表示できるように今後の実装も頑張ります!