Download presentation
Presentation is loading. Please wait.
Published by예슬 채 Modified 8년 전
2
Verilog HDL 로 표현되 는 논리회로는 “module”~”endmodul e” 안에 표현 모든 문장은 세미콜론 (;) 으로 문장을 끝냄 ◦ 단, “end~” 로 시작하는 예약어에는 세미콜론이 없음 Module 이름은 영문자 와 언더바 (_) 로 시작할 수 있으며, 대문자와 소 문자를 구별함.
4
주석 ◦ // 시작 할 경우 – 그 줄 끝까지가 주석이 된다. ◦ “/*” 시작 “*/” 끝날 경우 – 여러 줄에 걸쳐서 주석을 사용. 식별자 ◦ 사용자가 정의한 변수, 모듈 이름, 포트 이름, 함수 이름, instance 이름 등을 말하며 다음과 같은 규칙이 있다. 첫 문자는 알파벳문자 (a~z, A~Z) 혹은 언더 바 (_) 를 사용. 다음 문자부터는 영문자, 숫자, 언더 바 (_), 달라 ($) 를 사용. 이름 중간에 공백문자 ( 스페이스 ) 를 사용할 수 없음. 이름은 1023 문자까지 사용 가능. 대문자와 소문자를 구별한다.
5
Always, and, assign, begin, buf, bufif0, bufif1, case, casex, casez, coms, deassign, default, defparam, disable, edge, else, end, endcase, endmodule, endfunction, endprimitive, endspecify, endtable, endtask, event, for, force, forever, fork, function, highz0, highz1, if, ifnone, initial, inout, input, integer, join, large, macromodule, medium, module, nand, negedge, nmos, nor, not, notif0, notif1, or, output, parameter, pmos, posedge, primitive, pull0, pull1, pullup, pulldown, rcoms, real, realtime, reg, release, repeat, rnmos, rpmos, rtran, rtranif0, rtranif1, scalared, small, specify, specparam, strong0, strong1, supply0, supply1, table, task, time, tran, tranif0, tranif1, tri, tri0, tri1, triand, trior, trireg, vectored, wait, wand, weak0, weak1, while, wire, wor, xnor, xor
6
and U1 (C,A,B); ◦ 연산자 //instance 이름 ( 생략가능 )//port 이름 ( 출력, 입력의 순서 로 쓴다 ) 논리 연산자는 벡터 단위의 연산은 할 수 없고, 항상 비 트 단위로 연산 not, buf 는 여러 개의 출력을 가질 수 있다. ◦ not (Y0, Y1, Y2, A); // Y0, Y1,Y2 는 출력, A 는 입력 ◦ buf (Y0, Y1, Y2, B); // Y0, Y1,Y2 는 출력, B 는 입력 연산자예의미 andand (Y,A,B);Y = A and B nandnand (Y,A,B);Y = A nand B oror (Y,A,B);Y = A or B nornor (Y,A,B);Y = A nor B xorxor (Y,A,B);Y = A xor B xnorxnor (Y,A,B);Y = A xnor B notnot (Y,A);Y = not A bufbuf (Y,A);Y = buf A
7
assign 포트 (or 와이어 ) = 논리식 (or 산술 연산식 ); 연산자의미예설명 ~notassign Y = ~ AA 를 비트단위로 인버팅해서 Y 에 대입 &andassign Y = A & BA 와 B 를 비트단위로 and 연산해서 Y 에 대입 |orassign Y = A | BA 와 B 를 비트단위로 or 연산해서 Y 에 대입 ^xorassign Y = A ^ BA 와 B 를 비트단위로 xor 연산해서 Y 에 대입 ~^xnorassign Y = A ~^ BA 와 B 를 비트단위로 xnor 연산해서 Y 에 대입
8
예약어 [MSB : LSB] 신호이름 ; ◦ 예약어 – input, output, wire, reg 등 ◦ [MSB : LSB] – 비트 폭의 범위를 지정 ◦ 신호이름 – 포트, 네트 ( 와이어 ), 레지스터 등의 이름 부호 없는 정수로 취급 벡터를 1 비트 단위로 취급할 경우 ◦ [ 비트 번호 ] 를 사용하여 취급 비트 폭 지정은 한 개의 선언에 한번만 사용 벡터 크기보다 큰 값을 전달할 경우는 에러가 발생
9
벡터 표현의 예설 명설 명 input [3:0] A, B; input [7:0] ABUS; 4bit 입력 A 와 B 8bit 입력 ABUS wire busy, [2:0] status; 여러 번 사용한 에러의 예 assign MSB = ABUS[7]; assign LSB = ABUS[0]; ABUS 의 bit 번호 7 을 MSB 신호로 전달 ABUS 의 bit 번호 0 을 LSB 신호로 전달 wire [3:0] H_digit; assign H_digit = ABUS[7:4]; ABUS 의 bit 번호 7~4 를 H_digit 로 전달
10
Verilog HDL 에서는 4 개의 논리 값만 사용 ◦ 0 – 논리 0 ◦ 1 – 논리 1 ◦ x(X) – ‘0’ 과 ‘1’ 이 충돌 될 때의 모르는 값 “unknown” 값이며, don’t care 와는 의미가 다름 ◦ z(Z) – 하이 임피던스
11
Verilog HDL 에서 숫자는 정수와 실수를 사용 정수 표현 ◦ ’ 비트 폭 – 10 진수로 표현. 생략하면 32 비트로 취급 진수 – b,B:2 진수 o,O:8 진수 d,D:10 진수 h,H:16 진수 값 – 읽기 쉽게 “_” 를 사용할 수 있으며 “_” 는 숫자 크기에 영 향을 주지 않는다. 진수에 대응되는 값 2 진수 : 0, 1, x, z 8 진수 : 0~7, x, z 10 진수 : 0~9(x, z 는 사용 불가 ) 16 진수 : 0~9, a~f, x, z
12
정수표현의 예 정수 표현비트 폭진수 2 진수로 표현 103210 진수 00........01010 1‘b112 진수 1 8'haa816 진수 10101010 4'bz42 진수 zzzz 8'o37788 진수 11111111 8'b0000_11x x 82 진수 000011xx 'hff3216 진수 00....011111111 4'h?ZZ?416 진수 ZZZZ (? 는 Z 의 변형된 문자 ) 4'd5410 진수 0101
13
Verilog HDL 에서 실수는 과학적인 기호나 10 진 수로 표현할 수 있으며, 과학적인 기호로 표현할 경우, 다음과 같은 형식으로 표기. ◦ - 10 진수로 표현 ◦ 예 > 32e-4 : 0.0032, 4.1E3 : 4100 실수 표현은 시뮬레이션에서만 사용된다.
14
Structural modeling 회로도 (schematic) 을 그리는 것 같이, 좀 더 복잡 한 component 를 만들기 위해, 이미 있는 component 를 사용하여 단순히 연결하는 것. module NOR_LATCH (R,S,Q,Qbar); input R,S; output Q, Qbar; nor U1 (Q, R, Qbar); nor U2 (Qbar, S, Q); endmodule
15
4bit full adder 예제
16
module instance 호출 방법 ◦ 하위층 모듈이름 instance 이름 ( 인수, 목록 ); ◦ 하위층 모듈이름 – Full_adder ◦ Instance 이름 – ADD0,ADD1,ADD2,ADD3 사용자가 임의로 지정 ◦ 인수, 목록 – “a[0], b[0], 1’b0, sum[0], cout[0]” 하위의 a b cin sum cout 포트와 일치된다. ◦ 호출한 측의 해당 네트와 하위층 모듈의 대응되는 포트를 순서대 로 연결한 방식 => positional mapping ◦ 같은 하위층의 모듈을 계속해서 호출해서 사용할 경우 Full_adder ADD0 (a[0],b[0],1'b0,sum[0],cout[0]), ADD1 (a[1],b[1],cout[0],sum[1],cout[1]), ADD2 (a[2],b[2],cout[1],sum[2],cout[2]), ADD3 (a[3],b[3],cout[2],sum[3],cout[3]);
17
하위층 모듈을 호출할때, 기술순서와 관계없이 이 름을 이용하여 접속 => named mapping ◦. 하위층 모듈 포트 이름 ( 접속 신호 ) ; ◦ Full_adder ADD0 (.a(a[0]),.b(b[0]),.cin(1'b0),.sum(sum[0]),.cout(cout[0])); ◦ Full_adder ADD1 (.sum(sum[1]),.cout(cout[1]),.a(a[1]),.b(b[1]),.cin(cout[0])); Positional mapping 과 named mapping 을 혼용 하여 사용할 수는 없다. ◦ Full_adder ADD0 ( a[0], b[0],.cin(1'b0),.sum(sum[0]),.cout(cout[0]));
Similar presentations