回路ブロック ライブラリー
<試作品仕様>
・ クロックの立ち上がりでデータをラッチすること
・ クリア端子、プリセット端子を有すること
・ 汎用ロジックIC 74xx74相当の機能・性能であることこと
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します。
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例>
<VHDLソースファイル> library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity c1110_Dtype_FF_full is Port ( Data : in STD_LOGIC; CLK : in STD_LOGIC; CLR : in STD_LOGIC; PR : in STD_LOGIC; Q : out STD_LOGIC; nQ : out STD_LOGIC); end c1110_Dtype_FF_full; architecture RTL of c1110_Dtype_FF_full is begin process(CLK,CLR,PR) begin if(CLR = '0')then --クリアの場合 Q <= '0'; nQ <= '1'; elsif(PR = '0')then --プリセットの場合 Q <= '1'; nQ <= '0'; elsif(CLK'event and CLK = '1')then --クロックの立ち上がりを検出した場合 Q <= Data; nQ <= not Data; end if; end process; end RTL;
<ucfソースファイル> #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "CLK" LOC = "P18" ; NET "CLR" LOC = "P2" ; NET "Data" LOC = "P1" ; NET "nQ" LOC = "P43" ; NET "PR" LOC = "P3" ; NET "Q" LOC = "P44" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE
----------------------------------------------------
<動作結果>
クロックは手動でスイッチを押し、単安定マルチバイブレータで波形整形した100msec幅のパルスを入力しました。
フリップフロップのモード |
動作結果 |
Q=1 NQ=0 |
![]() |
Q=0 NQ=1 |
![]() |
■ 7セグメント デコーダ
<試作品仕様>
・HEXスチッチからの4ビットのバイナリ入力を7セグメントLEDに下記のように表示する。
バイナリ入力 (b(3) b(2) b(1) b(0)) | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
7セグメントLED表示 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | b | C | d | E | F |
・7セグメントLEDのドットは外部スイッチからON/OFFできること
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します。
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> <VHDLソースファイル> library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity c1110_7segment_full is Port ( Hex_Sw : in STD_LOGIC_VECTOR (3 downto 0); Dot_Sw : in STD_LOGIC; seg7_Led : out STD_LOGIC_VECTOR (7 downto 0)); end c1110_7segment_full; architecture RTL of c1110_7segment_full is signal nHex_Sw : std_logic_vector(3 downto 0); begin nHex_Sw <= not Hex_Sw; process(Dot_Sw) begin if(Dot_Sw = '1')then case nHex_Sw is --各segmenntとの関係 ".gfedcba" when "0000" => seg7_Led(7 downto 0) <= "01000000"; --0 when "0001" => seg7_Led(7 downto 0) <= "01111001"; --1 when "0010" => seg7_Led(7 downto 0) <= "00100100"; --2 when "0011" => seg7_Led(7 downto 0) <= "00110000"; --3 when "0100" => seg7_Led(7 downto 0) <= "00011001"; --4 when "0101" => seg7_Led(7 downto 0) <= "00010010"; --5 when "0110" => seg7_Led(7 downto 0) <= "00000010"; --6 when "0111" => seg7_Led(7 downto 0) <= "01111000"; --7 when "1000" => seg7_Led(7 downto 0) <= "00000000"; --8 when "1001" => seg7_Led(7 downto 0) <= "00010000"; --9 when "1010" => seg7_Led(7 downto 0) <= "00001000"; --A when "1011" => seg7_Led(7 downto 0) <= "00000011"; --b when "1100" => seg7_Led(7 downto 0) <= "01000110"; --C when "1101" => seg7_Led(7 downto 0) <= "00100001"; --d when "1110" => seg7_Led(7 downto 0) <= "00000110"; --E when "1111" => seg7_Led(7 downto 0) <= "00001110"; --F when others => seg7_Led(7 downto 0) <= "00000000"; --その他の場合 end case; elsif(Dot_Sw = '0')then case nHex_Sw is when "0000" => seg7_Led(7 downto 0) <= "11000000"; --0 when "0001" => seg7_Led(7 downto 0) <= "11111001"; --1 when "0010" => seg7_Led(7 downto 0) <= "10100100"; --2 when "0011" => seg7_Led(7 downto 0) <= "10110000"; --3 when "0100" => seg7_Led(7 downto 0) <= "10011001"; --4 when "0101" => seg7_Led(7 downto 0) <= "10010010"; --5 when "0110" => seg7_Led(7 downto 0) <= "10000010"; --6 when "0111" => seg7_Led(7 downto 0) <= "11111000"; --7 when "1000" => seg7_Led(7 downto 0) <= "10000000"; --8 when "1001" => seg7_Led(7 downto 0) <= "10010000"; --9 when "1010" => seg7_Led(7 downto 0) <= "10001000"; --A when "1011" => seg7_Led(7 downto 0) <= "10000011"; --b when "1100" => seg7_Led(7 downto 0) <= "11000110"; --C when "1101" => seg7_Led(7 downto 0) <= "10100001"; --d when "1110" => seg7_Led(7 downto 0) <= "10000110"; --E when "1111" => seg7_Led(7 downto 0) <= "10001110"; --F when others => seg7_Led(7 downto 0) <="10000110"; --その他の場合 end case; end if; end process; end RTL;
<ucfソースファイル> #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "Dot_Sw" LOC = "P1" ; NET "Hex_Sw<0>" LOC = "P14" ; NET "Hex_Sw<1>" LOC = "P13" ; NET "Hex_Sw<2>" LOC = "P12" ; NET "Hex_Sw<3>" LOC = "P11" ; NET "seg7_Led<0>" LOC = "P24" ; NET "seg7_Led<1>" LOC = "P25" ; NET "seg7_Led<2>" LOC = "P26" ; NET "seg7_Led<3>" LOC = "P28" ; NET "seg7_Led<4>" LOC = "P29" ; NET "seg7_Led<5>" LOC = "P33" ; NET "seg7_Led<6>" LOC = "P34" ; NET "seg7_Led<7>" LOC = "P27" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE
----------------------------------------------
<動作結果>
バイナリ入力 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 |
7セグメントLED 表示 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
バイナリ入力 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
7セグメント 表示 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
■ 8ビットラッチ(74XX574、74XX374相当)
<試作品仕様>
・8ビッドのパラレルデータを クロックの立ち上がりでラッチできること。
・リセット信号でデータをクリアできること。
・汎用ロジックIC 74XX574、74XX374相当の性能・機能を有すること。
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します。
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> <VHDLソースファイル> library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Latch_8bit is Port ( data_in : in STD_LOGIC_VECTOR (7 downto 0); data_out : out STD_LOGIC_VECTOR (7 downto 0); Clk : in STD_LOGIC; Reset : in STD_LOGIC); end Latch_8bit; architecture RTL of Latch_8bit is begin process(Reset,Clk) begin if(Reset = '0')then -- リセットの場合 data_out <= "00000000"; elsif(Clk' event and Clk = '1')then --クロックが立ち上がった場合 data_out <= data_in; --入力データを出力する end if; end process; end RTL;
<ucfソースファイル> #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "Clk" LOC = "P18" ; NET "data_in<0>" LOC = "P1" ; NET "data_in<1>" LOC = "P2" ; NET "data_in<2>" LOC = "P3" ; NET "data_in<3>" LOC = "P4" ; NET "data_in<4>" LOC = "P14" ; NET "data_in<5>" LOC = "P13" ; NET "data_in<6>" LOC = "P12" ; NET "data_in<7>" LOC = "P11" ; NET "data_out<0>" LOC = "P35" ; NET "data_out<1>" LOC = "P36" ; NET "data_out<2>" LOC = "P37" ; NET "data_out<3>" LOC = "P38" ; NET "data_out<4>" LOC = "P39" ; NET "data_out<5>" LOC = "P40" ; NET "data_out<6>" LOC = "P43" ; NET "data_out<7>" LOC = "P44" ; NET "Reset" LOC = "P6" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE
----------------------------------------
<動作結果>
手動スイッチにより、単安定マルチの100msecのクロックパルスを発生させ ラッチ 及びリセット動作を目視確認しました。
■ 4bit BCD セレクタ
<試作品仕様>
・2つの4ビットBCDデータのいずれかを選択する。
・選択信号は4ビット信号とし、0000-0111の場合は HEX SW1のデータを 1000-1111の場合はHEX SW2の
データを出力すること。
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します。
<試作品外観>
下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> <VHDLソースファイル> library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity c1111_4bitBCD_Selector is Port ( In1 : in STD_LOGIC_VECTOR (3 downto 0); In2 : in STD_LOGIC_VECTOR (3 downto 0); OutX : out STD_LOGIC_VECTOR (3 downto 0); Select_Bus : in STD_LOGIC_VECTOR (3 downto 0)); end c1111_4bitBCD_Selector; architecture RTL of c1111_4bitBCD_Selector is begin process(Select_Bus) begin case Select_Bus(3 downto 0) is when "0000" => OutX <= In1; when "0001" => OutX <= In1; When "0010" => OutX <= In1; When "0011" => OutX <= In1; When "0100" => OutX <= In1; When "0101" => OutX <= In1; When "0110" => OutX <= In1; When "0111" => OutX <= In1; When others => OutX <= In2; end case; end process; end RTL;
<ucfソースファイル> #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "In1<0>" LOC = "P14" ; NET "In1<1>" LOC = "P13" ; NET "In1<2>" LOC = "P12" ; NET "In1<3>" LOC = "P11" ; NET "In2<0>" LOC = "P9" ; NET "In2<1>" LOC = "P8" ; NET "In2<2>" LOC = "P7" ; NET "In2<3>" LOC = "P6" ; NET "OutX<0>" LOC = "P39" ; NET "OutX<1>" LOC = "P40" ; NET "OutX<2>" LOC = "P43" ; NET "OutX<3>" LOC = "P44" ; NET "Select_Bus<0>" LOC = "P1" ; NET "Select_Bus<1>" LOC = "P2" ; NET "Select_Bus<2>" LOC = "P3" ; NET "Select_Bus<3>" LOC = "P4" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE
-----------------------------------------------------------------------
<動作結果>
Selector: 0000〜0111 の場合 | Selector: 1000〜1111の場合 |
![]() |
![]() |
■ 同期型8ビット アップ゚カウンタ
<試作品仕様>
・クロック信号の立ち上がりでカウントアップすること。
・出力は8ビットバイナリー出力とする。
・255の次は0に戻り表示する。以下これを繰り返す。
・リセット信号でカウンタ値が0になること。
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します。
<試作品外観>
下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> <VHDLソースファイル> library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; --算術演算関数の呼び出し use IEEE.STD_LOGIC_UNSIGNED.ALL; --符号なし演算関数の呼び出し entity c1111_8bit_Counter is Port ( Clk : in STD_LOGIC; Reset : in STD_LOGIC; Outx : out STD_LOGIC_VECTOR (7 downto 0)); end c1111_8bit_Counter; architecture RTL of c1111_8bit_Counter is signal Outy: std_logic_vector(7 downto 0); signal nReset: std_logic; begin nReset <= not Reset; --極性反転 process(nReset,Clk) begin if(nReset = '1')then Outy <= "00000000"; elsif (Clk' event and Clk = '1') then Outy <= Outy + '1'; --要 use IEEE.STD_LOGIC_UNSIGNED.ALL; --符号なし演算関数の呼び出し end if; Outx <= Outy; end process; end RTL;
<ucfソースファイル> #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "Clk" LOC = "P18" ; NET "Outx<0>" LOC = "P35" ; NET "Outx<1>" LOC = "P36" ; NET "Outx<2>" LOC = "P37" ; NET "Outx<3>" LOC = "P38" ; NET "Outx<4>" LOC = "P39" ; NET "Outx<5>" LOC = "P40" ; NET "Outx<6>" LOC = "P43" ; NET "Outx<7>" LOC = "P44" ; NET "Reset" LOC = "P6" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE
----------------------------------------------------------------
<動作結果>
手動で16回、押しボタンスイッチを押した時の写真です。 b(4)のLEDだけが消灯しています。
■ 8ビット シフトレジスタ(シリアルin → パラレルout)(74xx164相当)
<試作品仕様>
・クロックの立ち上がりでデータを読み込むこと。
・出力データはクロックの立ち上がり毎に逐次出力のこと。。
・リセットできること。
・74HXX164相当の機能・性能を有すること。
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します。
<試作品外観>
下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> <VHDLソースファイル> -- Dependencies: -- -- Revision: -- Revision 0.01 - File Created -- Additional Comments: -- ---------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; --算術演算関数の呼び出し use IEEE.STD_LOGIC_UNSIGNED.ALL; --符号なし演算関数の呼び出し entity c1111_8bit_ShiftResister_Sin is Port ( Clk : in STD_LOGIC; Data_Seri : in STD_LOGIC; Data_Parax : out STD_LOGIC_VECTOR (7 downto 0); Reset : in STD_LOGIC); end c1111_8bit_ShiftResister_Sin; architecture RTL of c1111_8bit_ShiftResister_Sin is signal nReset: std_logic; signal Data_Paray: std_logic_vector(7 downto 0); --内部専用出力設定 begin nReset <= not Reset; --極性反転 process(nReset,Clk) begin if(nReset = '1')then Data_Paray <= "00000000"; --リセット elsif (Clk' event and Clk = '1')then Data_Paray <= Data_Paray(6 downto 0) & Data_Seri; --ベクタ配列のスライス 及びLSBの結合 end if; Data_Parax <= Data_Paray; end process; end RTL;
<ucfファイル> #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "Clk" LOC = "P18" ; NET "Data_Parax<0>" LOC = "P35" ; NET "Data_Parax<1>" LOC = "P36" ; NET "Data_Parax<2>" LOC = "P37" ; NET "Data_Parax<3>" LOC = "P38" ; NET "Data_Parax<4>" LOC = "P39" ; NET "Data_Parax<5>" LOC = "P40" ; NET "Data_Parax<6>" LOC = "P43" ; NET "Data_Parax<7>" LOC = "P44" ; NET "Data_Seri" LOC = "P1" ; NET "Reset" LOC = "P6" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE
--------------------------------------------
<動作結果>
手動スイッチで"00001111"を上位ビットから順次、4クロック送った時の写真です。
■ 4ビット アッダー(加算器)
<試作品仕様>
・2つの4ビットデータを加算して出力する。
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します
<試作品外観>
下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> <VHDLソースファイル> library IEEE; use IEEE.STD_LOGIC_1164.ALL; use Ieee.Std_Logic_Arith.All; --算術演算関数の呼び出し use Ieee.Std_Logic_Unsigned.All; --符号なし演算関数の呼び出し entity c1111_4bit_Adder is Port ( Data1 : in STD_LOGIC_VECTOR (3 downto 0); Data2 : in STD_LOGIC_VECTOR (3 downto 0); Added_Data : out STD_LOGIC_VECTOR (3 downto 0)); end c1111_4bit_Adder; architecture RTL of c1111_4bit_Adder is signal nData1: std_logic_vector(3 downto 0); signal nData2: std_logic_vector(3 downto 0); signal Added_Datax: std_logic_vector(3 downto 0); begin nData1 <= not Data1; --極性反転 nData2 <= not Data2; --極性反転 process(nData1,nData2) begin Added_Datax <= nData1 + nData2; --加算演算 Added_Data <= Added_Datax; end process; end RTL;
<ucfソースファイル> #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "Added_Data<0>" LOC = "P35" ; NET "Added_Data<1>" LOC = "P36" ; NET "Added_Data<2>" LOC = "P37" ; NET "Added_Data<3>" LOC = "P38" ; NET "Data1<0>" LOC = "P1" ; NET "Data1<1>" LOC = "P2" ; NET "Data1<2>" LOC = "P3" ; NET "Data1<3>" LOC = "P4" ; NET "Data2<0>" LOC = "P14" ; NET "Data2<1>" LOC = "P13" ; NET "Data2<2>" LOC = "P12" ; NET "Data2<3>" LOC = "P11" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE
--------------------------------------------------------
<動作結果>
1 + 1 = 2 の加算演算をした時の写真を示します。
<試作品仕様>
・ 2つの4ビット入力データを比較して下記の出力をだすこと。
@ Data1 > Data2 の場合
Greater = 1
Equal = 0
Smaller = 0
A Data1 = Data2 の場合
Greater = 0
Equal = 1
Smaller = 0
B Data1 < Data2 の場合
Greater = 0
Equal = 0
Smaller = 1
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します
<試作品外観>
下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> <VHDLソースファイル> library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.Std_logic_arith.All; use ieee.Std_logic_unsigned.All; entity c1111_4bit_Comparator is Port ( Data1 : in STD_LOGIC_VECTOR (3 downto 0); Data2 : in STD_LOGIC_VECTOR (3 downto 0); Greater : out STD_LOGIC; Equal : out STD_LOGIC; Smaller : out STD_LOGIC); end c1111_4bit_Comparator; architecture RTL of c1111_4bit_Comparator is signal nData1: std_logic_vector(3 downto 0); signal nData2: std_logic_vector(3 downto 0); begin nData1 <= not Data1; --極性反転 nData2 <= not Data2; --極性反転 process(nData1,nData2) begin if(nData1 > nData2)then -- Data1の方が大きい場合 Greater <= '1'; Equal <= '0'; Smaller <= '0'; elsif(nData1 < nData2)then --Data1の方が小さい場合 Greater <= '0'; Equal <= '0'; Smaller <= '1'; else --以上の場合以外の場合 Greater <= '0'; Equal <= '1'; Smaller <= '0'; end if; end process; end RTL;
<ucfソースファイル> #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "Data1<0>" LOC = "P1" ; NET "Data1<1>" LOC = "P2" ; NET "Data1<2>" LOC = "P3" ; NET "Data1<3>" LOC = "P4" ; NET "Data2<0>" LOC = "P14" ; NET "Data2<1>" LOC = "P13" ; NET "Data2<2>" LOC = "P12" ; NET "Data2<3>" LOC = "P11" ; NET "Equal" LOC = "P36" ; NET "Greater" LOC = "P37" ; NET "Smaller" LOC = "P35" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE
--------------------------------------------------------------
<動作結果>
写真は Data1=1、Data2=1 でデータが等しい場合のものです。
■ 発振器
<試作品仕様>
・外部からの周波数1KHzの矩形波クロックをもとに発振器を製作する。
・周期は1sec、出力’0’(LEDがON)の時間は500msecとする。
・発振器はクロックが入力されるかぎり、無限に発振を繰りかえすこと。
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します
<試作品外観>
下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> <VHDLソースファイル> library IEEE; use IEEE.STD_LOGIC_1164.ALL; use Ieee.Std_Logic_Arith.All; --算術演算関数呼び出し use Ieee.Std_Logic_Unsigned.All; --符号なし演算関数呼び出し entity c1111_Osc is Port ( Clk : in STD_LOGIC; Osc_Out : out STD_LOGIC); end c1111_Osc; architecture RTL of c1111_Osc is signal T0_Count: integer range 0 to 1000; --T0_Countを整数に設定 begin process(Clk) begin if(Clk' event and Clk = '1')then --クロック検出 T0_Count <= T0_Count + 1; --インクリメント if(T0_Count < 500)then --ON時間の場合 --ON時間: 1msec(= 1/1KHz) × 500 = 500msec Osc_Out <= '0'; else --OFF時間の場合 Osc_Out <= '1'; end if; if(T0_Count = 1000)then --周期のカウントになった場合 --周期: 1msec(= 1/1KHz) × 1000 = 1000msec = 1sec T0_Count <= 0; end if; end if; end process; end RTL;
<ucfソースファイル> #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "Clk" LOC = "P5" ; NET "Osc_Out" LOC = "P44" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE
--------------------------------------------------------------------------
<動作結果>
LEDが周期1sec、ON時間 500msecで点滅を繰り返すことを確認しました。
LED : ON |
LED : OFF |
![]() |
![]() |
■ 入力信号同期検出/同期出力
<試作品仕様>
・スイッチ信号のON/OFFを外部クロックの立上りのタイミングで検出する。
・出力も外部クロックの立上りのタイミングでおこなう。
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します
<試作品外観>
下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> <VHDLソースファイル> library IEEE; use IEEE.STD_LOGIC_1164.ALL; use Ieee.Std_Logic_Arith.All; use Ieee.Std_Logic_Unsigned.All; entity c1111_SyncroSw_Detect is Port ( Sw_Detect : in STD_LOGIC; Led : out STD_LOGIC; Clk : in STD_LOGIC); end c1111_SyncroSw_Detect; architecture RTL of c1111_SyncroSw_Detect is signal preSw_Detect: Std_Logic; signal Mode: Std_Logic; signal nSw_Detect: Std_Logic; begin nSW_Detect <= not Sw_Detect; --極性反転 process(Clk) begin if(Clk' event and Clk = '1')then if(preSw_Detect = '0' and nSw_Detect = '1')then -- Sw: OFF → ON 立上り検出( ← 前回のクロックに於けるスイッチの状態と今回のスイッチの状態を比較) Mode <= '1'; -- SW ONモード end if; if(nSw_Detect = '0')then Mode <= '0'; end if; Led <= not Mode; --Led 点灯消灯制御 preSW_Detect <= nSW_Detect; --現時点のスイッチの状態を記憶 end if; end process; end RTL;
<ucfソースファイル> #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "Clk" LOC = "P5" ; NET "Led" LOC = "P37" ; NET "Sw_Detect" LOC = "P6" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE
------------------------------------------------------------------
<動作結果>
■ オンディレー タイマ(チャタリング除去回路付)
<試作品仕様>
・押しボタンスイッチを入力とするオンディレイタイマによりLEDを点灯させること
・スイッチの検出は1KHzのクロックの立ち上がりと同期しておこなうこと。
・押しボタンには 1msec毎に100回連続でスイッチがONであることを確認するチャタリング除去回路を
もうけること。
・LEDの点灯・消灯もクロックの立上りと同期していること。
・押しボタンスイッチがOFFになったら、クロックの立上りと同期してすみやかに消灯のこと。
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します
<試作品外観>
下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> <VHDLソースファイル> library IEEE; use IEEE.STD_LOGIC_1164.ALL; use Ieee.Std_Logic_Arith.All; --算術演算関数呼び出し use Ieee.Std_Logic_unsigned.All; --符号なし整数演算関数呼び出し entity c1111_Timer is Port ( Sw : in STD_LOGIC; Clk : in STD_LOGIC; Led : out STD_LOGIC); end c1111_Timer; architecture RTL of c1111_Timer is signal Count: Integer range 0 to 10000; --オンディレー時間を最大1000msecに設定 signal Mode_Sw: Integer range 0 to 1; --入力SW検出 signal N_Chatt: Integer range 0 to 100; -- Max 100msec signal Sum: Integer range 0 to 100; --スイッチが1になった回数の合計 signal Detect: Integer range 0 to 1; --整数のスイッチ検出 begin process(Clk) begin if(Clk' event and Clk = '1')then --クロック立上がり検出 --チャタリング防止機能付きスイッチ検出 if(Sw = '0')then --SW状態検出 Detect <= 0; else Detect <= 1; end if; Sum <= Sum + Detect; --チャタリング防止 N_Chatt <= N_Chatt + 1; if(N_Chatt >= 100)then --100msec毎にチェック if(Sum = 0)then --100回すべて0(SW:ON)なら Mode_Sw <= 0; --SW: ON else Mode_Sw <= 1; --SW: OFF end if; N_Chatt <= 0; Sum <= 0; end if; --オンディレータイマ if(Mode_Sw = 0)then Count <= Count + 1; if(Count > 1000)then -- オンディレー時間: 1000msec Led <= '0'; --LED点灯 Count <= 0; end if; else Count <= 0; Led <= '1'; --LED消灯 end if; end if; end process; end RTL;
<ucfソースファイル>
#PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "Clk" LOC = "P5" ; NET "Led" LOC = "P44" ; NET "Sw" LOC = "P6" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE
--------------------------------------------------------------
<動作結果>
上段:CH1 押しボタンSW信号 下段:CH2 LEDアノード電圧 |
![]() |
デジタルオシロ:岩通 DS-5102
■ 7セグメント1桁16進バイナリカウンタ
<試作品仕様>
・7セグメントLED ×1個 に0〜Fの表示をおこなう。
・表示する数値は下記に示すように、 1づつインクリメンして、Fまでいったらまた0にもどること。
0 → 1 → 2 →3 → …… … D → E →F → 0 → 1 → ……
・インクリメントは1秒毎に行われること。
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します
<試作品外観>
下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> <VHDLソースファイル> library IEEE; --最上層ブロック use IEEE.STD_LOGIC_1164.ALL; use Ieee.Std_Logic_Arith.All; use Ieee.Std_Logic_Unsigned.All; entity c1111_7seg1digit3_Counter is Port ( Clk : in STD_LOGIC; Seg7 : out STD_LOGIC_VECTOR (7 downto 0)); end c1111_7seg1digit3_Counter; architecture RTL of c1111_7seg1digit3_Counter is Signal Count1: Integer range 0 to 1000; Signal Count2: Integer range 0 to 15; component Display is --コンポーネント宣言 Port ( Seg : out STD_LOGIC_VECTOR (7 downto 0); Count : Integer range 0 to 15); end component; begin process(Clk) begin if(Clk' event and Clk = '1')then --1msec毎 Count1 <= Count1 + 1; if(Count1 >= 1000)then --1sec毎 Count1 <= 0; Count2 <= Count2 +1; --0〜15の繰り返し if(Count2 >= 16)then Count2 <= 0; end if; end if; end if; end process; U1: Display port map(Seg7,Count2); end RTL; -------------------------------------------------------------------------------- library IEEE; --下位層ブロック use IEEE.STD_LOGIC_1164.ALL; use Ieee.Std_Logic_Arith.All; use Ieee.Std_Logic_Unsigned.All; entity Display is --7セグメントLED表示ライブラリ Port( Seg : out STD_LOGIC_VECTOR (7 downto 0); Count : Integer range 0 to 15); end Display; architecture RTL of Display is begin process(Count) --7セグメントLED 16進表示 begin case(Count) is when 0 => Seg <= "11000000"; --0 when 1 => Seg <= "10100100"; --2 when 3 => Seg <= "10110000"; --3 when 4 => Seg <= "10011001"; --4 when 5 => Seg <= "10010010"; --5 when 6 => Seg <= "10000010"; --6 when 7 => Seg <= "11111000"; --7 when 8 => Seg <= "10000000"; --8 when 9 => Seg <= "10010000"; --9 when 10 => Seg <= "10001000"; --A when 11 => Seg <= "10000011"; --b when 12 => Seg <= "11000110"; --C when 13 => Seg <= "10100001"; --d when 14 => Seg <= "10000110"; --E when 15 => Seg <= "10001110"; --F when others => Seg <="10000110"; --その他の場合 end case; end process; end RTL;
<ucfソースファイル> #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "Clk" LOC = "P5" ; NET "Seg7<0>" LOC = "P35" ; NET "Seg7<1>" LOC = "P36" ; NET "Seg7<2>" LOC = "P37" ; NET "Seg7<3>" LOC = "P39" ; NET "Seg7<4>" LOC = "P40" ; NET "Seg7<5>" LOC = "P43" ; NET "Seg7<6>" LOC = "P44" ; NET "Seg7<7>" LOC = "P38" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE
----------------------------------------------------
<動作結果>
1sec毎にカウントアップ中で、4を表示したところです。
■ 7セグメント×2桁 10進カウンタ
<試作品仕様>
・7セグメントLED ×2個に0〜99の表示をおこなう。
・表示する数値は下記に示すように、 1づつインクリメンして、99までいったらまた0にもどること。
0 → 1 → 2 →3 → …… … 97 → 98 →99 → 0 → 1 → ……
・インクリメントは1秒毎に行われること。
・入力としては1KHzのカウンタをもちいること。
<ブロック図>
<試作品回路図>(回路図のPDFファイル)
以下に、XC9572XLを使った場合例を示します
<試作品外観>
下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> library IEEE; --最上層ブロック use IEEE.STD_LOGIC_1164.ALL; use Ieee.Std_Logic_Arith.All; use Ieee.Std_Logic_Unsigned.All; entity c1111_7seg2digit3_Counter is Port ( Clk : in STD_LOGIC; Seg7_0 : out STD_LOGIC_VECTOR (7 downto 0); seg7_1 : out Std_Logic_Vector (7 downto 0)); end c1111_7seg2digit3_Counter; architecture RTL of c1111_7seg2digit3_Counter is Signal Count1: Integer range 0 to 1000; Signal Count2: Integer range 0 to 9; Signal Count3: Integer range 0 to 9; component Display0 is --コンポーネント宣言 Port ( Count2 : in Integer range 0 to 10; Seg7_0 : out STD_LOGIC_VECTOR (7 downto 0)); end component; component Display1 is --コンポーネント宣言 Port ( Count3 : in Integer range 0 to 10; Seg7_1 : out STD_LOGIC_VECTOR (7 downto 0)); end component; begin process(Clk) begin if(Clk' event and Clk = '1')then --1msec毎 Count1 <= Count1 + 1; if(Count1 >= 1000)then --1sec毎 Count1 <= 0; Count2 <= Count2 +1; --0〜15の繰り返し if(Count2 >= 9)then Count2 <= 0; Count3 <= Count3 + 1; if(Count3 >= 9)then Count3 <= 0; end if; end if; end if; end if; end process; U1: Display0 port map(Count2,Seg7_0); U2: Display1 port map(Count3,Seg7_1); end RTL; ---------------------------------------------------------------------- library IEEE; --下位層ブロック use IEEE.STD_LOGIC_1164.ALL; use Ieee.Std_Logic_Arith.All; use Ieee.Std_Logic_Unsigned.All; entity Display1 is --7セグメントLED表示ライブラリ Port ( Count3 : in Integer range 0 to 10; Seg7_1 : out STD_LOGIC_VECTOR (7 downto 0)); end Display1; architecture RTL of Display1 is begin process(Count3) --7セグメントLED 16進表示 begin case(Count3) is when 0 => Seg7_1 <= "11000000"; --0 when 1 => Seg7_1 <= "11111001"; --1 when 2 => Seg7_1 <= "10100100"; --2 when 3 => Seg7_1 <= "10110000"; --3 when 4 => Seg7_1 <= "10011001"; --4 when 5 => Seg7_1 <= "10010010"; --5 when 6 => Seg7_1 <= "10000010"; --6 when 7 => Seg7_1<= "11111000"; --7 when 8 => Seg7_1 <= "10000000"; --8 when 9 => Seg7_1 <= "10010000"; --9 when 10 => Seg7_1 <= "10001000"; --A when others => Seg7_1 <="10000110"; --その他の場合 end case; end process; end RTL; -------------------------------------------------------------------------- library IEEE; --下位層ブロック use IEEE.STD_LOGIC_1164.ALL; use Ieee.Std_Logic_Arith.All; use Ieee.Std_Logic_Unsigned.All; entity Display0 is --7セグメントLED表示ライブラリ Port ( Count2 : in Integer range 0 to 10; Seg7_0 : out STD_LOGIC_VECTOR (7 downto 0)); end Display0; architecture RTL of Display0 is begin process(Count2) --7セグメントLED 16進表示 begin case(Count2) is when 0 => Seg7_0 <= "11000000"; --0 when 1 => Seg7_0 <= "11111001"; --1 when 2 => Seg7_0 <= "10100100"; --2 when 3 => Seg7_0 <= "10110000"; --3 when 4 => Seg7_0 <= "10011001"; --4 when 5 => Seg7_0 <= "10010010"; --5 when 6 => Seg7_0 <= "10000010"; --6 when 7 => Seg7_0 <= "11111000"; --7 when 8 => Seg7_0 <= "10000000"; --8 when 9 => Seg7_0 <= "10010000"; --9 when 10 => Seg7_0 <= "10001000"; --A when others => Seg7_0 <="10000110"; --その他の場合 end case; end process; end RTL;
<ucfソースファイル> #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "Clk" LOC = "P5" ; NET "Seg7_0<0>" LOC = "P35" ; NET "Seg7_0<1>" LOC = "P36" ; NET "Seg7_0<2>" LOC = "P37" ; NET "Seg7_0<3>" LOC = "P39" ; NET "Seg7_0<4>" LOC = "P40" ; NET "Seg7_0<5>" LOC = "P43" ; NET "Seg7_0<6>" LOC = "P44" ; NET "Seg7_0<7>" LOC = "P38" ; NET "seg7_1<0>" LOC = "P24" ; NET "seg7_1<1>" LOC = "P25" ; NET "seg7_1<2>" LOC = "P26" ; NET "seg7_1<3>" LOC = "P28" ; NET "seg7_1<4>" LOC = "P29" ; NET "seg7_1<5>" LOC = "P33" ; NET "seg7_1<6>" LOC = "P34" ; NET "seg7_1<7>" LOC = "P27" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE ------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
<動作結果>
カウント数48の時の写真です。 上段の液晶が1桁目、下段の液晶が2桁目のカウンタ数を表示しています。