回路ブロック ライブラリー


■ D型フリップフロップ(74xx74相当)

  <試作品仕様>
   ・ クロックの立ち上がりでデータをラッチすること
   ・ クリア端子、プリセット端子を有すること
   ・ 汎用ロジック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表示 A C 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 の加算演算をした時の写真を示します。





■ 4ビット コンパレータ

 <試作品仕様>
 ・ 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桁目のカウンタ数を表示しています。