본문 바로가기

디지털논리회로

(13)
[Verilog] FSM(유한 상태 머신)_3 지난 포스트에서 FSM의 기본적인 형태의 코딩 방식을 대략적으로 포스트 했었다. FSM 같은 경우는 사실상 모든 시스템에서 필수적인 모듈로 들어가게 된다. 모든 시스템을 구현할 때 컨트롤러와 연산부를 구현을 하는데 거의 모든 컨트롤러는 FSM 방식으로 구현을 하는거 같다. FSM에서 제어 신호를 생성하여 실행부로 제어 신호가 전달되어 그 신호에 맞게 동작을 하는게 기본적인 시스템 구현 방식이다. 원래 FSM 설계는 다음 상태를 나타내는 next_state와 현재 상태를 나타내는 state 두 reg형 데이터를 이용하여 구현하였다. 이중에서도 Mealy, Moore 방식의 FSM으로 나뉘어 졌지만 실제 설계를 할때는 next_state를 나타내는 데이터를 사용하지 않고 간단하게 현재 상태를 나타내는 sta..
[Verilog] FSM(유한 상태 머신)_2 이번에는 두번째 FSM을 설계 해보자. 첫번째 FSM과는 별다른 차이가 없지만 연습을 더 해보았다. bypass==1일때 상태가 ST1에서 ST3로 바뀌는 상황이다. 이때는 bypass를 clk와 동기화되도록 하였다. 동기화가 되면 clk가 변하기 전까지 bypass의 값을 바꿔도 상태는 변하지 않을 것이다. 다음과 같이 설계를 하고 testbench의 딜레이를 바꿔보았다. 130ns에서부터 ST1의 상태가 ST3의 상태로 bypass가 된다. 하지만 delay를 바꾸면 어떻게 될까 122ns에서 bypass가 0으로 입력되었지만 state는 ST3으로 그대로 bypass가 되었다. 이는 bypass가 clk에 동기화 돼서 다음 사이클이 될 때까지 영향을 안받는 것이다. 비동기식 방식으로 설계를 하고 싶..
[Verilog] FSM(유한 상태 머신) 모든 시스템에서는 제어부와 실행부로 나뉜다. 제어부는 명령을 내리는 부서로 실행부로 하여금 특정한 행동을 하도록 신호를 보낸다. 신호를 받은 실행부는 신호에 따라 해당된 일을 수행한다. 사람으로 따지면 제어부는 사람의 '뇌'이고 실행부는 사람의 '몸'으로 그 기능을 나눌 수 있다. 시스템에서는 제어부가 내린 신호에 따라 실행부의 '상태'가 변하면서 원하는 행동을 한다. 이때 상태가 변함에 따라 실행부에서 나오는 외부 신호가 달라져야 한다. 간단히 그림으로 표현하면 다음과 같이 상태가 변해야 한다. 내가 어떤 버튼을 눌렀을 때는 S0의 상태가 시작되고 그에 따른 버튼들을 누르면 상태가 S1,S2로 변하면서 그 상태에 따른 결과값이 출력 되는 것이다. Verilog 설계시 FSM하면 가장 먼저 떠오르는 예제..
[Verilog] 4-bit fulladder 이번에는 4-bit fulladder를 설계할 것이다. 그전에 4-bit fulladder를 1-bit fulladder로 하위 모듈을 만들어서 연결해줄 것이다. 1-bit fulladder의 모습으로 behavior-level로 설계를 하였다. 사진과 같이 입력값 c,d를 4비트로 선언하여 한 비트씩 1-bit fulladder로 덧셈을 해주었다. testbench에서는 마지막에 carry가 전달되는 것을 확인하기 위해 MSB에서 carry가 발생하게 하였다. simulation의 결과로 마지막에 carry가 발생된 것이 확인 되었다. Schematic이 1-bit fulladder 4개의 결합으로 원하는 결과가 나왔다. Schematic을 잘 따라가다 보면 이전 1-bit fulladder의 carr..
[Verilog] 인코더, 디코더 인코더는 데이터를 암호화 하는 역할을 하는 회로를 말한다. 여기서 암호화란 2^n의 데이터가 들어오면 n개의 출력선으로 나가는 역할을 한다. 4-to-2인코더는 4개의 입력선이 2개의 출력선으로 압축 시키는 일을 한다. 이와는 반대로 n개의 입력선이 다시 2^n개의 출력선으로 나오는 것을 디코더 라고 한다. 흔히 디코더는 암호를 복호화 시키는 일을 하는 회로를 말한다. 흔히 회로 이름에서 앞에 'de' 글씨가 붙으면 입력선보다 출력선이 많다. 인코더의 모습이다. 다음과 같은 상태표를 가지고 부울대수로 표현하면 이 부울대수를 가지고 verilog 설계를 해보겠다. 처음 설계 코드는 assign문으로 조합회로를 설계할 때 가장 흔히 사용하는 구문을 사용하였다. 첫 코드의 시뮬레이션 여기서 output에 wi..
[Verilog] D flipflop 저번에 이어 이번에는 D flipflop을 설계 할 것이다. D flipflop은 JK flipflop보다 훨씬 간단한 형태를 띄고 있다. D flipflop은 D의 값에 따라 Q의 값이 달라진다. 즉, D=1이면 Q도 1이되고 D=0이면 Q도 0이 된다. D의 값에 따라 Q의 값이 따라온다. flipflop 한개는 1bit의 데이터만 저장할 수 있다. 8bit의 데이터를 저장하고 싶으면 8개의 flipflop가 필요하다. D flipflop 또한 순차회로로 상태표가 필요하다. 행위 수준으로 모델링한 D flipflop의 모습으로 Q의 값이 D의 값을 따라간다. 여기서 중요한 점은 clk와 같이 동기화 되어 데이터가 저장돼 D의 값이 들어간 후 딜레이가 생겨 Q의 값으로 나온다는 것이다. 시뮬레이션의 결..
[Verilog] JK flipflop 이번에 설계 할 회로는 조합회로가 아닌 순차회로의 기본이 되는 flipflop 설계를 할 것이다. flipflop은 정보를 저장하는 기능을 하여 cpu에서 데이터값을 저장하는 레지스터가 flipflop으로 이루어져 있다. flipflop의 기본적인 특징은 clock pulse의 edge에서만 저장된 데이터가 변하기 때문에 clock pulse가 1일때나 0일때는 값이 변하지 않고 원래 갖고 있던 값을 그대로 갖고 있는다. clock pulse의 edge는 다음 그림과 같이 1->0으로 되는 부분을 negative edge라 부르고 0->1인 부분을 positive edge라고 부른다. 이번 설계 에서는 positive edge부분에서 데이터 값을 저장하는 jk flipflop을 설계 해보겠다. jk fl..
[Verilog] 8bit 가산기 이번에는 1bit의 덧셈이 아닌 8bit를 더해주는 회로인 8bit 가산기를 설계 해보겠다. 8비트 가산기는 다음 그림과 같이 8개의 전가산기로 이루어져있다. 즉 1bit 덧셈을 해주는 전가산기에서 나온 carry 신호가 다음 전가산기로 넘어가서 입력값으로 들어가는 기능을 한다. 여기서 중요한것은 처음 carry0는 0이 된다. 이번 8bit 가산기 또한 전가산기의 모듈을 이용하여 설계할 것이다. 다음은 전가산기 모듈이다. 8bit 전가산기를 설계 할 때 입력 변수도 8bit로 설계 해야한다. verilog에서 1bit이상의 bit를 표현할 때는 '[a:0] variation' 으로 선언한다 이때 variation은 a+1의 비트를 갖는다. variation[0]은 a+1비트중 첫번째 비트를 표현하고 v..