★ 다음 그림의 상태 전이도를 갖는 Moore FSM회로를 설계하고, 시뮬레이션을 통해 동작을 확인한다. active-low 리셋에 의해 상태 ST0로 초기화되며, 출력은 0이된다. 상태 ST1에서 bypass입력이 들어오면 ST3로 전이되고, 그 이외의 경우에는 ST0 > ST1 > ST2 > ST3의 순서로 전이된다. 상태 ST0, ST1, ST2, ST3에서 각각 0,1,2,3의 값을 출력한다. 레지스터는 active-low 비동기식 리셋을 갖는다. module fsm_moore(clk,reset,bypass,out); input clk, reset, bypass; output reg [2:0] out; reg [1:0] state, next; parameter ST0 = 2'b00, ST1 = 2..
★ 유한상태머신(FSM) 유한상태머신(Finite State Machine)은 지정된 수의 상태를 가지고 상태들 간의 전이에 의해 출력을 생성하는 회로를 총칭하며, 디지털 시스템의 제어회로 구성에 폭넓게 사용된다. FSM의 일반적인 구조는 밑의 그림과 같고, 입력과 현재상태에 따라 다음상태를 결정하는 블록(next state logic), 현재상태를 저장하는 순차회로 블록(state register), 입력과 현재상태에 따라 출력값을 결정하는 블록(output logic)등으로 구성된다. FSM의 상태레지스터는 상태값을 이진(binary)데이터로 저장한다. 이진 데이터의 인코딩 방식에 따라 상태 레지스터의 비트 수가 달라지며, 대표적인 상태 인코딩 방식으로는 이진코드, 그레이코드, 존슨코드, 원핫코드 등..
★ Active-high enable 신호를 갖는 8비트 감소 계수기를 설계하고, 시뮬레이션을 통해 동작을 확인한다. Enable신호 en=1이면 계수동작을 멈추는 기능을 가지며, active-low 비동기식 리셋을 갖는다. // 설계과제 11.13 module counterdown(clk,en,rst,cnt); input clk,en,rst; output reg [7:0]cnt; always@(posedge clk or negedge rst)begin if(!rst) cnt
★ Counter 카운터는 클럭펄스가 인가될 때마다 값을 증가 또는 감소시키는 회로를 총칭하며, 주파수 분주기, 타이밍 제어신호 생성 등 디지털회로 설계에 폭넓게 사용되는 순차회로이다. 플립플롭과 조합논리회가 결합된 형태로 구현되며, 동작방식에 따라 동기식, 비동기식으로 구분된다. 동기식 카운터는 모든 플립플롭이 하나의 공통 클럭신호에 의해 구동되며, 따라서 모든 플립플롭의 상태변경이 동시에 일어난다. 동기식 카운터는 설계와 검증이 용이하며, 계수 속도가 빠른 장점이 있으나 비동기식 카운터에 비해 회로가 복잡하다는 단점이 있다. 비동기식 카운터는 천단의 플립플롭에 클럭신호가 인가되면, 플립플롭의 출력이 다음 단의 플립플롭을 트리거시키는 방식으로 동작하며, 클럭의 영향이 물결처럼 후단으로 파급된다는 듯에서..
★ 다음의 active-low 동기식 리셋을 갖는 시프트 레지스터를 다음의 방법으로 모델링하고 시뮬레이션을 통해 동작을 확인한다. ① 결합 연산자를 사용하는 방법 ② 시프트 연산자를 사용하는 방법 ③ for반복문을 사용하는 방법 ★ Active-high 비동기식 리셋을 갖는 직렬입력 - 병렬출력 8비트 시프트 레지스터를 모델링하고, 시뮬레이션을 통해 동작을 확인한다. ★ 다음 코드에서 시프트 레지스터에 좌-우 시프팅 기능을 추가하여 설계하고, 시뮬레이션을 통해 동작을 확인한다. 신호의 기능은 다음표와 같으며, mode=0이면 오른쪽으로 시프팅되며, mode=1이면 왼쪽으로 시프팅되도록 설계한다. ★ 다음 그림의 8비트 LFSR회로를 모델링하고, 시뮬레이션을 통해 동작을 확인한다. 단, 플립플롭의 셋 또는..
★ 시프트 레지스터 시프트 레지스터는 여러 개의 플립플롭이 직렬로 연결된 구조를 가지며, 클럭신호가 인가될 때마다 데이터가 왼쪽 또는 오른쪽으로 이동되는 기능을 수행한다. 시프트 레지스터의 데이터는 직렬 또는 병렬로 입-출력을 할 수 있다. 또한 4가지의 입-출력 동작을 선택적으로 수행하도록 범용 시프트 레지스터로 구현될 수도 있다. 또한 시프팅 방향에 따라 왼쪽 시프트, 오른쪽 시프트, 양방향 시프트 등이 있다. 시프트 레지스터는 플립플롭이 직렬로 연결된 형태를 가지므로, 앞단의 플립플롭 출력이 다음 단 플립플롭의 입력으로 연결되도록 모델링되어야한다. 이를 위해서는 클럭의 엣지 전이를 검출하는 always블록 내부에 nonblocking할당문이 사용되어야 한다. 시프팅 동작의 모델링을 위해 nonblo..
★ 밑의 두 코드는 모두 동일한 형태의 always블록 두개로 구성되어 있다. 테스트벤치를 이용한 시뮬레이션을 통해 a,b의 출력 y1, y2를 확인하고 그 이유를 생각해 본다. 또한 두 코드를 합성하면 동일한 회로가 되는지, 아니면 서로 다른 회로가 되는지 확인해 본다. ▣ TESTBENCH 위 시뮬레이션을 살펴보면 blocking과 nonblocking할당문의 극명한 차이를 알 수 있다. 처음에 rst =1이 걸릴때는 y1_blk, y2_blk, y1_nonblk, y2_nonblk 모두 0과 1로 각각 초기화 되었지만 다시 rst = 0일때 값들이 달라지는 것을 알 수 있다. y1_blk와 y2_blk를 살펴보면 rst=0일때 y1으로 y2(1)가 들어가 y1역시 1이 됨을 알 수 있고 두번째 al..
플립플롭이 포함된 순차회로에서 blocking할당문과 nonblocking할당문의 차이를 명확하게 이해하기 위해 다음의 Verilog modeling을 생각해본다. 두 코드는 blocking할당문 4개가 사용되었으며, 서로의 순서가 뒤바뀌어 있다. 이들 두코드는 다음과 같이 합성되며, 서로 다른 회로로 동작한다. 순차회로 모델링에 blocking할당문이 사용되면 always블록 내부에서 할당문의 나열 순서에 따라 회로의 동작이 달라진다는 사실을 알 수 있으며, 따라서 사용에 주의해야 한다. 다음은 4개의 nonblocking 할당문이 사용되고 있으며, 순서가 뒤바뀌어 있다. 이들 두 코드는 동일한 회로로 합성되어 동일한 회로로 동작한다. nonblocking할당문이 사용되면 always블록 내부에서 할당..
★ Negative level-sensitive 방식으로 동작하는 8비트 D래치회로를 설계하고, 테스트벤치를 작성하여 기능을 검증한다. module dlatch8(clk,d,q); input clk; input [7:0] d; output reg [7:0] q; always@(*)begin if(!clk) q=d; end endmodule ▣ TESTBENCH // 설계과제 11.1 testbench module tb_dlatch8; reg clk; reg [7:0] d; wire [7:0] q; dlatch8 uo(clk,d,q); initial begin clk = 1'b0; d = 1'b0; end always begin #15 d= 1'b1; #20 d=1'b0; #10 d = 1'b1; #10 ..
순차회로 논리게이트의 조합으로만 구성되는 조합논리회로의 Verilog 모델링에 관해 살펴보았고 이제부터는 순차회로의 Verilog 모델링을 살펴보자. 순차회로는 현재 인가되고 있는 입력뿐 아니라 과거의 입력과 회로에 기억된 상태값에 의해 출력이 결정되는 회로를 총칭한다. 따라서 순차회로는 과거의 입력이나 현재 상태값을 저장하는 기억소자(래치,플립플롭)와 조합논리회로로 구성된다. 순차회로는 동장방식에 따라 동기식 비동기식으로 구분된다. 동기식 순차회로는 회로를 구성하는 모든 플립플롭이나 래치들이 하나의 공통 클럭신호에 의해 동작하도록 구성된 회로를 말하며, 따라서 모든 플립플롭이나 래치들이 동일한 시점에 자신의 상태를 변화시킨다. 반면 비동기식 순차회로는 플립플롭이나 래치들이 서로 다른 클록신호에 의해 동..