4.1 initial 과 always Chapter 4 Verilog의특징 보통의 programming언어와같은 procedural statement을제공 추상적인 behavioral model 기술에사용 순차적으로수행하는보통의 programming 언어와는다르게병렬적으로수행하는언어임 module Behavioral Model 논리설계 병렬수행 module instance primitive instance assign structural model dataflow model initial always behavioral model 컴퓨터정보통신임베디드하드웨어설계 1 2 procedural statement procedural statement 보통의 programming언어와비슷한방식으로기술함 보통 programming언어에서사용하는구문들사용 if, case, for, assignment 등 추상적인 behavioral model에사용 procedural statement의종류 initial 문 single-pass behavior always 문 cyclic behavior 3 initial 문 initial 문 single pass behavior initial begin initial 문장 ; 문장 ; 문장 ; simulation을시작할때에한번만수행 synthesis 되지않음 일반적으로초기화, 입력파형생성, 출력관찰등 simulation 수행시에한번만수행되어야하는과정을기술하는데사용 예 initial begin x = 1'b0; #40 x = 1'b1; initial #100 $finish; 4
always 문 always 문 cyclic behavior always 반복조건 begin 문장 ; 문장 ; 반복조건의이벤트가발생할때마다반복하여수행 예 : clock generator initial clock = 1'b0; always #20 clock = ~clock; clock 0 20 40 60 80 100 5 6 initial 과 always 의비교 종류 구문 동작 논리합성 initial initial begin... (single-pass behavior) simulation시작할때한번수행 x 4.2 타이밍제어 -always 반복조건 타이밍제어 형식 내용 지연제어 #10 10 단위시간이지연됨 이벤트제어 @(a) 신호 a의변화를기다림 레벨제어 wait(a==0) 신호 a가 0과같게되기를기다림 always always begin... (cyclic behavior) 이벤트가발생할때마다반복수행 O 지연제어와레벨제어문은논리합성이지원되지않음 지연제어문 #delay 주어진시간 delay 가지연된후에뒤에있는문장을수행 7 컴퓨터정보통신 임베디드하드웨어설계 8
이벤트제어 이벤트제어 @(var) 이벤트제어의여러가지형태 var 값의변화시에 event 발생 @(var) 변수 var 값의변화 @(posedge var) 변수 var의 positive edge (0 1 변화 ) @(negedge var) 변수 var의 negative edge (1 0 변화 ) @(var1 or var2) 변수 var1 또는 var2 값의변화 @(posedge var1 or negedge var2) @(posedge var1 or var2) synthesis tool은혼합형태를지원하지않음 sensitivity list Verilog-2001에서는 or 대신에, 를사용할수있음 @(var1, var2, var3) level-sensitive variable edge-triggered variable 9 level-sensitive 와 edge-triggered 이벤트 level-sensitive 이벤트 a 또는 b가변할때이벤트발생 half-adder always @(a or b) begin sum = a ^ b; cout = a & b; a 또는 b 가변할때마다 sum 과 cout 값을다시계산 edge-triggered 이벤트 clk의 positive edge에서이벤트발생 D flip-flop D always @(posedge clk) qout = din; clk 의 positive edge 에서 din 이 qout 에저장됨 10 Q 4.3 procedural assignment 문 예 : 보수출력이있는 positive edge-triggerred D flip-flop module dff_s (q, qbar, data, clk); output q, qbar; input data, clk; reg q, qbar; always @ (posedge clk) begin q = data; qbar = ~q; module module dff_s (q, qbar, data, clk); output q, qbar; input data, clk; reg q; assign qbar = ~q; always @ (posedge clk) begin q = data; module assign문과 always문의병렬수행두할당문은순서대로수행함두할당문순서가바뀌면동작이달라짐 순차할당문 (procedural assignment statement) initial 또는 always 내에서사용된 assignment( = ) 문장 순차적으로할당문이수행됨 할당문의순서가동작에영향을미칠수있음 LHS 변수는 variable 형이어야함 (ex) reg 또는 integer reg 형변수는 hardware register 로합성될수있으나그렇지않을수도있음 always 반복조건과회로 sensitivity list : @ 이벤트에포함된신호들 sensitivity list 에모든입력을포함한다면 조합회로로합성될수도있음 sensitivity list, 에모든입력이포함되지않는다면 내부에기억장소가포함된순차회로로합성됨 11 12
4.4 조건문 if 문을사용한설계 if 문 if ( 조건식 ) 문장 if ( 조건식 ) 문장 1 else 문장 2 if ( 조건식1) 문장1 else if ( 조건식2) 문장2... else if ( 조건식n) 문장n else 문장n+1 case 문 case ( 수식 ) 값1: 문장1; 값2: 문장2;... default: 기본문장 ; case // 일치하는값이없으면기본문장수행 예 : flip-flop with synchronous set and reset module dff_s (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; module D R Q Q S 컴퓨터정보통신 임베디드하드웨어설계 13 14 예제 예제 예 : flip-flop with asynchronous set and reset 예 : transparent D-latch module dff_a (q, qbar, data, set, reset, clk); output q, qbar; input data, set, reset, clk; reg q; module tr_latch (q, enable, data); output q; input enable, data; reg q; D Q assign qbar = ~q; always @ (negedge set or negedge reset or posedge clk) begin if (reset==0) q = 0; // async reset else if (set==0) q = 1; // async set else q = data; // synchronize with clk module always @ (enable or data) begin if (enable) q = data; module enable=0 이면 q 값은변하지않음 저장 G set과 reset은실제로 level-sensitive 동작 : 0일때에clk과무관하게 (asynchronous) set 또는 reset 동작 clk만 edge-triggered 동작컴퓨터정보통신임베디드하드웨어설계 15 sensitivity list 에모든입력이있지만문장에서출력 q 가모든경우에대해서정의되어있지않으므로기억장소를포함하여논리합성됨 16
예제 예 : 1 비트 4x1 멀티플렉서 module mux4(y, d3, d2, d1, d0, sel); output y; input d3, d2, d1, d0; input sel; reg y; always @(d3 or d2 or d1 or d0 or sel) begin if (sel==0) y = d0; else if (sel==1) y = d1; else if (sel==2) y = d2; else if (sel==3) y = d3; else y = 1'bx; module else y = d3; case 문을사용한설계 1 비트 4x1 멀티플렉서 module mux4(y, d3, d2, d1, d0, sel); output y; input d3, d2, d1, d0; input [1:0] sel; reg y; always @(d3 or d2 or d1 or d0 or sel) begin case (sel) 0: y = d0; 1: y = d1; 2: y = d2; 3: y = d3; case module default: y = 1'bx; // 모든경우정의 컴퓨터정보통신 임베디드하드웨어설계 17 컴퓨터정보통신 임베디드하드웨어설계 18 4.5 여러가지 Behavioral Model Modeling styles structural modeling gate-level structure behavioral modeling continuous assignment dataflow model register transfer level(rtl) logic algorithm-based model always 문사용 RTL Model RTL(Register Transfer Logic) model 주로 clock에동기되는동작하는 synchronous machine의 data flow를 modeling하는데사용 combinational logic의 modeling 가능 Verilog-2001에서는 @* 로대체가능 조합회로의 RTL modeling combinational logic은 continuous assignment문과같은동작을하는 asynchronous cyclic behavior로 modeling 가능 RHS에사용되는모든변수포함 wire y1, y2; reg y1, y2; 19 assign y1 = expr1; always @(v1 or v2 ) begin assign y2 = expr2; y1 = expr1;... y2 = expr2;... continuous assignment 모델 RTL 모델 20
RTL model 예제 예 : 2-bit comparator module cmp2_rtl(lt, gt, eq, A1, A0, B1, B0); input A1, A0, B1, B0; output lt, gt, eq; reg lt, gt, eq; always @(A0 or A1 or B0 or B1) begin lt = {A1,A0} < {B1,B0}; gt = {A1,A0} > {B1,B0}; eq = {A1,A0} == {B1,B0}; module Algorithm-Based Models Algorithm-based model RTL model 보다더추상적인 model input-output 관계를기술하며 register, datapath, computational resource 등의내부구조를기술하지않음 architectural synthesis 내부구조는 synthesis tool에의해서정해짐 most challenging hardware 로합성될수없는경우도있음 always 내의문장은순서대로실행됨 RHS 와 LHS 사이에 depency 가있으면순서에영향을받음 (cf) multiple continuous assignment 들은 concurrent 하게실행됨 기술된순서에관계없음 21 22 Algorithm-Based Model 예제 예 : 2-bit comparator module cmp2_ca2(lt, gt, eq, A, B); input [1:0] A, B; output lt, gt, eq; reg lt, gt, eq; always @ (A or B) begin lt = 0; gt = 0; eq = 0; if (A==B) eq = 1; else if ( A > B) gt = 1; else lt = 1; module // deassert(0) 초기화 조건을만족하는출력을 assert(1) 이 model 은 reg 변수를사용할지라도조합회로로합성되며 hardware register 를필요로하지않음 4.6 Blocking 와 Nonblocking Assignment 문 procedural assignment 문의종류 종류구문동작 blocking assignment 문 nonblocking assignment 문 변수 = 수식 ( 보통의 programming 언어와같음 ) 블록내의할당문을순서대로수행 할당문의순서에영향을받을수있음 변수 <= 수식 sequential (concurrent behavior 를 modeling) 블록내의할당문의수식들을먼저계산한후에 LHS 변수값을갱신함 할당문의순서에영향을받지않음 concurrent 23 24
예 4-bit shift register 4비트 shift register clock의 positive edge에서 register 값이 1비트씩오른쪽으로이동 4-bit shift register의 modeling structural model 또는 dataflow model로기술하기가어려움 always @(posedge clk) 을사용한 behavioral model로기술함 assignment문사용에주의가필요함컴퓨터정보통신임베디드하드웨어설계 25 Blocking Assignment 문 Blocking assignment: a = b sequential, procedural assignment blocking assignment문의실행이종료되어야다음문장이실행됨 새로할당된결과가다음문장의실행에사용됨 실행결과는 blocking assignment 문의순서에영향을받을수있음 예 : 4-bit shift register ( 순서 : E D C B A) always @(posedge clk) begin A = B; B = C; C = D; D = E; before: EDCBA=1011x after: EDCBA=11011 always @(posedge clk) begin D = E; C = D; B = C; A = B; before: EDCBA=1011x after: EDCBA=11111 ( 옳음 ) ( 잘못됨 ) 26 Nonblocking Assignment Nonblocking assignment: a <= b 먼저 procedure 내의 RHS 의값들을계산한후에 LHS 변수를갱신함 t = T 에 RHS 값계산 t = T + 에 LHS 변수값갱신 nonblocking assignment 문들을 concurrent 하게실행하는효과를제공하며문장들의순서에영향을받지않음 예 : 4-bit shift register ( 순서 : E D C B A) always @(posedge clk) begin A <= B; B <= C; C <= D; D <= E; before: EDCBA=1011x after: EDCBA=11011 always @(posedge clk) begin D <= E; C <= D; B <= C; A <= B; before: EDCBA=1011x after: EDCBA=11011 ( 옳음 ) ( 옳음 ) 27 Blocking vs. Nonblocking Assignments Multiple assignments 에서 LHS 와 RHS 간에 depency 가 없는경우 : blocking, nonblocking 모두사용가능 존재하는경우 : 순서에영향이있음 concurrent 동작모델 : nonblocking 사용 algorithmic 동작모델 : blocking 사용 권장하는용도 Nonblocking assignment: edge-sensitive operation (synchronous 동작, register 출력저장 ) Blocking assignment: 조합회로출력 28
Port Names: Style Module 의 port name 의순서 정해진규칙은없음 권장순서 다음순서 ( 출력우선 ) 또는역순 ( 입력우선 ) bidirectional datapath signals bidirectional control signals datapath outputs control outputs datapath inputs control inputs synchronizing signals 29