Microsoft PowerPoint - DSD02_verilog2a.pptx

Similar documents
Microsoft PowerPoint - DSD03_verilog3b.pptx

Microsoft PowerPoint - DSD03_verilog3a.pptx

Microsoft PowerPoint - Verilog_Summary.ppt

Microsoft PowerPoint - hw4.ppt [호환 모드]

게이트및스위치프리미티브 q predefined primitives v 정의나선언없이사용가능 v 단일출력을가짐 v 모듈내에서만사용가능 Ø initial과 always 구문내부에서는사용불가 Verilog 에서제공되는게이트및스위치프리미티브 n-input gates n-out

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

Microsoft PowerPoint - DSD01_verilog1a.pptx

Microsoft Word - logic2005.doc

Microsoft PowerPoint - DSD01_verilog1b.pptx

wire [n-1:0] a, b, c, d, e, f, g, h; wire [n-1:0] x; // internal wires wire [n-1:0] tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; mux_2to1 mux001 (.x(tmp0),.a(a

한국기술교육대학교장영조 한국기술교육대학교전기전자통신공학부 1

Microsoft PowerPoint - M02_VerilogHDL02.ppt [호환 모드]

Microsoft PowerPoint - VHDL08.ppt [호환 모드]

Microsoft PowerPoint - ch07 - 포인터 pm0415

MAX+plus II Getting Started - 무작정따라하기

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

歯Chap1-Chap2.PDF

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - ICCAD_Digital_lec02.ppt [호환 모드]

C# Programming Guide - Types

슬라이드 1

VHDL 기초 VHDL 두원공과대학정보통신미디어계열이무영

Microsoft Word - 제6장 Beyond Simple Logic Gate.doc

Microsoft Word - logic2005.doc

v6.hwp

슬라이드 1

동기순차회로 p 조합논리회로 combinational logic circuit) v 출력이현재의입력에의해서만결정되는논리회로 p 순차논리회로 sequential logic circuit) v 현재의입력과이전의출력상태에의해서출력이결정 v 동기순차논리회로와비동기순차논리회로로

Microsoft PowerPoint - DSD02_verilog2b.pptx

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PowerPoint 프레젠테이션

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - M07_RTL.ppt [호환 모드]

Microsoft PowerPoint - 1-2장 디지털_데이터 .ppt

Microsoft PowerPoint - ch11_reg.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - additional01.ppt [호환 모드]

hwp

<4D F736F F F696E74202D20332EB5F0C1F6C5D0C8B8B7CEBFCD20B1B8C7F62E >

<C6F7C6AEB6F5B1B3C0E72E687770>

논리회로설계 6 장 성공회대학교 IT 융합학부 1

Microsoft PowerPoint - verilog문법new.ppt

Microsoft PowerPoint - 30.ppt [호환 모드]

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

10 장카운터

CAN-fly Quick Manual

PowerPoint 프레젠테이션

59

02장.배열과 클래스

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Orcad Capture 9.x

Microsoft PowerPoint - M01_VerilogHDL01.ppt [호환 모드]

PowerPoint 프레젠테이션

Microsoft PowerPoint - hw8.ppt [호환 모드]

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - DSD06b_Cont.pptx

금오공대 컴퓨터공학전공 강의자료

tut_modelsim(student).hwp

Microsoft PowerPoint - ICCAD_Digital_lec03.ppt [호환 모드]

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap06-5 [호환 모드]

디지털시스템설계및실습 1. Verilog HDL 문법 한국기술교육대학교전기전자통신공학부 Ver1.0 (2008)1


1. 일련의순차적인수를세는회로는? < 가 > 가카운터 다디코더 나레지스터 라인코더 2. 입력펄스에따라미리정해진순서대로상태가변화하는레지스터로써발생회수를세거나동작순서를제어하기위한타이밍 (timing) 신호를만드는데가장적합한회로는? < 다 > 가범용레지스터 다

디지털공학 5판 7-8장

9장 순차논리 회로

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

개요 데이터를저장할수있는기억소자 여러개의플립플롭으로구성. 메모리는단순데이터를저장하는소자이지만, 레지스터는저장뿐아니라저장된데이터를처리할수있는기능도있다. 카운터도클록펄스가입력되면미리정해진순서에따라상태가변하는레지스터이다. 카운터와레지스터의차이점 데이터를저장또는이동하는목적으로

수없기때문에간단한부분으로나눠서구현하고, 이를다시합침으로써전체를구현하게 된다. 실험에서는이미구현된 4-Bit ALU인 74LS181 Chip을사용한다. 이 Chip은 4-bit의 Data input A, B와 Selection input 4 bit, Carry In 1

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - 제10장.ppt [호환 모드]

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - ICCAD_Analog_lec01.ppt [호환 모드]

Microsoft PowerPoint - chap03-변수와데이터형.pptx

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Microsoft PowerPoint - chap06-1Array.ppt

[2010 년디지털시스템설계및실험중간고사 2 답안지 ] 출제 : 채수익 1. (a) (10 pts) Robertson diagram Quotient 와 remainder 의 correction 을뒤로미루는것이 non-restoring division 이다. 즉, q =

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

Chapter_06

8장 조합논리 회로의 응용

Microsoft PowerPoint - VHDL01_chapter1.ppt [호환 모드]

[8051] 강의자료.PDF

설계란 무엇인가?


비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형

Tcl의 문법

T100MD+

OCW_C언어 기초

Data Structure

Microsoft PowerPoint - chap11-포인터의활용.pptx

슬라이드 1

초급과정 목차

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - 부호기와 복호기.PPT

슬라이드 1

Transcription:

한국기술교육대학교 장영조

한국기술교육대학교전기전자통신공학부 2

1. 구조적모델링 1. 모듈인스턴스와포트사양 2. 프리미티브게이트 3. 게이트지연시간 4. 파라미터 5. 인스턴스배열 6. generate 블록 2. 데이터플로우모델링 1. 연속할당문 2. 할당지연 3. 동작적모델링 1. 절차형블록 2. 절차형할당문 3. if~else문 4. case 문 5. 반복문 6. 태스크와함수 한국기술교육대학교전기전자통신공학부 3

구조적모델링 다른모듈의인스턴스와포트매핑을통한모델링 범위지정을통한인스턴스배열의생성가능 모듈인스턴스이름은생략할수없음 게이트프리미티브의인스턴스이름은생략가능 포트 (port) - 모듈인스턴스의내부적인신호와외부적인신호를연결하는통신수단 포트순서에의한포트매핑 모듈의포트목록에나열된포트순서와 1:1로대응되어연결 포트에연결되는신호가없는경우에는해당위치를빈칸으로둔다 (,,) 포트이름에의한포트매핑 포트이름과그포트에연결되는신호이름을명시적지정 포트의비트선택, 부분선택, 결합등을사용할수없음.port_name([expression]) 한국기술교육대학교전기전자통신공학부 4

포트목록에나열된포트들은선언부에서포트선언을통해 input, output, inout( 양방향 ) 으로선언 signed와범위에대한정의를포함한포트에관한모든다른속성들이포트선언에포함될수있음 inout_declaration ::= inout [ net_type ][ signed ][ range ] list_of_port_identifiers input_declaration ::= input [ net_type ][ signed ][ range ] list_of_port_identifiers output_declaration ::= output [ net_type ][ signed ][ range ] ist_of_port_identifiers output [ reg ][ signed ][ range ] list_of_port_identifiers output reg [ signed ][ range ] list_of_variable_port_identifiers output [ output_variable_type ] list_of_port_identifiers output output_variable_type list_of_variable_port_identifiers list_of_port_identifiers ::= port_identifier {, port_identifier } 한국기술교육대학교전기전자통신공학부 5

module test(a, b, c, d, e, f, g, h); input [7:0] a, b; // no explicit declaration - net is unsigned input signed [7:0] c, d; // no explicit net declaration - net is signed output [7:0] e, f; // no explicit declaration - net is unsigned output signed [7:0] g, h; // no explicit net declaration - net is signed wire signed [7:0] b; // port b inherits signed attribute from net decl. wire [7:0] c; // net c inherits signed attribute from port reg signed [7:0] f; // port f inherits signed attribute from reg decl. reg [7:0] g; // reg g inherits signed attribute from port module renamed_concat(.a({b,c}), f,.g(h[1])); // Names 'b', 'c', 'f', 'h' are defined inside the module. // Names 'a', 'f', 'g' are defined for port connections. // Can use named port connections. 한국기술교육대학교전기전자통신공학부 6

input 및 inout 포트 레지스터형으로선언불가 연속할당문에서 RHS에서사용 인스턴스된모듈이나게이트의입력사용각포트연결은신호소스 (source) 와신호싱크 (sink) 의연속적인할당 output net, 레지스터, 게이트출력, 인스턴스된모듈의출력에연결 연속적인할당의 LHS에사용 input 게이트입력, 인스턴스된모듈의입력, 인스턴스된모듈의입력연결 연속할당문및절차형할당문의 RHS에사용 inout 내부적으로게이트입력이나출력에연결 외부적으로 net 가모듈의출력에연결가능 reg or net inout input net module net net output reg or net net 한국기술교육대학교전기전자통신공학부 7

포트순서에의한포트매핑 모듈의포트목록에나열된포트순서와 1:1로대응되어연결 연결되는신호가없으면해당위치를빈칸으로남겨둔다 포트이름에의한포트매핑 포트이름과그포트에연결되는신호이름을명시적으로지정 포트의비트선택, 부분선택, 결합등을사용할수없음 module tcon (a, b, c, d); inout a, b; input c, d; tranif1 g1(a, b, cont); not #(2, 6) n1(cont nout); and #(6, 5) g2(nout, c, d); module topmod; 순서에의한포트매핑 wire [4:0] v; wire w; tcon U1 (v[0], v[3], w, v[4]); module topmod; 이름에의한포트매핑 wire [4:0] v; wire w; tcon U1 (.b(v[3]),.a(v[0]),.d(v[4]),.c(w)); 한국기술교육대학교전기전자통신공학부 8

code 2.1.1-2 module FA1 (x, y, z, c, s); input x, y, z; output c, s; wire w1, w2, w3; xor (w1, x, y); xor (s, w1, z); and(w2, x, y); and(w3, w1, z); or (c, w2, w3); FA1.v, 프리미티브게이트를사용한전가산기 1 비트전가산기 FA1 의합성회로도 `timescale 1 ns / 1 ns module tbb_fa1 ; reg a, b, cin; integer k; FA1 U0 (a, b, cin, cout, sum); // DUT 모듈인스턴스 initial begin // 시뮬레이션파형생성 forever for(k = 0; k < 8; k = k+1) begin cin = k/4; b =(k%4)/2; a = k%2; #10; 한국기술교육대학교전기전자통신공학부 9

code 2.1.1-3 FA4.v, 4 비트가산기의구조적모델링 module FA4 (x, y, ci, co, s); input [3:0] x, y; input ci; output co; output [3:0] s; wire [3:0] s; wire [3:1] tc; FA1 U0 (x[0], y[0], ci, tc[1], s[0]); FA1 U1 (x[1], y[1], tc[1], tc[2], s[1]); FA1 U2 (x[2], y[2], tc[2], tc[3], s[2]); FA1 U3 (.x(x[3]),.y(y[3]),.z(tc[3]),.c(co),.s(s[3])); // 순서에의한연결 // 이름에의한연결 4 비트전가산기 FA4 의합성블록도 한국기술교육대학교전기전자통신공학부 10

계층적구조 (Hierarchical structure) 인스턴스이름으로계층 (hierarchy) 신호참조 TB (root level) 예제 2.1.1-1 계층이름참조예 U1 (FA4) a,b,ci, sum,co TB TB.a TB.ci TB.U1.U0 TB.U1.U1 TB.U1.U2 TB.sum TB.U1.U3 U0 (FA1) U1 (FA1) U2 (FA1) U3 (FA1) x,y,ci, co,s TB.co TB.U1 TB.U1.U2.x TB.U1.U2.y TB.U1.x TB.U1.U2.s xor_w1 xor_s and_w2 and_w3 or_c x,y,z, c,s, w1,w2,w3 TB.U1.ci TB.U1.co TB.U1.U2.w1 TB.U1.U2.w2 한국기술교육대학교전기전자통신공학부 11

부울식의모델링 ex : gate1.v 의회로도를그리시오. 프리미티브게이트인스턴스 인스턴스이름사용은선택적 순서에의한연결만가능 code 2.1.2-1 gate1.v, 부울식의구조적모델링 module gate1 (x,y,z,f,g); input x, y, z; output f, g; wire w1, w2, w3, w4, w5, w6; not g1 (w1, z); and g2 (w2, x, w1); not g3 (w3, w2); and g4 (w4, x, y, z); and g5 (w5, x, y); nor g6 (w6, y, z); or #(4, 6) g7 (f, w2, w4); or #(5) g8 (g, w3, w5, w6); 한국기술교육대학교전기전자통신공학부 12

3-to-8 디코더 code 2.1.2-3 dec3t8_g.v, 인에이블입력을가진 3-to-8 디코더 ex : dec3t8_g 의회로도를그리시오. module dec3t8_g (en, x, y); input en; input [2:0] x; output [7:0]y; wire w0,w1,w2; not n0 (w0, x[0]); not n1 (w1, x[1]); not n2 (w2, x[2]); and a0 (y[0], en, w0, w1, w2); and a1 (y[1], en, x[0], w1, w2); and a2 (y[2], en, w0, x[1], w2); and a3 (y[3], en, x[0], x[1], w2); and a4 (y[4], en, w0, w1, x[2]); and a5 (y[5], en, x[0], w1, x[2]); and a6 (y[6], en, w0, x[1], x[2]); and a7 (y[7], en, x[0], x[1], x[2]); 한국기술교육대학교전기전자통신공학부 13

JK 플립플롭 Jk_g.v, JK 플립플롭의 code 2.1.2-4 구조적모델링 J clk K g0 g1 g2 g3 Q Qb module jk_g (clk, j, k, q, qb); input clk, j, k; output q, qb; wire w1, w2; wire q, qb; nand g0 (w1, clk, j, qb); nand g1 (w2, clk, k, q); nand g2 (q, w1, qb); nand g3 (qb, w2, q); Ex : jk_g 에대한테스트벤치를작성하고시뮬레이션으로동작을확인하시오. 한국기술교육대학교전기전자통신공학부 14

dlatch_g.v, 3상버퍼를가 code 2.1.2-5 진1 비트D 래치 module dlatch_g (clk, en, d, q, qb); input clk, en, d; output q, qb; wire dn, w1, w2; wire qi, qbi; not n1 (dn, d); nand g1 (w1, clk, d); nand g2 (w2, clk, dn); nand g3 (qi, w1, qbi); nand g4 (qbi, w2, qi); bufif0 g5 (q, qi, en); bufif0 g6 (qb, qbi, en); code 2.1.2-6 TB_dlt.v, dlatch에대한테스트벤치 `timescale 1ns /1 ns module TB_dlt; reg clk=1, en, d; wire q, qb; dlatch_g U1 (clk, en, d, q, qb); // DUT 인스턴스 always #50 clk = ~clk; // 클록발생, T=100 initial begin en = 0; d=1; // time=0, 출력활성화 #210 en = 0; d=0; // time=210 #100 en = 0; d=1; // time=310 #100 en = 1; d=1; // time=410, 출력비활성화 #100 en = 1; d=0; // time=510 #100 en = 1; d=0; // time=610 #100 en = 1; d=1; // time=710 #100 en = 1; d=1; // time=810 한국기술교육대학교전기전자통신공학부 15

지연시간 - 입력평가가완료된후주어진지연시간후에출력이전달되는하드웨어의타이밍동작모델실제하드웨어에서지연시간은필수적으로발생하기때문에시뮬레이션에서이를반영하여동작을확인각게이트가가지는지연시간값을가장실제값에근사하게규정하여나타낼때보다더정확한동작예측 지연시간표현 단일지연시간 - (avg_delay) 2개지연시간 - (rise_delay, fall_delay) 3개지연시간 - (rise_delay, fall_delay, turn-off_delay) 각지연시간은 (min:typ:max) 으로표현할수도있다. - (rise_dly_min: rise_dly_typ: rise_dly_max, fall_dly_min: fall_dly_typ: fall_dly_max) 한국기술교육대학교전기전자통신공학부 16

From value To value 2 개지연값 (d1,d2) 사용 3 개지연값 (d1,d2,d3) 사용 0 1 d1 d1 0 x min(d1, d2) min(d1, d2, d3) 0 z min(d1, d2) d3 1 0 d2 d2 1 x min(d1, d2) min(d1, d2, d3) 1 z min(d1, d2) d3 x 0 d2 d2 x 1 d1 d1 x z min(d1, d2) d3 z 0 d2 d2 z 1 d1 d1 z x min(d1, d2) min(d1, d2, d3) 한국기술교육대학교전기전자통신공학부 17

gate_delay.v, 게이트지연시 code 2.1.3-1 간산정에대한테스트벤치 `timescale 1ns /1ns module gate_delay; rega,b,c,d; wire y1, y2, y3; and #20 (y1, a, b); or #(20,40) (y2, a, b); notif1 #(20,40,60) (y3, c, d); initial begin a = 1; b = 1; c = 1; d = 1; #100 a = 0; b = 0; c = 0; d = 1; #100 a = 0; b = 1; c = 1; d = 0; #100 a = 1; b = 0; c = 0; d = 0; #100 a = 1'bx; b = 1'bx; c = 1'bx; d = 1; 한국기술교육대학교전기전자통신공학부 18

모듈에서사용될상수나표현식에대한이름정의 모듈인스턴스에서재정의가능 code 2.1.4-1 xor8.v 8개의 xor 게이트 module xor8 (output wire [1:8] y, input [1:8] in1, in2); xor (y[8], in1[8], in2[8]), (y[7], in1[7], in2[7]), (y[6], in1[6], in2[6]), (y[5], in1[5], in2[5]), (y[4], in1[4], in2[4]), (y[3], in1[3], in2[3]), (y[2], in1[2], in2[2]), (y[1], in1[1], in2[1]); code 2.1.4-2 xorp.v, 파라미터를사용한 xor 게이트 module xorp # (parameter width = 4, delay = 10) (output wire [1:width] y, input [1:width] in1, in2); assign #(delay) y = in1 ^ in2; // bitwise xor code 2.1.4-3 overp.v, 파라미터를인스턴스할때변경 module overp (output [3:0] y1, y2); reg[3:0] a1, b1, a2, b2; xorp #(.width(4),.delay(0)) u1 (y1, a1, b1); // 이름에의한파라미터 override xorp u2 (y2, a2, b2); // width=4, delay =10, default 한국기술교육대학교전기전자통신공학부 19

계층적이름을사용한파라미터값변경 code 2.1.4-4 Pchange.v, defparam 에의한파라미터변경 module Pchange; defparam // 파라미터재정의시작 overp.u1.delay = 20, //, 로계속됨 overp.u1.width = 12, overp.u2.delay = 10, overp.u2.width = 8; // ; 로끝남 한국기술교육대학교전기전자통신공학부 20

8 비트레지스터의 2 가지구조적모델링비교 code 2.1.5-2 dreg_a.v, 인스턴스배열을사용한 8 비트 D 레지스터 module dreg_a #(parameter size = 8) (output wire [size-1:0] q, input [size-1:0] d, input clk, clr); // 인스턴스배열 dff1 u[size-1:0] (clk, clr, d, q); code 2.1.5-3 dreg8.v, 8 비트 D 레지스터 module dreg8 (output wire [7:0] q, input [7:0] d, input clk, clr); dff1 u7 (clk, clr, d[7], q[7]); dff1 u6 (clk, clr, d[6], q[6]); dff1 u5 (clk, clr, d[5], q[5]); dff1 u4 (clk, clr, d[4], q[4]); dff1 u3 (clk, clr, d[3], q[3]); dff1 u2 (clk, clr, d[2], q[2]); dff1 u1 (clk, clr, d[1], q[1]); dff1 u0 (clk, clr, d[0], q[0]); 한국기술교육대학교전기전자통신공학부 21

모듈인스턴스의생성 모듈, 프리미티브게이트, 연속할당문, initial/always 블록등의인스턴스를하나또는다수개생성 net, reg, integer, real, time, realtime 및 event 등의자료형을생성영역내에서선언가능 생성된인스턴스는고유의식별자를가지며계층적이름으로참조가능생성문의종류 반복생성문 (generate~for) 조건생성문 (generate~if) case 생성문 (generate~ case) genvar 선언 생성문의내부에서만사용되는인덱스변수의선언 생성문의외부혹은내부에서 genvar로선언된변수는정수형으로인덱스를갖는반복생성문내에서사용되는지역 (local) 변수 시뮬레이터또는논리합성툴의 elaboration 과정동안에만정의되며, 시뮬레이션또는합성이진행되는동안에는존재하지않음 elaboration : 시뮬레이션이나합성을위해모듈을분석하는과정 구문의오류검출, 인스턴스된모듈의연결 (link), parameter 값의전달, 계층적인참조에대한분해등을수행하는과정 한국기술교육대학교전기전자통신공학부 22

반복생성문 (generate-for 문 ) generate-generate 구문내부에 for 문을사용하여특정모듈또는블록을반복적으로인스턴스 variable 선언, 모듈, UDP, 게이트프리미티브, 연속할당문, initial 블록, always 블록등을인스턴스할수있음 생성문내부의 for-loop에서사용되는인덱스변수는 genvar로선언 for 문의 begin 뒤에생성문블록식별자 (:identifier) 를붙여야함 한국기술교육대학교전기전자통신공학부 23

generate ~ for 예 code 2.1.6-1 xor_for.v, 반복생성문 module xor_for #(parameter width = 4, delay =10) (output wire [1:width] y, input [1:width] in1, in2); generate genvar i; // 반복인덱스변수선언 for (i = 1; i <= width; i=i+1) begin: xi assign #delay y[i] = in1[i] ^ in2[i]; generate 프리미티브게이트사용 generate genvar i; for (i = 1; i <= width; i=i+1) begin: xi xor #delay u (y[i], in1[i], in2[i]); generate 4 개의할당문과동일 assign #delay y[1] = in1[1] ^ in2[1]; assign #delay y[2] = in1[2] ^ in2[2]; assign #delay y[3] = in1[3] ^ in2[3]; assign #delay y[4] = in1[4] ^ in2[4]; always 블록인스턴스 output reg [1:width] y;... generate genvar i; for (i = 1; i <= width; i=i+1) begin: xi always @(*) y[i] = in1[i] ^ in2[i]; generate 한국기술교육대학교전기전자통신공학부 24

Gray-to-Bin 변환기 - always 인스턴스사용 module gray2bin2(bin, gray); parameter SIZE = 4; output [SIZE-1:0] bin; input [SIZE-1:0] gray; reg [SIZE-1:0] bin; genvar i; generate for(i=0; i<size; i=i+1) begin : gb1 always @ (gray[size-1:i]) bin[i] = ^gray[size-1:i]; generate 한국기술교육대학교전기전자통신공학부 25

리플캐리가산기 code 2.1.6-3 rca_for.v, 반복생성문에의한리플캐리가산기 module rca_for (a, b, ci, co, sum ); parameter size = 4; input [size-1:0] a, b; input ci; output co; output wire [size-1:0] sum; wire [size:0] c; genvar i; assign c[0] = ci; generate for(i=0; i<size; i=i+1) begin : ra wire t1, t2, t3; // 생성되는로칼 net 선언 xor g1 (t1, a[i], b[i]); xor g2 (sum[i], t1, c[i]); and g3 (t2, a[i], b[i]); and g4 (t3, t1, c[i]); or g5 (c[i+1], t2, t3); generate assign co = c[size]; 한국기술교육대학교전기전자통신공학부 26

if~ 생성문 - 모듈인스턴스, 연속할당문, UDP, 프리미티브, initial, always 블록등을인스턴스 code 2.1.6-4 mult_if.v, if 조건생성문을사용한승산기 module mult_if (x, y, prod); parameter x_wid = 8, y_wid = 8; localparam prod_wid = x_wid + y_wid; // localparam으로선언된파라미터는 defparam나모듈인스턴스 # 에서변경불가 input [x_wid-1:0] x ; input [y_wid-1:0] y; output wire [prod_wid-1:0] prod; generate if( (x_wid < 8) (y_wid < 8) ) CLA_mult #(x_wid, y_wid) u1 (x, y, prod); // CLA 승산기인스턴스 else WALLACE_mult #(x_wid, y_wid) u2 (x, y, prod); // Wallace-tree 승산기인스턴스 generate 한국기술교육대학교전기전자통신공학부 27

generate 블록내에 case 조건에따라특정모듈혹은블록을선택적으로인스턴스 code 2.1.6-5 rca_case.v, case 생성문을사용한리플캐리가산기 module rca_case #(parameter size = 4) ( input [size-1:0] a, b, input cin, output reg [size-1:0] sum, output reg co, neg, ov ); reg [size-1:0] c; generate genvar i; for (i = 0; i< size; i=i+1) begin: stage case(i) 0: begin always @(*) begin sum[i] = a[i] ^ b[i] ^ cin; c[i] = a[i] & b[i] b[i] & cin a[i] & cin; size-1: begin always @(*) begin sum[i] = a[i] ^ b[i] ^ c[i-1]; co = a[i] & b[i] b[i] & c[i-1] a[i] & c[i-1]; neg = sum[i]; // 부호 ov = co ^ c[i-1]; // overflow default: begin always @(*) begin sum[i] = a[i] ^ b[i] ^ c[i-1]; c[i] = a[i] & b[i] b[i] & c[i-1] a[i] & c[i-1]; case generate 한국기술교육대학교전기전자통신공학부 28