00001 --! @file
00002 --! @brief Ssegdisp
00003
00004 -- 7 segment LED Display Module
00005 -- 4個の7セグメントLEDをダイナミック点燈するモジュール
00006 -- led_enableは各7セグメントLEDを点灯させるかどうか。1で点灯する
00007 -- Spartan3 デモボード用
00008
00009 --! Use standard library
00010 LIBRARY IEEE;
00011 --! std_logic_1164を使用
00012 USE IEEE.std_logic_1164.all;
00013 --! STD_LOGIC_UNSIGNEDを使用
00014 use IEEE.STD_LOGIC_UNSIGNED.ALL;
00015
00016 --! SsegDispのentity
00017 entity SsegDisp is
00018 generic(
00019 clk_frequency : := 50000 --! 動作周波数設定 (KHz)
00020 );
00021 port(
00022 clk : in ; --! クロック
00023 reset : in ; --! リセット
00024 dot : in (3 downto 0); --! 7セグLEDのドットの表示
00025 led_enable : in (3 downto 0); --! LEDのイネーブル
00026 binary3 : in (3 downto 0); --! AN3に表示するためのバイナリ値
00027 binary2 : in (3 downto 0); --! AN2に表示するためのバイナリ値
00028 binary1 : in (3 downto 0); --! AN1に表示するためのバイナリ値
00029 binary0 : in (3 downto 0); --! AN0に表示するためのバイナリ値
00030 sw : in (4 downto 0); --! スライドスイッチ5個
00031 A_n : out ; --! 7セグLED エレメントA
00032 B_n : out ; --! 7セグLED エレメントB
00033 C_n : out ; --! 7セグLED エレメントC
00034 D_n : out ; --! 7セグLED エレメントD
00035 E_n : out ; --! 7セグLED エレメントE
00036 F_n : out ; --! 7セグLED エレメントF
00037 G_n : out ; --! 7セグLED エレメントG
00038 DP_n : out ; --! 7セグLED エレメントDP
00039 AN_n : out (3 downto 0) --! 7セグLED 表示イネーブル
00040 );
00041 end SsegDisp;
00042
00043 --! @brief Ssegdispのアーキテクチャの定義
00044 --! @details Ssegdisp
00045 architecture RTL of SsegDisp is
00046 --! B27segDec (7 segment LED Decoder)
00047 component B27segDec
00048 port(
00049 binary : in (3 downto 0);
00050 enable : in ;
00051 segdecout : out (0 to 6) -- a,b,c,d,e,f,g segment without dot.
00052 );
00053 end component;
00054 --! FreqDiv, 周波数分周回路
00055 component FreqDiv
00056 generic(
00057 clk_frequency : := 5000 -- KHz
00058 );
00059 port(
00060 clk, reset : in ;
00061 lighting_ena : out
00062 );
00063 end component;
00064 --! LED番号
00065 signal ledno : (5 downto 0);
00066 --! 表示イネーブル
00067 signal lighting_ena : ;
00068 --! 7セグLEDデコード出力
00069 signal decout : (6 downto 0);
00070 --! binary
00071 signal binary : (3 downto 0);
00072 --! logic1
00073 signal logic1 : ;
00074 --! LED enable
00075 signal led_ena : ;
00076 --! 7セグLEDのイネーブル
00077 signal nLEDOE : (3 downto 0);
00078 --! 7セグLEDのデコードデータ
00079 signal nLEDDB : (6 downto 0);
00080 --! logic0
00081 signal logic0 : ;
00082 begin
00083 logic0 <= '0';
00084
00085 --! @details 2ビット・バイナリカウンタ
00086 TWO_BITS_BINARY_COUNTER : process(reset, clk) begin
00087 if reset='1' then
00088 ledno <= (others => '0');
00089 elsif clk'event and clk='1' then
00090 if lighting_ena = '1' then
00091 if ledno=('0'&sw)+3 then
00092 ledno <= (others => '0');
00093 else
00094 ledno <= ledno + 1;
00095 end if;
00096 end if;
00097 end if;
00098 end process TWO_BITS_BINARY_COUNTER;
00099
00100 -- 表示するLEDを決定する
00101 nLEDOE(0) <= '0' when ledno="000000" else '1';
00102 nLEDOE(1) <= '0' when ledno="000001" else '1';
00103 nLEDOE(2) <= '0' when ledno="000010" else '1';
00104 nLEDOE(3) <= '0' when ledno="000011" else '1';
00105
00106 --! @details LEDリフレッシュ周波数分周器
00107 FreqDivi : FreqDiv generic map(
00108 clk_frequency => clk_frequency
00109 )port map(
00110 clk => clk ,
00111 reset => reset,
00112 lighting_ena => lighting_ena
00113 );
00114
00115 --! @details ダイナミック点灯用マルチプレクサ
00116 DYNA_DISP_MUX : process(ledno, binary0, binary1, binary2, binary3, dot, led_enable) begin
00117 case ledno is
00118 when "000000" =>
00119 binary <= binary0;
00120 led_ena <= led_enable(0);
00121 DP_n <= not dot(0);
00122 when "000001" =>
00123 binary <= binary1;
00124 led_ena <= led_enable(1);
00125 DP_n <= not dot(1);
00126 when "000010" =>
00127 binary <= binary2;
00128 led_ena <= led_enable(2);
00129 DP_n <= not dot(2);
00130 when "000011" =>
00131 binary <= binary3;
00132 led_ena <= led_enable(3);
00133 DP_n <= not dot(3);
00134 when others =>
00135 binary <= binary3;
00136 led_ena <= logic0;
00137 DP_n <= logic0;
00138 end case;
00139 end process DYNA_DISP_MUX;
00140
00141 --! @details 7セグメントLEDデコーダ
00142 B27segDeci : B27segDec port map(
00143 binary => binary,
00144 enable => led_ena,
00145 segdecout => decout
00146 );
00147
00148 nLEDDB <= not decout;
00149 A_n <= nLEDDB(6);
00150 B_n <= nLEDDB(5);
00151 C_n <= nLEDDB(4);
00152 D_n <= nLEDDB(3);
00153 E_n <= nLEDDB(2);
00154 F_n <= nLEDDB(1);
00155 G_n <= nLEDDB(0);
00156 AN_n <= nLEDOE;
00157 end RTL;