공학 자료등록 Verilog프로그래밍 자료등록 D래치, 플리플롭, shift register 레폿
공학 자료등록 Verilog프로그래밍 자료등록 D래치, 플리플롭, shift register
[공학][Verilog프로그래밍]D래치, 플리플롭, shift register
1. 목적
Verilog의 연속할당문을 사용한 래치 설계 방법과 always 문을 사용한 동작적 모델링 방
법의 래치, 플립플롭 설계 방법을 익히고 이를 간단한 회로의 설계에 적용한다.
2. 기초지식
- feedback이 있는 dataflow 모델링 방법
동작적 모델링에서 회로의 동작은 부울함수와 수식으로 기술 할 수도 있고 알고리즘과 같은 추상적인 표현을 사용하여 나타낼 수도 있다. 그 중에서 부울함수와 같은 수식으로 기술하는 모델링을 data flow modeling이라 한다. feedback 같은 반복적으로 수행하는 경우 always문을 사용할 수 있다.
- Verilog의 동작적 모델링 방법
프리미티브 게이트나 기존 설계된 모듈을 서로 연결하여 회로를 만드는 구조적 모델링과는 다르게 회로가 수행하는 기능을 기술한다. 회로의 입력과 출력나의 관계를 기술하고, 회로의 내부와 물리적 구현에 대한 상세한 사항을 기술하지 않는다. 동작적 모델링은 구조적 모델링과 함께 사용할 수 있다. 구조적 모델링 방법은 설께된 하위 모듈을 사용하여 모델링하는 상휘 수준의 모델링에 많이 사용 된다.
- always 문, event control 방법
always문은 반복조건이 만족할 때마다 문장을 반복하여 수행하며 사용 형식은
always 반복조건
문장;
always 반복조건 begin
문장;
문장;
...
end
과 같다. 실행되는 문장이 여러 개이면 begin과 end를 사용하여 블록으로 설정해야 하며 이 문장들은 순차적으로 실행된다.
- 조건문
순차처리문 내에서는 보통의 프로그래밍 언어에서처럼 조건문과 반복문을 사용할 수 있다. 조건문에는 if문과 case문 등이 있다.
- blocking 할당문과 nonblocking 할당문
순차처리문에서 사용하는 할당문(‘=’)은 순차적으로 실행되므로 순서에 영향을 받는다. 순차할당문은 앞에 있는 할당문의 수행이 완료되어야 다음 문장이 수행되므로 blocking할당문이라고 한다.
순차처리문 내에서 병렬로 수행되는 동작을 기술하기 위해서 기호‘`=’를 사용하는 nonblocking할당문을 사용한다. nonblocking 할당문은 순차처리문 내에 있는 할당문들의 모든 오른쪽 수식의 값을 순서대로 계산한 다음에 계산된 값들을 왼쪽 변수에 저장한다. nonblocking할당문을 사용하면 할당문 사이에 종속관계가 있을지라도 새로 계산된 값이 아닌 이전의 값이 오른쪽 수식의 계산에 사용되므로 할당문의 순서에 영향을 받지 않는다.
3. 지식에 대한 자료
- 강의 교재 및 강의 자료 참조
4. 실습 내용
4.1 D래치
(1) D 래치의 동작에 대해서 설명하시오.
enable이 1일 때 입력 din의 파형이 출력 qout에 그대로 나타나며 enable이 0일 경우는 qout의 상태가 입력의 변화에 관계없이 그대로 유지된다.
(2) reset 제어입력이 있는 D래치를 feedback이 있는 연속할당문을 사용하여 설계하고 입력을 적절한 순서로 변화하도록 공급하여 D래치의 동작을 검증하시오.
module d_latch(qout, din, enable, reset);
output qout;
input din, enable, reset;
assign qout = (~reset)0: (enable din : qout);
endmodule
(3) reset 제어입력이 있는 D래치를 always문을 사용한 동작적 모델링 방법으로 다시 설계하고 동작을 검증하시오.
=
module d_latch(qout, din, enable, reset);
output qout;
input din, enable, reset;
reg qout;
always @(reset or enable) begin
if(reset 0) qout = 0;
else if(enable 1) qout = din;
else qout = qout;
end
endmodule
=
(4) 위의 두 가지 설계 방법을 비교하시오.
결과적으로 reset을 0으로 만들어 초기 enable이 1이 되기 전까지의 값을 0으로 만들어주고 이후 enable이 1일 때 입력 din의 파형이 출력 qout에 그대로 나타나며 enable이 0일 경우는 qout의 상태가 입력의 변화에 관계없이 그대로 유지되는 결과는 같았다. 허나 연속할당문을 사용했을 때는 추상적으로 부울함수 식을 그대로 사용했지만 always문을 사용한 동작적 모델링 방법을 쓰면 하나하나의 조건에 맞춰 값이 변하게끔 설계하였다. 회로의 입력과 출력나의 관계를 기술하고, 회로의 내부와 물리적 구현에 대한 상세한 사항을 기술하지 않았다.
4.2 플립플롭
(1) 동기 reset과 set 제어입력이 있는 positive edge triggered D 플립플롭을 always 문을 사용하여 설계하고 동작을 검증하시오.
(reset과 set이 각각 0일 때에 클럭의 postive edge에서 출력이 0과 1이 된다.)
=
module flip_flop(q, qbar , data, set, reset, clk);
output q, qbar;
input data, set, reset, clk;
reg q;
assign qbar = ~q;
always @ (posedge clk) begin
if(reset 0) q=0;
else if(set 0) q=1;
else q=data;
end
endmodule
=
(3) 비동기 reset과 set 제어입력이 있는 D 플립플롭을 설계하고 동작을 검증하시오.
(reset과 set이 각각 0일 때에 즉시 출력이 0과 1이 된다.)
module flip_flop(q, qbar , data, set, reset, clk);
output q, qbar;
input data, set, reset, clk;
reg q;
assign qbar = ~q;
always @ (negedge reset or negedge set o
자료출처 : http://www.ALLReport.co.kr/search/detail.asp?pk=11064459&sid=ddangkung&key=
댓글 없음:
댓글 쓰기