Verilog Coding
모델링
- Gate-Level 모델링
- Dataflow 모델링
- Behavioral 모델링
- Testbench 작성
기본
수표현
몇 비트?'|몇 진수?|해당 수
참고
표시x -> 자동적으로 32'd해당수(32비트+10진수+해당수)
논리값
0,1,x(미지수-알수없음),z(끊겨있음-플로팅상태)
와이어
wire <이름>;
wire <이름> = 값;
레지스터(메모리)
reg <이름>;
integer <이름>;
(32비트 reg)
참고
-
묶음(vector)
wire
와reg
의 묶음:<reg또는 wire> [0:7] <이름>
*ex)reg [0:10] = busA;
-
쪼개기
wire의 묶음을 쪼개는것 또한 가능하다.
*ex)wire [0:30] = busA
byte1= busA[0:5]
그외
- # <숫자>
n단위시간 후에 실행할 코드라는 뜻.
Gate-Level 모델링
게이트를 사용하여 모듈을 모델링하는 것
모듈
black box의 안을 정의하는 것
module <module_name>(<input port/ output port>);
input/output port선언 (wire와 같은 느낌)
reg 선언
wire 선언
parameter 선언
// 구성요소 선언
always, initial
function, task 정의
assign
function, task 호출
// 구성요소 연결
endmodule
*ex) a,b를 입력받아서 sum, cout을 내보내는 adder
module half_add(a,b,sum,cout)
input a, b;
output sum. cout;
wire cout_bar;
xor(sum, a, b);
nand(cout_bar, a, b);
not(cout, cout_bar);
endmodule
즉, 순서는 상관없음(프로그래밍 언어가 아니다.) 소자들끼리의 연결만 잘 되면 된다.
모듈의 사용
만들어진 모듈/함수를 사용하는 것
- 순서를 맞춰 매개변수에 전달하는 방법
- ex)
xor(sum, a, b) //함수(출력,입력)
and(cout, a, b, c) // 기본함수의 출력은 1개임
nand(cout, a, b)
- 위치를 알려주는 방법 (
.해당포트(넣을 값)
)
ex)
fulladder(.c_out(a), .sum(b))
Dataflow 모델링
게이트 대신에 연산자
와 할당
을 사용하는 것
-
연산자
-
할당
assign
출력
=입력 + 연산자
ex)assign out = i1 & i2;
*참고
- assign: wire에는 반드시 assign을 해주어야함
ex)wire i1, i2, out; assign out = i1 & i2;
- write: reg는 write를 통해 저장가능
ex)real a,b,c; c = a - b
;*
Behavior 모델링
조건문
- if else 구문: 조건이 참일때만 ~를 실행
if()
~;
else
~;
- case 구문: case안의 값이 참인 ~를 실행
case()
~;
case()
~;
endcase
always 구문
항상 수행되어야 하는 하드웨어의 동작을 묘사한 것.
always @(in1, in2, a, b) begin
if (in1 ==0)
out = a;
else
out = b;
-
always
~begin
~end
프로그래밍 언어에서의 중괄호({})는 begin end로 표현한다. -
@(~)
항상 체크하는데 괄호안의(~)의 값이 바뀔 경우만 체크하도록 하자는 뜻
(모든 입력은 *로 표현)
보조함수들: 시뮬레이션할 때 결과에서 참고할 수 있도록 도와주는 함수들
$display();
-> C의 printf문법이랑 비슷
$time
testbench 작성
모듈들을 테스트 시뮬레이션해보는 것
-
input/output port존재 X
(wire로 표현하자) -
stimulus를 넣고 response를 관찰
-
initial 구문: testbench에서만 사용하는 것으로 한번만 실행되고 주로 stimulus를 넣어줄 때 사용
ex)
module test_Fix();
reg A, B, C;
circuit c1(A, B, C, Out);
initial begin
A=0; B=1; C=0;
#50 A=1;
#50 A=0; C=1;
#50 C=0;
#50 $finish;
Author And Source
이 문제에 관하여(Verilog Coding), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@abrahamkim98/Verilog-Coding저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)