Verilog

Verilog 멀티플렉서, BCD 변환기, 플립플롭

오버헤드프레스 2023. 4. 19. 16:57

8x1 멀티플렉서

 

 

 

 

디멀티플렉서

1개의 인에이블 입력을 가지고 있는 디코더는 디멀티 플렉서로서의 기능을 수행

디멀티플렉서는 정보를 한 선으로 받아서 2^n개의 가능한 출력선들 중 하나를 선택하여, 받은 정보를 전송하는 회로이다. 디멀티플렉서는 n개의 선택선(selection line)들을 이용하여 출력을 제어

 

 

S가 0일 때, D의 신호가 F[0]에 출력

S가 1일 때, D의 신호가 F[1]에 출력

S가 2 일 때, D의 신호가 F[2]에 출력

S가 3 일 때, D의 신호가 F[3]에 출력

각 D의 값과 S의 값이 일치하는 파형으로 나온다.

 

 

멀티플렉서, 디멀티플렉서 통신

S_mux 가 0일 때, S_demux는 F 0에  clk_781kHz 를 출력(clk_781kHz가 0번)

 

 

S_mux 가 1일 때, S_demux는 F 1에  clk_1562kHz 를 출력(clk_1562kHz가 1번)

 

 

코드변환기

 

bcd코드는 10이 넘으면 6을 더해야함

hex : 0000 1011 =>11 

bcd : 0001 0001 =>17 (11에서 6을 더한 수)

 

예를 들어, 0000 0000 1010 에서 맨 최상위 비트를 하나씩 빼며 bcd 맨뒤로 하나씩 붙여줌

bin가 11보다 작을 때, bcd 0~3bit의 수가 4보다 클 경우bcd에 3을 더해준다. 6을 더할 경우 2배의 값이 출력됨

그 후 11번for문의 11번째가 실행되어 bin의 최상위 비트가 하나 지워지고 bcd의 끝에 붙는다.

 

1~F까지 똑같이 진행되다가

 

bin+6

 

 

BCD변환을 통해 7세그먼트 작동시키기

 

 

기존에 진행한 bcd_to_dec, 7세그먼트를 사용

 

기존에 A, B, C, D, F를 출력하던 세그먼트가 BCD변환을 통해 0, 1, 2, 3, 4, 5 (앞단위는 잘려있다)

 

 

플립플롭

 

기본적인 플립플롭

 

 

 

NOR 래치회로

 

 

NAND 래치회로

 

 

NOR 래치회로의 Q 출력은 R의 입력을 받고 \Q의 입력을 받기 때문에 Q, R, Qbar

Qbar는 S, Q의 입력을 받기 때문에 Qbar, S, Q를 입력하였다.

 

 

D플립플롭은 1 1 입력을 막을수있다

회로도에 삼각표시 없으면 레벨에서 동작

 

두개 코드를 인스턴스로 묶어서 실행시킴

 

 

주종형 S-R플립플롭

 

주종형(Master-Slave) 플립플롭 : 레벨 트리거링의 문제점을 해결하기 위한 다른 해결책

 

 

E = 1 : 외부의 R과 S의 입력이 Master 플립플롭에 전달.

           Slave 플립플롭은 E = 0이므로 동작하지 않는다.

E = 0 : Slave 플립플롭이 동작하여 Q = Y, \Q = \Y

           Master 플립플롭은 E = 0이므로 동작하지 않는다.

 

 

에지 트리거 D 플립플롭

클록형 D 플립플롭의 클록펄스 입력에 펄스 전이 검출기를 추가하여 구성

 

 

에지 트리거 D 플립플롭 상승에지일 때 코드

 

 

상승에지일 때 결과

상승에지 타이밍에 D = 0 따라서 Q 출력값은 0으로 진행된다.

 

상승에지 타이밍에 D = 0을 반복하다가 상승에지 타이밍에 D = 1일 때 Q 출력값은 1로 상승한다.

에지에서 동작하는 것은 회로도에 삼각형 표시

 

시뮬레이션의 결과가 다음과 같음을 확인할 수 있었다.

 

에지 트리거 D 플립플롭 하강에지일 때 코드

 

상승에지와 E의 값만 바꼈다.

 

하강에지일 때의 결과

 

하강에지일 때 D = 1이면 Q출력값이 1이 출력된다.

 

 

하강에지일 때 D = 0이면 Q출력값이 0이 출력된다.

 

에지에서 동작하는 것은 회로도에 삼각형 표시

 

시뮬레이션 결과가 다음과 같음을 확인할 수 있다.

 

 

J-K 플립플롭

J-K플립플롭은 S-R 플립플롭에서 S = 1, R = 1인 경우 출력이 불안정한 상태가 되는 문제점을 개선하여 S = 1, R = 1에서도 동작하도록 개선한 회로이다.

 

J-K플립플롭의 J는 S(set)에, K(reset)에 대응하는 입력.

 

J = 1, K = 1인 경우 J-K 플립플롭의 출력은 이전 출력의 보수 상태로 변화

 

J-K플립플롭은 플립플롭 중에서 가장 많이 사용되는 플립플롭이다.

 

 

 

클럭펄스가 발생할 때, J = 1, K = 0 이면 Q는 1 Qbar는 0.

클럭펄스가 발생할 때,  J = 1, K = 1 일 때, Q는 0, Qbar는 1.

 

진리표와 같은 결과를 얻을 수 있었다.

 

 

reset과 preset을 추가하여 결과보기

 

 

reset > preset > clk 코드 상으로 preset이 0이므로 Q = 1출력

 

reset > preset > clk 코드 상으로 reset이 0이므로 Q = 0 출력

 

reset = 1, preset = 1 인 상태에서 clk이 상승에지로 1이기 때문에 J, K 값을 보는데 1, 1이기 때문에 toggle 따라서 Q는 0.

 

진리표를 참고하되 reset, preset을 추가하여 봤을 때, 진리표랑 같음

 

 

T플립플롭 -> 카운터를 만들 때 사용가능

J-K플립플롭의 J와 K 입력을 묶어서 하나의 입력신호 T로 동작시키는 플립플롭

 

J-K플립플롭의 동작 중에서 입력이 모두 0이거나 1인 경우만을 이용하는 플립플롭

 

T플립플롭의 입력 T=0이면, T플립플롭은 J = 0, K = 0인 J-K플립플롭과 같이 동작하므로 출력은 변하지 않는다.

T = 1이면, J = 1, K = 1인 J-K플립플롭과 같이 동작하므로 출력은 보수가 된다.

 

 

 

posedge가 아닌 negedge를 두고 하강에지에서의 동작을 확인한다.

 

 

 

reset과 preset은 1, 1로 둔다. T가 1일 때 clk의 하강에지에 맞춰 toggle 동작을 반복한다.

현재 Q가 1일 때, T가 1이면 다음 하강에지에 toggle (Q = 1 > Q = 0)

현재 Q가 0일 때, T가 1이면 다음 하강에지에 toggle (Q = 0 > Q = 1)