職業訓練33日目 習得度確認テスト(PLDを用いたデジタル回路設計作業)

課題

2ビットバイナリカウンタの設計・製作

仕様
  • クロックでカウント
  • クロック入力は1Hz
  • 7セグメントLEDはカウントダウンを繰り返し(3,2,1,0,3,2,1,0...)
  • カウンタはカウントアップ(00→01→10→11→00...)
悪い例

「カウントダウン」の仕様をすっかり見落とし、
普通にカウントアップする回路を作ったりしてはいけない…orz
それを指摘されて、カウンタ回路をカウントダウンする回路に修正してはいけない…orz

カウンタ回路では、カウントアップをして、
デコーダ回路で、カウントダウンに解釈する。

状態遷移図

お絵描き疲れたからパス…。
遷移図的には、普通のカウンタ回路ですから。

真理値表
  • カウンタ回路
Q1 Q0 Q1' Q0'
0 0 0 1
0 1 1 0
1 0 1 1
1 1 0 0

 

Q1 Q0  a  b  c  d  e  f  g
0 0 1 1 1 1 0 0 1
0 1 1 1 0 1 1 0 1
1 0 0 1 1 0 0 0 0
1 1 1 1 1 1 1 1 0

 

カルノー
  • カウンタ回路

・Q1'

Q1\Q0 0 1
0  
1  

→Q1' = Q1 !Q0 + !Q1 Q0(Q1 xor Q0)
 
・Q0'

Q1\Q0 0 1
0  
1  

→Q0 = !Q0
 

・a

Q1\Q0 0 1
0
1  

→a = !Q1 + Q0
 
・b

Q1\Q0 0 1
0
1

→b = 1
 
・c

Q1\Q0 0 1
0  
1

→c = !Q0 + Q1
 
・d

Q1\Q0 0 1
0
1  

→d = Q1 + Q0
 
・e

Q1\Q0 0 1
0  
1  

→e = Q0
 
・f

Q1\Q0 0 1
0    
1  

→f = Q1 Q0
 
・g

Q1\Q0 0 1
0
1    

→g = !Q1
 

VHDL

今回はVHDL入力だったので、回路図はパス!

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGHNED.ALL;

entity sjdTest is
PORT ( SW1 : in std_logic;
        GCK : in std_logic;
        a : out std_logic;
        b : out std_logic;
        c : out std_logic;
        d : out std_logic;
        e : out std_logic;
        f : out std_logic;
        g : out std_logic );
end sjdTest;

architecture RTL of sjdTest is
    signal CLK : std_logic;
    signal Q0  : std_logic;
    signal Q1  : std_logic;
    signal AD_LGC : std_logic;

begin
    -- テキストでこういう書き方をしてるので同じにしましたが、
    -- 意味がない気がする…。
    CLK <= GCK;

process(CLK)
begin
    if CLK'event and CLK = '1' then
        -- 2ビットバイナリカウンタ
        Q1 <= Q0 xor Q1;
        Q0 <= not Q0;
    end if;
end process;
    -- aとdは同じロジック
    AD_LGC = (not Q0) or Q1;

    -- デコーダ表示部
    a <= not( AD_LGC );
    b <= not( ((not Q0) or Q1) or (Q0 or (not Q1)) );
    c <= not( (not Q0) or Q1 );
    d <= not( AD_LGC );
    e <= not( Q0 );
    f <= not( Q1 and Q0 );
    g <= not( not Q1 );

end RTL;