この文書では,教材に備わる4桁の7セグメントのピンアサインと制御方法について説明します.


1:概要

教材に備わる4桁の7セグメントは,各桁ごとに表示したい数値(4[bit])を入力すると,ダイナミック点灯方式で数字の表示をしてくれます.また,表示と非表示を切り替えることができます.


2:ブロック図

下にブロック図を示すとともに,各端子の説明を図の下にある表で示します.

7SegmentLedBlock

 

端子名 入力/出力 バス幅 説明
DIS1_NUM 入力 教材のDP1と書かれている7セグメントLEDに表示される数字です.
DIS2_NUM 入力 4 教材のDP2と書かれている7セグメントLEDに表示される数字です.
DIS3_NUM 入力 4 教材のDP3と書かれている7セグメントLEDに表示される数字です.
DIS4_NUM 入力 4 教材のDP4と書かれている7セグメントLEDに表示される数字です.
CLK 入力 1

ダイナミック点灯方式で表示させるために使用されるクロック(40[MHz])です.
内部では10[kHz]程に分周されています. 

IN_CLR 入力 1 表示/非表示を切り替えるための端子です.Highだと点灯,Lowだと消灯です. 
DIGIT 出力 4

ダイナミック点灯方式では,4個の7セグメントLEDから1個を指定してから,
表示するパターンを全7セグに送ります.DIGITは1個の7セグを指定するときに
用います.Highとなっている桁のみ表示するよう,回路設計がなされています
ので,0001⇒0010⇒0100⇒1000⇒0001…を繰り返すことになります.

PATTERN 出力 8

表示したいパターン信号です.同じセグメント(たとえばセグメントA)は
電気的に接続されているため,もしDIGITが1111の場合にはすべてが同じ数字を
表示します.実際に使用するときには,上記DIGITは1個しかビットが立たないように
制御すれば,各桁は別の数字が表示されているように見えます.

 


3:外部回路

 

下に示す回路図では,DP4に関係するトランジスタと制御ラインを表しています.アノード側にはPNP型トランジスタが取り付けられていますので,ベースをLowにするとアノードに電流が流れます.カソード側にはNPN型トランジスタが取り付けられていますので,ベースをHighにするとカソードからグランドに電流が流れます

7SegmentCircuit

 

各セグメントは下図のように割り振られています.従いまして,DP4に「1」というパターンを表示する場合には,DPB_BとDPC_BをLow,その他のDPx_BをHighにし,またDP4_BをHighにすればよいのです.

7Segment

 


4:ピンアサイン

ピンアサインを下表で示します.この表をもとにISE WebPACKのPinAHeadでピンを割り振ってください.以前説明した7セグメントLEDを制御する回路のピンアサインでは,DIGITになっている4ビットの信号をDP1_B~DP4_Bに,PATTERNになっている8ビットの信号をDPA_B~DPDP_Bに接続すればよいでしょう.

ピン名 回路図上の名称 FPGAのピン番号 信号の種類 ポート名
セグメントA DPA_B P115 LVCMOS33 PATTERN[0]
セグメントB DPB_B P120 LVCMOS33 PATTERN[1]
セグメントC DPC_B P123  LVCMOS33 PATTERN[2]
セグメントD DPD_B P104  LVCMOS33 PATTERN[3]
セグメントE DPE_B P102  LVCMOS33 PATTERN[4]
セグメントF DPF_B P112  LVCMOS33 PATTERN[5]
セグメントG DPG_B P105  LVCMOS33 PATTERN[6]
セグメントDP DPDP_B P126  LVCMOS33 PATTERN[7]
DP1のカソードコモン DP1_B P124 LVCMOS33 DIGIT[0]
DP2のカソードコモン DP2_B P118  LVCMOS33 DIGIT[1]
DP3のカソードコモン DP3_B P116  LVCMOS33 DIGIT[2]
DP4のカソードコモン DP4_B P111  LVCMOS33 DIGIT[3]
クロック CLK P94 LVCMOS33 CLK

 


5:内部信号

4桁の7セグメントをダイナミック点灯方式で表示する場合,次に示す内部信号が必要となります.

名称 reg/wire ビット幅 個数 初期値 備考
PATTERN reg 8 1 8'b1111_1111 ポート宣言の信号をregにしている.
ALL_PATTERNS reg 8 4 4個とも8'b1111_1111 4桁分のパターン.
DIGIT reg 4 1 4'b0001 ポート宣言の信号をregにしている.
DIVIDED_CLK wire 1 1 なし およそ1.2[kHz]に分周されたクロック.
DISPLAY_STATUS reg 1 1 1'b0 表示の状態.0なら非表示,1なら表示.

 

ALL_PATTERNはビット幅8,個数4ですので次のようになります.

reg [7:0]ALL_PATTERNS[3:0];

 また,4個とも8'b1111_1111で初期化するには,下記のようにinitial文を使えばよいです.

/* 初期状態では全消灯にしておく */
initial begin
 ALL_PATTERNS[0] = 8'b1111_1111;
 ALL_PATTERNS[1] = 8'b1111_1111;
 ALL_PATTERNS[2] = 8'b1111_1111;
 ALL_PATTERNS[3] = 8'b1111_1111;
 end 

次にDISPLAY_STATUS信号の役割について説明します.ダイナミック点灯方式では,1桁ずつ表示していくとき表示する値を変えていきます.この値を変えるとき,一時的に全部の7セグメントLEDを非表示にしないと隣接する数字のパターンがうっすらと表示されてしまいます.このため,DIVIDED_CLKが立ち上がりエッジのタイミングでDISPLAY_STATUSをトグル(1'b0なら1'b1,1'b1なら1'b0にすること)し,DIVIDE_CLKが立ち下がりエッジのタイミングでDISPLAY_STATUSが1'b1なら表示する桁をずらしてパターンを表示し,そうでないなら非表示にします.


6:FPGAに作成する回路の構成

ここでは,作成する回路の概略を示します.

  • 分周したクロック(およそ1.2[kHz])を得て,DIVIDED_CLKとつなげる.
  • 与えられたDIS1_NUMから,パターンを生成する.このとき,4ビットの信号(0x0~0xF)を7セグメントLEDに表示できるパターンに変換するCreatePattern関数を呼び出す.変換するきっかけ(トリガ)はDIS1_NUMであり,これが変化したときにパターンを生成するようにする.
  • DIS1_NUMと同様に,与えられたDIS2_NUMから,パターンを生成する.
  • DIS1_NUMと同様に,与えられたDIS3_NUMから,パターンを生成する.
  • DIS1_NUMと同様に,与えられたDIS4_NUMから,パターンを生成する.
  • DIVIDED_CLKの立ち上がりエッジで,表示状態(DISPLAY_STATUS)をトグルする.
  • DIVIDED_CLKの立ち下がりエッジで次のことを行う.
    • 表示するなら,つまりDISPLAY_STATUSが1で,IN_CLKも1なら次のことを行う.
      • 描画する桁(DIGIT)を巡回左シフトする.
      • 描画する桁のパターンをPATTERNに設定する.
    • 表示しないなら,PATTERNを非表示にする.

なお,CreatePattern関数は,引数は4ビットのNUM,戻り値が8ビットです.前に示した7セグメントLEDの内部構造をもとに関数を作成してください.たとえば,NUMが4'b0000であったら,8'b1100_0000;を返せばよいです.同様に,NUMが4'b0001~4'b1111についても変換するようにしてください.

JSN Teki is designed by JoomlaShine.com