조합 회로와 순차 회로를 구현하는 구문을 크게 2가지로 나눌 수 있다. assign과 always구문이다.
assign
- 조합회로 대부분의 경우 assign을 사용한다
- 조건 ? 참 : 거짓의 문장을 자주 사용한다
- 출력의 연결은 wire문으로 지정해줘야 한다.
always
한 번만 실행되는 것이 아니라, 조건이 만족할 때마다 동작한다. 조건에는 에지와 레벨이 있다.
- if , else, case 등등과 같은 구문은 always 구문 안에서만 사용해야 한다.
- @ 는 ~~ 할 때라고 해석하면 된다.
- sensitivity_list 신호가 변할 때, "..."를 하라는 의미다. 그래서 모든 입력에 대해서는 "*"를 적어준다.
- 초기화 값을 정의하기에 좋다.
- 반드시 reg로 출력을 정의해야 한다.
always @ (sensitivity_list) begin
....
end
begin과 end는 { }의 역할을 한다.
예를 들어 inverter를 2가지 구문으로 구현할 수 있다.
// assgin
wire out;
assign out = ~in
// always
reg out;
always@(in)
out = ~in;
case 문
- 조건과 일치하는 경우에 대해 실행된다
- 일치하는 조건이 없다면 default가 실행된다
- default가 없으면 이전에 값을 유지한다.
initial 구문
- 시뮬레이션이 시작될 때, (테스트 벤치에서) 한 번만 실행되는 구문이다.
- blocking을 사용한다 == 나열된 순서대로 실행
- 논리 합성이 지원되지 않는다. 이유는 동작 시간을 정할 수 없기 때문이다.
- 초기화와 같은 동작을 한다.
initial begin
clk =0;
reset =0;
end
지연시간 기호 #
DUT에선 사용하지 않는다.
wire #10 last; // 10 nano 지연
assign #20 one = a & b; // 20 nano 있다가 a와 b를 &해라
always #5 clk = ~clk; // 5 nano 있다가 클럭을 반전시켜서 넣어라, 주기가 10 nano
이벤트 기호 @
always 없이 테스트 벤치에서 단독으로 사용 가능하다. @을 한글로 번역하면 ~~ 할 때 정도로 볼 수 있다.
initial begin
@(posedge clk);
#5 addr = 8'h9a;
clk이 상승 에지가 될 때까지 기다리다가, 5 nano 있다가 addr에 값을 저장하라는 의미다.
반복문
forever : 무한히 반복
repeat : 지정 횟수만큼 반복
while : 조건에 따라 반복
for : 변수에 의해 반복
alwyas 또는 initial 구문에서만 사용 가능
for (a = 3'b000; a < 3'b111; a = a+1)
#10;
self-cheacking test bench
미리 예상되는 출력 값을 작성해 놓고 결과와 비교하는 것,
블록문
{} 같은 애들,
begin end : 나열된 순서에 의해 순차적으로 실행,
fork join : 동시에 실행된다. 종료 시점은 시간적으로 마지막에 실행되는 시점이다, 시물레이션 파형 생성에 유용하다.
아래 코드는 똑같은 코드다.
timescale
`timescale 10ns / 1ns에서 10ns = 단위, 1ns = 정밀도, 해상도로 본다.
바로 예를 보면,
`timescale 10ns / 1ns
# 1.55 set = 0;
# 2.325 set = 0;
1.55는 10ns 단위이다. 이걸 1ns로 바꾸면 15.5ns인데 정확도에서 1ns까지만 쓰라고 했으니 소수점은 반올림해서 16ns의 딜레이가 생긴다.
2.325도 1ns로 바꾸면 23.25ns인데 정확도에서 1ns까지만 쓰라고 했으니 소수점은 버림 한다.
'개발 Tools > Verilog HDL' 카테고리의 다른 글
Verilog HDL Multiplexor (멀티플렉서, mux, 예제) (0) | 2022.02.16 |
---|---|
Vreilog HDL decoder (디코더) (코드, 예제) (0) | 2022.02.15 |
Verilog HDL D 플립플롭 동작 ( non-blocking, blocking, 순차회로, 조합회로, 비동기 리셋, 비동기 셋 , D F/F ) (0) | 2022.02.15 |
Verilog HDL 조합논리회로 종류 ( Not, or, 반가산기, 전가산기, 가산기, 디코더, 멀티플렉서 ) (0) | 2022.02.15 |
Verilog HDL module ( 모듈, 연결, 합성, 인스턴스, instance, 여러개, 탑모듈, named mapping, ordered mapping ) (0) | 2022.02.15 |
댓글