Digital System Design with Verilog HDL - Combinational Logic
Lab. Gate Circuit AND, OR, NOT 게이트들로이루어진멀티플렉서기능의논리회로구현멀티플렉서 : 여러개의입력중하나를선택하여출력하는기능모듈입력 s=: 단자 a 의값이단자 z 로출력입력 s=: 단자 b 의값이단자 z 로출력 File name : gatelogic.v Module name: gatelogic Input : a, b, s [ 각 -bit] Output : z [-bit] Symbol a s n2 z b n n3 2
Lab 2. Priority Encoder 모듈의동작이 don t care 를포함한기능표로표시된사양을설계입력단자 a, b, c 중 의값을갖는단자를찾는데여러단자가 일경우엔 c, b, a 의차례로우선순위를가짐 File name : priority.v Module name: priority Input : a, b, c [ 각 -bit] Output : z [2-bit] Truth Table a b c z - - - 3
Lab 3. Multiplexer 여러개의입력중하나를선택하여출력하는회로 2 비트폭의제어신호 sel 에의해하나의입력단자신호가선택되어단자 z 로출력 Enable 제어신호 en= 일때만멀티플렉서로서동작 en= 이면고정값 을출력 File name : mux.v Module name: mux Input : a, b, c, d [ 각 4-bit] en [-bit], sel [2-bit] Output : z [4-bit] Truth Table en sel z a b c d - 4
Lab 4. -bit Half/Full Adder 반가산기 (Half Adder) 는 2 개의입력에대해덧셈을수행하는모듈두입력신호 (a, b) 를받아합산결과는 sum, 캐리는 cout 으로출력 File name : halfadd.v Module name: halfadd Input : a, b [ 각 -bit] Output : sum, cout [ 각 -bit] Truth Table a b sum cout 5
Lab 4. -bit Half/Full Adder (Cont.) 전가산기 (Full Adder) 는 3 개의입력에대해덧셈을수행하는모듈세입력신호 (x, y, z) 를받아합산결과는 sum, 캐리는 cout 으로출력앞에서설계한반가산기를이용 File name : fulladd.v Module name: fulladd Input : x, y, z [ 각 -bit] Output : sum, cout [ 각 -bit] Symbol x A COUT n cout y B HALFADD [s] SUM n2 A COUT n3 HALFADD z B [s2] SUM sum 6
Lab 5. 4-bit Full Adder 앞에서설계한 -bit Full Adder 를이용하여 4-bit Full Adder 를설계 File name : four_fulladd.v Module name: four_fulladd Input : a, b [ 각 4-bit], cin [ -bit] Output : cout, s, s, s2, s3 [ 각 -bit] Symbol a[] b[] a[] b[] a[2] b[2] a[3] b[3] cin FA c FA c2 FA c3 FA cout s s s2 s3 7
Lab 6. Comparator 두개의입력을비교하여등가여부를판별두수가같을때 : Logic 출력두수가다를때 : Logic 출력 y 은 a, a2 의비교결과 y2 는 b, b2 의비교결과 a, a2 비교는각 bit 를하나씩비교 b, b2 비교는전체 bit 를한번에비교 File name : comparator.v Module name: comparator Input : a, a2, b, b2 [ 각 3-bit] Output : y, y2 [ 각 -bit] Truth Table a a2 b b2 y y2 6 7 5 6 7 6 8
Lab 7. Even Parity Generator 데이터에존재하는 의개수가항상짝수가되도록추가비트를생성하는회로 패리티비트는직렬통신회로에서외부요인으로인한오류감지위해사용 File name : evenparity.v Module name: evenparity Input : a [8-bit] Output : z [9-bit] Truth Table 데이터 패리티 의개수 4 개 ( 짝수 ) 4 개 ( 짝수 ) 9
Lab 8. ALU 데이터간의수학적, 논리적연산을수행하는회로 단자 a, b 로입력되는데이터를선택된연산으로변환하여단자 z 로출력 제어신호 s 에의해연산종류결정 File name : alu.v Module name: alu Input : a, b [ 각 8-bit], s [3-bit] Output : z [8-bit] Symbol & Truth Table a b s s z 연산 B - A A - B A + B A xor B A or B A and B 연산설명 Clear Subtract Subtract Add Exclusive OR Logical OR Logical AND Preset
Digital System Design with Verilog HDL - Sequential Logic
Lab. D Latch with set and reset D Latch 는게이트입력이어떤상태를유지하는동안외부데이터를읽어데이터를저장하는메모리모듈 set_n 이 들어오면출력을 reset_n 이 이되면출력은 g= 일때입력 d 의신호를읽음 set_n 과 reset_n 이입력보다우선 set_n 과 reset_n 이동시에들어오면 set_n 으로동작 File name : D_latchsr.v Module name: D_latchsr Input: set_n, reset_n, d, g [ 각 -bit] Output: q, q_n Symbol & Truth Table set_n reset_n g - - - set_n q(t+) q(t) d [ 각 -bit] q_n(t+) q_n(t) not d d g D Type Latch q q_n reset_n 2
Lab 2. D Flip - Flop D Flip-Flop 은 clock 의 rising 또는 falling edge 에서외부데이터를읽어저장하는메모리모듈비동기방식의 Reset 사용 clk 의 rising edge 에서데이터입력 d 가 Flip-Flop 에저장됨 File name : D_FF.v Module name: D_FF Input: clk, reset_n, d [ 각 -bit] Output: q [-bit] Symbol & Truth Table reset_n clk q(t+) - falling edge q(t) rising edge d d clk D Type Flip-Flop q reset_n 3
Lab 3. 8-bit Register Latch 나 Flip-Flop 을이용하여여러비트의데이터를저장하는회로 D Flip-Flop 8 개로구성 비동기식 Reset 사용 입력 d 와출력 q 의각비트는 Flip-Flop 에각각따로연결 en 신호 이되면이전출력유지 clk 의 rising edge 에서입력 d 가저장됨 File name : Reg8.v Module name: Reg8 Input: clk, reset_n, en [ 각 -bit] d [8-bit] Output: q [8-bit] Symbol & Truth Table reset_n en clk q(t+) - - - falling edge q(t) q(t) rising edge d d q en Register clk 4 reset_n
Lab 4. 8-bit Shift Register 데이터를저장하면서필요에따라오른쪽이나왼쪽으로데이터를이동시킬수있는회로비동기식 Reset 사용 clk 의 rising edge 에서 ld 가 이면입력 d 를저장 en 이 이면이전출력유지 dir 이 이면 shift right, 이면 shift left Shift8 회로로입력되는데이터는 sd 로부터받음 File name : Shift8.v Module name: Shift8 Input: clk, reset_n, en [ 각 -bit] dir, ld, sd [ 각 -bit] d [8-bit] Output: q [8-bit] Symbol d q sd en ld Register dir clk reset_n 5
Lab 4. 8-bit Shift Register (Cont.) 6
Lab 5. BCD Counter Binary counter 는이진수를출력하는 counter 모듈 ~9 사이의이진수를증가하는 counter reset_n 이 이되면출력 clk 의 rising edge 에서 counting 출력이 이되면다음출력은 이되어반복 File name : BCD_count.v Module name: BCD_count Input: clk, reset_n [ 각 -bit] Output: q [4-bit] 7
Lab 6. Johnson Counter Johnson counter 는인접한패턴간에하나의비트만달라지도록패턴을생성하는 counter 모듈 reset_n 이 이되면출력 clk 의 rising edge 에서 counting Ring counter 와같이 MSB 를 LSB 로회전시키는데그대로옮기지않고반전시켜넣음 Symbol File name : Johnson_count.v Module name: Johnson_count Input: clk, reset_n [ 각 -bit] Output: q [5-bit] clk Johnson Counter q reset_n 8
Digital System Design with Verilog HDL - Advanced Circuits
Lab. Sequence Detector 입력되는 bit stream 에서일정한패턴을찾아내는회로클럭의 rising edge 에서데이터를읽음연속적으로감지되는값이 패턴을갖는지판단 패턴이나오면 flag= 을출력다른패턴이나오면바로첫상태로이동하여패턴검색시작 Moore 형태의 FSM 으로설계 File name : seqdet.v Module name: seqdet Input : clk, rst_n, seqin [ 각 -bit] Output : flag [-bit] 2
Lab. Sequence Detector (Cont.) State Machine (Moore) 5 가지상태 START, S, S2, S3, S4 Reset 시상태는 START 임 S 은 개비트가맞았을때의상태 S2 은 2 개비트가맞았을때의상태 S3 은 3 개비트가맞았을때의상태 S4 은 4 개비트가모두맞았을때상태 seqin= Example Input bit = Output flag = seqin= Init seqin= seqin= seqin= seqin= START flag= S flag= S2 flag= S3 flag= S4 flag= seqin= seqin= seqin= seqin= 2
Lab 2. Traffic Light Controller 농로와국도가교차하는사거리에서교통신호를제어하는회로국도는차량소통이많고농로는차량소통이적음평상시에는국도방향의신호등이파란색이고농로에차량이다가오면이를감지하여농로의신호등을파란색으로바꾸어교통흐름을원활하게함농로에차가다가오면 car_on= 임신호등은빨강 (2 b), 노랑 (2 b), 파랑 (2 b) 의색을가짐 Moore 형태의 FSM 으로설계 File name : tlc.v Module name: tlc Input : clk, rst_n, car_on [ 각 -bit] Output : highwaylight [2-bit] farmlight [2-bit] 22
Lab 2. Traffic Light Controller (Cont. ) Implementation of TLC tlc 가최상위블록이고 tlc_ctl 과 tlc_timer 의하위블록으로구성 tlc_timer 블록은시간을측정하는타이머로서신호등이켜져있는시간을측정 tlc_ctl 은신호등의동작을제어하는 Moore 형태의 FSM Hierarchy of Circuits Spec. of tlc_timer tlc 의하위블럭 신호등이유지되는시간측정 start= 이되면타이머측정시작 빨간색과파란색은 2 클럭동안유지 gl_time= 노란색은 5 클럭동안유지 yl_time= tlc_timer tlc tlc_ctl File name : tlc_timer.v Module name: tlc_timer Input : clk, rst_n, start [ 각 -bit] Output : gl_time, yl_time [ 각 -bit] 23
Lab 2. Traffic Light Controller (Cont. 2) Spec. of tlc_ctl tlc 의하위블럭신호등의동작을제어하는 Moore 형태의 FSM 4 가지상태 (HG, FY, FG, HY) State Diagram Init File name : tlc_ctl.v Module name: tlc_ctl Input : clk, rst_n, car_on [ 각 -bit] gl_time, yl_time [ 각 -bit] Output : f_l, h_l [ 각 2-bit] start [-bit] else HG high=green farm=red yl_time= FY high=red farm=yellow else gl_time= car_on= gl_time= car_on= else HY high=yellow farm=red yl_time= FG high=red farm=green else 24
Lab 3. GCD (Greatest Common Divisor) GCD Flow Chart 두수중하나가 이거나같게될때까지큰수에서작은수를뺀다. 여기서는 A >= B 를만족할때까지 A 에서 B 를뺀다. 만약 A < B 가되면 A 와 B 의값을서로바꾼다. 그리고위의계산을 B 가 이될때까지계속한다. GCD 값은 B 가 이되었을때 A 에남는값이다. (GCD flow chart 참고 ) A = End Yes Yes Start GCD A= or B= No B= No A>=B Yes A=A-B No Swap A and B 25
Lab 3. GCD (Greatest Common Divisor)(Cont.) 회로도 Load A[7:] Reset D Q A B Y[7:] B[7:] D Q B = Done Clock 26
Lab 3. GCD (Greatest Common Divisor)(Cont.2) 앞장의회로처럼 Load 가 이되었을때, A 와 B 의값이입력 A_hold, B_hold 신호들이 register 에저장 Done 신호는 GCD 가계산되었는지를나타냄 ( 계산되면 ) 이회로는세개의 always 문으로구성 2 개의 input register 값을 A_hold 와 B_hold 에 load 하고 B_hold < A_hold 인지를확인한다. A_hold >= B_hold 이면, A_hold 에서 B_hold 의값을뺀다. B_hold = 이면, GCD 값을찾는다. File name : gcd.v Module name: gcd Input : Clock, Reset, Load [ 각 -bit] A, B [ 각 8-bit] Output : Y [8-bit], Done [-bit] 27
Lab 4. Digital Alarm Clock 입력 clock 은 초단위로동작 AM / PM ( 오전 / 오후 ) 로구분시간 setting 위해 LoadTime = Alarm setting 위해 LoadAlm = Alarm 이동작하기위해 AlarmEnable = Flashing 은 Reset 이인가된후시간을맞출필요가있음을나타냄시간을설정하면 Flashing = File name : alarm_clk.v Module name: alarm_clk Input : Clock_sec, Reset, LoadTime, LoadAlm, Set_AM_PM, Alarm_AM_PM_In, AlarmEnable [ 각 -bit] SetSecs, SetMins, AlarmMinsIn [ 각 6-bit] SetHours [4-bit] AlarmHoursIn [4-bit] Output : AM_PM, Flashing, Alarm [ 각 -bit] Secs, Mins [ 각 6-bit] Hours [4-bit] 28