v6.hwp

Similar documents
Microsoft PowerPoint - DSD03_verilog3b.pptx

PowerPoint 프레젠테이션

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

Microsoft Word - logic2005.doc

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

Microsoft PowerPoint - ch11_reg.pptx

Microsoft PowerPoint - DSD03_verilog3a.pptx

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

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

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

9장 순차논리 회로

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

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

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

PowerPoint 프레젠테이션

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

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

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

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

슬라이드 1

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

Microsoft Word - logic2005.doc

Microsoft Word - PLC제어응용-2차시.doc

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

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

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

MAX+plusⅡ를 이용한 설계

Microsoft PowerPoint - Verilog_Summary.ppt

API 매뉴얼

10 장카운터

<4D F736F F F696E74202D20332EB5F0C1F6C5D0C8B8B7CEBFCD20B1B8C7F62E >

chap7_ohp.hwp

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

그룹웨어와 XXXXX 제목 예제

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

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

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

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

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

8장 조합논리 회로의 응용

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

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

ºÎ·ÏB

Microsoft PowerPoint - DSD06b_Cont.pptx

Microsoft PowerPoint - chap06-1Array.ppt

歯Chap1-Chap2.PDF

. 고성능마이크로프로세서 LU 와레지스터 파일의구조 (2.). 직접디지털주파수합성기 (FS) 의구조 3. 고성능마이크로프로세서부동소수점연산기 (Floating-Point Unit) 구조 (2) (2.) (2.) 2. 암호화를위한 VLSI 구조와설계의개요 (2.) 다음참

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

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

T100MD+

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

BMP 파일 처리

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

PowerPoint 프레젠테이션

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

발신자 목적지 발신자 목적지 발신자 목적지 공격자 발신자 목적지 발신자 목적지 공격자 공격자

ADP-2480

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

Microsoft PowerPoint - es-arduino-lecture-03

3. 다음은카르노맵의표이다. 논리식을간략화한것은? < 나 > 4. 다음카르노맵을간략화시킨결과는? < >

PowerPoint 프레젠테이션

OCW_C언어 기초

PowerPoint Presentation

프로그램카운터 (Program Counter) 명령레지스터 (Instruction Register) 누산기 (AC: Accumulator) 상태레지스터 (Status Register) PSWR(Program Status Word Register) 메모리주소레지스터 (M

CAN-fly Quick Manual

Microsoft PowerPoint - chap04-연산자.pptx

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

PowerPoint 프레젠테이션

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

PowerPoint 프레젠테이션

1. 조합 (combinational) 논리회로에대해설명한것은? < 가 > 가출력신호가입력신호에의해서만결정되는논리회로이다. 나플립플롭과같은기억소자를갖고있는논리회로이다. 다출력신호가입력신호와현재의논리회로의상태에의해결정되는논리회로이다. 라기억능력을가진논리회로이다.

hwp

PowerPoint 프레젠테이션

Microsoft Word - Lab.4

Microsoft PowerPoint - ch07 - 포인터 pm0415

5_03.hwp

실험 5

PowerPoint Template

Microsoft PowerPoint - verilog문법new.ppt

디지털공학 5판 7-8장

Microsoft PowerPoint - DSD02_verilog2a.pptx

PowerPoint Template

PowerPoint 프레젠테이션

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

PowerPoint Presentation

Microsoft PowerPoint - Chapter 8_USART Serial Communication

PowerPoint 프레젠테이션

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-2pointer.ppt

(b) 미분기 (c) 적분기 그림 6.1. 연산증폭기연산응용회로

Microsoft PowerPoint - chap05-제어문.pptx

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

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

RVC Robot Vaccum Cleaner

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

Transcription:

93 6 장순차회로모델링 이장에서는앞에서배운여러가지모델링방법에대한지식을바탕으로많이사용되는기본적인순차회로블록들의모델링과순차회로설계방법에대해서배운다. 6. 레지스터 레지스터는 n-bit 데이터를저장하는기억소자이다. 데이터의저장은클럭에동기가되어이루어진다. 그림 6.은전형적인레지스터의블록도와동작표이다. register D D D2 D3 Load Reset Q Q Q2 Q3 Reset Load CLK x x Qi Qi Di 그림 6. 4 비트레지스터 이레지스터는클럭이외에두개의제어신호를가지고있다. load는동기식제어신호로서클럭의상승에지에서이신호가 이면 4비트데이터 D가 4비트출력 Q에저장된다. reset은비동기제어신호로서이신호가 이면출력은클럭과관계없이즉시 이된다. 나머지경우에는출력은그대로유지된다. 예 6.은이레지스터에대한동작적모델이다. 예 6. reset과 load 제어입력을가진 4비트레지스터 module register (qout, data, load, reset, clock); output [3:] qout; input [3:] data; input load, reset, clock; reg [3:] qout; always @ (posedge clock or negedge reset) begin

94 if (~reset) qout <= 4'b; else if (load) qout <= data; module // reset // load // 나머지경우에는 hold 여기에서 reset은 일때에동작하는비동기제어신호이므로감지목록에 negedge reset 이포함된다. load는동기식제어신호이므로감지목록에는포함되지않는다. 만약에 reset이 일때에동작하는비동기제어신호라면 posedge reset이감지목록에포함된다. 쉬프트레지스터 4장에서 4비트쉬프트레지스터에대한모델을이미보았다. 예 6.2는비동기 Reset 제어신호를포함한 4비트쉬프트레지스터의모델이다. 여기에서할당문은각플립플롭의병렬동작을나타내기위해서비블록킹할당문을사용하였다. 예 6.2 쉬프트레지스터 module shiftreg(sout, sin, reset, clock); output sout; // serial out input sin, reset, clock; // serial in 등 reg [3: ] qout; assign sout = qout[]; always @ (negedge reset or posedge clock) begin if (reset == 'b) qout <= 4'b; // reset else begin qout[3] <= sin; // shift right qout[2] <= qout[3]; qout[] <= qout[2]; qout[] <= qout[]; module 예 6.2의모델에서 4비트의데이터의이동은동일한동작을동시에수행한다. 이러한동작은벡터자료형및벡터연산을사용하면더욱간결하게기술할수있다. 예 6.3

95 은예 6.2 를벡터자료형과연산을사용하여기술한것이다. 예 6.3 쉬프트레지스터 - 벡터자료형사용 module shiftreg(sout, sin, reset, clock); output sout; // serial out input sin, reset, clock; // serial in reg [3: ] qout; assign sout = qout[]; always @ (negedge reset or posedge clock) begin if (reset == 'b) qout <= 4'b; // reset else qout <= { sin, qout[3:] }; // shift left module 양방향쉬프트레지스터예 6.3의쉬프트레지스터는레지스터값이한자리씩아래자리로이동한다. 우리가비트를표기할때에아래자리가오른쪽에위치하므로이동작은오른쪽쉬프트동작이된다. 왼쪽쉬프트동작은값이한자리씩윗자리로이동하는것이다. 양방향쉬프트레지스터는오른쪽쉬프트와왼쪽쉬프트동작을선택적으로할수있는레지스터를말한다. 그림 6.2는병렬로드기능을갖는양방향쉬프트레지스터의블록도와동작표이다. 2 LSBin D D D2 D3 Q Q Q2 Q3 MSBin Sel Reset Reset Sel CLK xx 동작 reset 변화없음 shift right shift left 병렬 load 그림 6.2 양방향쉬프트레지스터 이쉬프트레지스터에서제어신호는모두동기식제어신호로서클럭의상승에지에서동작을한다. reset은출력을 으로만들며, sel은 2비트동기식제어신호로서값에따라서왼쪽쉬프트, 오른쪽쉬프트, 병렬로드및변화없음동작을수행한다. 오른쪽

96 쉬프트동작에서는최상위비트가 MSBin 입력값으로채워지며, 왼쪽쉬프트동작에서는최하위비트가 LSBin 입력값으로채워진다. 예 6.4는그림 6.2의양방향쉬프트레지스터에대한기술이다. 예 6.4 병렬로드기능이있는양방향쉬프트레지스터 module bishiftreg(qout, data, MSBin, LSBin, sel, reset, clock); output [3: ] qout; // parallel out output MSBout, LSBout; // serial out input [3:] data; // parallel in input MSBin, LSBin; // serial in input [:] sel; // function select input clock, reset; reg [3:] qout; always @(posedge clock) begin if (reset==) qout <= ; else begin case (sel) : qout <= qout; // hold : qout <= {MSBin, qout[3:]}; // shift right 2: qout <= {qout[2:], LSBin}; // shift left 3: qout <= data; // parallel Load case module 예 6.4에서선택신호에따른동작을 case 문을사용하여기술하였다. 표의동작을그대로기술하였기때문에 qout <= qout 문장이포함된 sel 신호가 인경우를포함하였으나출력의변화가없는경우에는기술하지않아도되므로 sel 신호가 인경우는포함하지않아도된다. 6.2 카운터 카운터는매클럭마다정해진순서에따라서상태값이변하는레지스터를말한다. 카운터는대개값이증가또는감소하는순서로변한다. 카운터의모든상태가클럭에

97 가되어변하면동기식카운터라고하고그렇지않으면비동기식카운터라고한다. 그림 6.3은 4비트동기식 2진카운터의블록도와동작표이다. counter en reset Q Q Q2 Q3 reset enable CLK x x Qi 변화없음증가 그림 6.3 4 비트동기식 2 진카운터 이카운터는 부터 까지의 6개의상태를가지며순서대로변한다. 의다음상태는 이된다. 두개의제어신호가있는데 reset은출력을 으로만드는비동기식제어신호이고 enable은동기식제어신호로서클럭의상승에지에서이신호가 이면카운터동작을수행하고그렇지않으면출력에변화가없다. 예 6.5는이카운터에대한동작적모델이다. 예 6.5 덧셈을사용한동기식 2진카운터 module counter(qout, enable, reset, clock); output [3:] qout; input enable, reset, clock; reg [3:] qout; always @(negedge reset or posedge clock) begin if (~reset) qout <= ; // 비동기 reset else if (enable) qout <= qout + ; // 증가 module 예 6.5에서카운터상태가증가하는동작을단순히 을더하는것으로기술하였다. 출력이 4비트이어서캐리가무시되므로 에서 으로바뀌는동작도 을더하는것으로기술할수있다. 이모델은합성도구에의해서미리설계된카운터를사용하여합성될수있다. 동기식카운터의실제구현은덧셈연산을사용하지않고논리연산만으로구현된다. 동기식카운터의각자리는아래자리가전부 일때에바뀐다. 예를들어서

98 과 의다음상태가각각 과 이며 bit 3은 bit 2부터 bit 까지가모두 일때에다음상태에서값이바뀐다. 예 6.6은이러한동작을기술한것이다. 예 6.6 동기식 2진카운터 module counter2(qout, enable, reset, clock); output [3:] qout; input enable, reset, clock; reg [3:] qout; always @(negedge reset or posedge clock) begin if (~reset) qout <= ; else if (enable) begin qout[] <= ~qout[]; if (qout[] == 'b) qout[] <= ~qout[]; if (qout[:] == 2'b) qout[2] <= ~qout[2]; if (qout[2:] == 3'b) qout[3] <= ~qout[3]; module 증감카운터상태가증가또는감소될수있는기능을모두가지고있는카운터를증감카운터라고한다. 그림 6.4는증감카운터의블록도와동작표이며예 6.6은이증감카운터의동작을기술한것이다. up down reset Q Q Q2 Q3 reset up down CLK Qi x x x 변화없음감소증가변화없음 그림 6.4 증감카운터

99 예 6.6 증감카운터 module updown_counter(qout, up_dn, reset, clock); output [3:] qout; input [:] up_dn; input reset, clock; reg [3:] qout; always @ (negedge clock or negedge reset) begin if (reset == ) qout <= 4'b; // reset else if (up_dn == 2'b) qout <= qout + ; // up else if (up_dn == 2'b) qout <= qout - ; // down module 여기에서감소동작은뺄셈을사용하여기술하였으며두제어신호 up과 down은 2비트신호 up_dn으로함께나타내었다. 일반적으로카운터는병렬로드기능을포함한것이많이사용되며그림 6.5는이러한병렬로드증감카운터의블록도와동작표이다. counter D D D2 D3 load en up reset Q Q Q2 Q3 reset load enable up CLK Qi x x x x x x 변화없음감소증가병렬로드 그림 6.5 병렬로드증감카운터 이카운터에서의 reset 신호는동기식동작을한다. 예 6.7은이카운터의동작을기술한것이다. 그림 6.5의동작표에서제어신호가 reset, load, enable, up의순서로동작이적용되므로예 6.7에서제어신호를이순서로기술하였다.

예 6.7 병렬로드증감카운터 module updown_counter2(qout, data, load, up, enable, reset, clock); output [3:] qout; input load, up, enable, reset, clock; input [3:] data; reg [3:] qout; always @(posedge clock) begin if (reset) qout <= 4'b; else if (load) qout <= data; else if (enable) begin if (up) qout <= qout + ; else qout <= qout - ; module // reset // load // enable // up // down 모듈로 N 카운터상태의수가 N개인카운터를모듈로 N 카운터라고하며대개 부터 N-까지의 N 개의상태를갖는다. 상태가 부터 9까지를갖는카운터를 진카운터라고한다. 예 6.8은동기식 reset 신호를갖는 진카운터를기술한것이다. 예 6.8 동기식 진카운터 module counter(qout, enable, reset, clock); output [3:] qout; input enable, reset, clock; reg [3:] qout; always @(posedge clock) begin if (~reset) qout <= ; else if (enable) begin if (qout==9) qout <= ; else qout <= qout + ; module

4비트이진카운터를사용한여러가지카운터의구현미리설계된범용카운터를사용하여다양한카운터를설계할수있다. 그림 6.6은터미널카운트출력 TC와동기식 reset 제어신호를갖는 4비트이진카운터의블록도이다. counter en reset Q Q Q2 Q3 TC 그림 6.6 터미널카운터출력을가진이진카운터 터미널카운트출력 TC는 enable이 일때에이진카운터의마지막상태에서 이된다. TC 출력은이진카운터를직렬로연결하여크기가큰카운터를구성하는데이용될수있으며, 동기식 reset 제어신호는모듈로 N 카운터를구성하는데이용될수있다. 예 6.9는그림 6.6의카운터에대한기술이다. 예 6.9 캐리출력을갖는 4비트이진카운터 // counter with synchronous reset module counter4(qout, tc, enable, reset, clock); output [3:] qout; output tc; input enable, reset, clock; reg [3:] qout; always @(posedge clock) begin if (~reset) qout <= ; else if (enable) qout <= qout + ; assign tc = (qout == 4'b) & enable; module 예 6. 은예 6.9 의 4 비트이진카운터를사용하여 진카운터를구성한예이다. 상

2 태가 9일때 reset 신호가 이되도록하여다음상태가 이되도록하였다. 그리고출력 tc를사용하지않으므로이에해당하는부분은빈칸으로두었다. 예 6. 이진카운터를사용한 진카운터 // modulo- counter module counter(qout, tc, enable, reset, clock); output [3:] qout; input enable, reset, clock; wire rst; counter4 u (qout,,enable, ~rst, clock); assign rst = ~reset (qout == 9); module 여러개의 4비트이진카운터를사용하여크기가큰이진카운터를구현할수있다. 그림 6.7은 4개의 4비트이진카운터를사용하여 6비트카운터를구현한것으로서높은자리의카운터는아래의모든자리의출력이 이되어야카운트동작을수행하므로이를위해서터미널카운트출력 tc는높은자리의이진카운터의 enable 신호로사용되었다. q-q3 q4-q7 q8-q q2-q5 enable clock reset en q-q3 tc reset en q-q3 tc reset en q-q3 tc reset en q-q3 tc reset tc 그림 6.7 6 비트카운터 예 6.은 6비트카운터를 4비트이진카운터를사용한구조적모델링으로기술한것으로서내부신호 enable, enable2, enable3는카운터의 tc 출력을다음카운터의 enable 입력에연결하기위해서사용되었다.

3 예 6. 4비트이진카운터를사용한 6비트카운터 // modulo- counter module counter6(qout, tc, enable, reset, clock); output [5:] qout; input enable, reset, clock; wire enable, enable2, enable3; counter4 u (qout[3:],enable, enable, reset, clock); counter4 u2 (qout[7:4],enable2,enable, reset, clock); counter4 u3 (qout[:8],enable3,enable2, reset, clock); counter4 u4 (qout[5:2],tc,enable3, reset, clock); module 6.3 순차회로와상태도 순차회로의설계현재의입력에의해서출력이정해지는조합회로와는달리순차회로의출력은현재의입력뿐만아니라내부의상태에의해서정해진다. 순차회로의상태는현재상태와현재입력에따라서다음상태가정해진다. 이처럼순차회로의상태는입력의변화에따라서계속적으로영향을받으므로과거의입력들을반영한것이라고할수있다. input output 조합회로 next state memory present state 그림 6.8 순차회로의구성 순차회로는상태가변화되는시점이클럭과동기가되는동기식순차회로와그렇지않은비동기식순차회로로구분이된다. 비동기식순차회로는설계하기가어렵고여러가지문제점을가지고있기때문에대부분의순차회로는동기식으로설계된다. 앞으로소개하는순차회로는동기식순차회로에국한하여다루기로한다. 동기식순차회로에서상태의변화는클럭의특정에지에서발생한다. 현재상태의

4 변화는다음상태를변화시킬수있으며클럭의에지에서다음상태값이현재상태로된다. 메모리는대개에지트리거플립플롭을사용하는데연속적인상태변화를처리하기위해서는클럭주기 T CLK 는다음의조건을만족해야한다. T CLK > t p + t comb + t su 여기서, tp와 t su 는플립플롭출력의최대지연시간과플립플롭입력의최소셋업시간이고 t comb 는조합회로의입출력사이의최대지연시간이다. 밀리순차회로와무어순차회로순차회로는밀리 (Mealy) 회로와무어 (Moore) 회로의두가지형태가있다. 밀리회로는순차회로의출력이현재상태와입력에의해서정해지며무어회로는출력이현재상태에의해서만결정된다. 같은동작을수행하는회로를무어회로로설계할경우에밀리회로에비해서상태수가많아지지만조합회로부분은간단해진다. 그리고출력이상태에의해서만정해지므로클럭에동기가되어변하여글리치 (glitch) 가없게된다. 밀리회로의출력은입력이클럭과비동기일경우에출력도클럭과비동기로변할수있으며입력이클럭에동기되는신호일지라고입력과상태가동시에변하는경우에입력과상태변화와의미세한시차로인하여글리치가여전히발생할수있다. 그림 6.9는밀리회로와무어회로의구성도이다. Mealy 회로 input next state 조합회로 state output 조합회로 output clock input next state 조합회로 Moore 회로 state output 조합회로 output clock 그림 6.9 밀리회로와무어회로

5 상태도순차회로의동작은타이밍도, 상태도 (state diagram), 상태표 (state table), 알고리즘챠트등에의해서나타낼수있다. 동작의외형적인기술은타이밍도를많이사용하지만설계를위해서는상태도, 상태표, 또는알고리즘챠트로표현되어야한다. 이세가지방법은서로연관이되어있으며여기에서는상태도만다루기로한다. 상태도의기본표기법은그림 6.와같이상태를원으로표시하고현재상태에서다음상태로의전이는입력이표시된화살표로상태들을연결하여표시한다. 그리고출력은밀리회로에서는화살표에표시한입력과함께, 무어회로에서는원안의상태와함께표시한다. 그림 6.은밀리회로와무어회로의상태도의예이다. / Mealy 회로 / / Moore 회로 그림 6. 상태도의기본표기법 그림 6. 상태도의예 (a) 밀리회로 (b) 무어회로 상태도에대한모델링순차회로에대한 Verilog 모델링은크게상태레지스터, 다음상태조합회로, 출력조합회로의세부분으로구성된다. 예 6.2는그림 6. (a) 의상태도에대한 Verilog 모델링으로서다음상태조합회로와출력조합회로부분을함께기술한예이다.

6 예 6.2 순차회로의 Verilog 모델링 - 다음상태와출력을함께기술 module mealy(out, state, in, reset, clock); output out; output [:] state; input in, reset, clock; reg out; reg [:] state, nextstate; always @(posedge clock or negedge reset) begin if (~reset) state <= 2'b; else state <= nextstate; always @(state or in) begin out = ; case (state) 2'b: if (in==) nextstate = 2'b; else nextstate = 2'b; 2'b: if (in==) begin nextstate = 2'b; out = ; else nextstate = 2'b; 2'b: if (in==) begin nextstate = 2'b; out = ; else nextstate = 2'b; 2'b: if (in==) begin nextstate = 2'b; out = ; else nextstate = 2'b; default: nextstate = 2'bxx; case module 예 6.2에서상태레지스터는클럭의상승에지에서다음상태가현재상태로저장되며 reset 신호가 일때에초기상태값이지정된다. case문을사용하여상태와입력에따라서다음상태와출력이결정되는동작을기술하였는데출력은처음에 으로초기화하고 case문에서는출력이 이되는경우만기술하였다. 예 6.3은그림 6. (a) 의상태도를다음상태조합회로와출력조합회로를분리하여기술한예이다. 다음상태조합회로는 case문을사용하여기술하였으며출력조합회로는 assign을사용한연속할당문으로기술하였다.

7 예 6.3 밀리순차회로의 Verilog 모델링 - 다음상태와출력을분리하여기술 module mealy2(out, state, in, reset, clock); output out; output [:] state; input in, reset, clock; reg [:] state, nextstate; always @(posedge clock or negedge reset) begin if (~reset) state <= 2'b; else state <= nextstate; always @(state or in) begin case (state) 2'b: if (in==) nextstate = 2'b; else nextstate = 2'b; 2'b: if (in==) nextstate = 2'b; else nextstate = 2'b; 2'b: if (in==) nextstate = 2'b; else nextstate = 2'b; 2'b: if (in==) nextstate = 2'b; else nextstate = 2'b; default: nextstate = 2'bxx; case assign out = (state==2'b)&&(in==) (state==2'b) && (in==) (state==2'b)&&(in==); module 그림 6. (b) 의무어회로상태도와이와같이기술할수있는데출력에대한식이입력신호가없이상태만으로표시된다.

8 6.4 맨체스터코드변환기 데이터를직렬전송을할때에사용되는코딩방식에는다음과같은네가지방식이있다. NRZ (non-return-to-zero) 코드 : 입력비트값을그대로전송하는방식이다. 같은값이연속적으로전송될경우에코드의변화가없다. NRZI (non-return-to-zero invert-on-ones) 코드 : 입력비트값이 이면코드의변화가없으며 이면코드값을바꾸어보낸다. 이연속적으로전송될경우에코드의변화가없다. RZ (return-to-zero) 코드 : 입력비트값이 이면코드는 을전송하고 이면비트시간의전반부는 을후반부는 을전송한다. 이처럼코드는비트시간의후반부에는항상 이된다. 비트시간은한비트가전송되는시간을말한다. 이연속적으로전송될경우에는코드의변화가없다. 맨체스터 (Manchester) 코드 : 입력비트값이 이면비트시간의전반부는 을, 후반부는 을전송하고 이면비트시간의전반부는 을, 후반부는 을전송한다. 이방식은비트시간마다코드의변화가발생한다. 그림 6.2 직렬전송코딩방식들의파형 비트스트림 (bit stream) 의각비트들간의경계는클럭신호에의해서구분된다. 맨체스터코딩으로비트스트림을직렬전송하면비트시간마다코드의변화가발생하므로클럭신호를별도로보내지않더라도수신측에서 PLL(phase locked loop) 회로에의해서클럭신호를얻을수있다. 맨체스터코드변환기는비트시간마다두번의변화가발생하므로비트스트림용클럭의주파수의 2배의주파수를갖는클럭신호를필요로한다.

9 밀리회로구현맨체스터코드변환기에대한상태도는그림 6.3과같이표현된다. 초기상태 S에서입력이 이면출력을 으로만들고상태 S로전이한후에출력을 로만들고다시상태 S로전이한다. 입력이 이면출력을 로만들고상태 S2로전이한후출력을 으로만들고다시상태를 S로전이한다. s2 / / s / / s 그림 6.3 맨체스터코드변환기의밀리회로상태도 예 6.4는이상태도를기술한것이다. 여기에서 parameter 키워드를사용하여상태 S, S, S2에 2진수를할당하고동작을기술할때에는상태이름을그대로사용하였다. 이러한기술은상태할당값을변경하고자할때에 parameter문만고치면되므로편리하다. 예 6.4 맨체스터코드변환기 - 밀리회로구현 module Manchester_Mealy(out, in, reset, clock, state); output out; output [:] state; input in, reset, clock; reg [:] state, next_state; parameter S =, S =, S2 = 2; always @(posedge clock or negedge reset) begin if (reset==) state <= S; // initial state else state <= next_state; // next state combinational logic always @(state or in) begin case (state) S: if (in == ) next_state = S; else if (in == ) next_state = S2; else next_state = 2'bx;

S: next_state = S; S2: next_state = S; default: next_state = 2'bx; case // output combinational logic assign out = (state==s) && (in==) (state==s) && (in==); module 그림 6.4는예 6.4의구현에대한시뮬레이션결과를나타내는파형이다. 출력파형에서원으로둘러싼부분은글리치이다. 글리치는입력과상태의변화가일치하지않음으로인해서발생한다. 그림 6.4 밀리회로맨체스터코드변환기시뮬레이션결과 출력의글리치를없애려면그림 6.5의회로와같이레지스터를사용하여밀리회로의출력을클럭에동기시켜서출력시킨다. 이회로의출력은원래의출력에서한클럭씩지연이되어나타난다. Mealy 회로 output register registered output clock 그림 6.5 글리치를없애기위한출력회로 무어회로구현 맨체스터코드변환기를무어회로로구현하기위한상태도는그림 6.6과같이표현된다. 입력이 이면상태가 S과 S2로순서대로전이하며상태 S에서출력이 가,

상태 S2에서출력이 이된다. 입력이 이면상태가 S3과 S의순서대로전이하며상태 S3에서출력이 이, 상태 S에서출력이 가된다. 초기상태는 S이며상태가 S 또는 S2에서새로운비트값을입력받는다. s / s / s3 s2 / / 그림 6.6 맨체스터코드변환기의무어회로상태도 예 6.5는이상태도를기술한것이다. 상태 S와 S2는다음상태가같으므로함께기술하였다. 예 6.5 맨체스터코드변환기 - 무어회로구현 module Manchester_Moore(out, in, reset, clock, state); output out; output [:] state; input in, reset, clock; reg [:] state, next_state; parameter S =, S =, S2 = 2, S3 = 3; always @(posedge clock or negedge reset) begin if (reset==) state <= S; // initial state else state <= next_state; // next state combinational logic always @(state or in) begin case (state) S, S2: if (in == ) next_state = S; else next_state = S3; S: next_state = S2; S3: next_state = S; default: next_state = 2'bx; case

2 // output combinational logic assign out = (state==s2) (state==s3); module 그림 6.7는예 6.5의구현에대한시뮬레이션결과를나타내는파형이다. 이파형에서출력에는글리치가발생하지않지만원으로표시한것과같이출력이입력보다한클럭뒤에나타남을확인할수있다. 이결과는밀리회로의출력을클럭에동기시킨것과같다. 그림 6.7 무어회로맨체스터코드변환기시뮬레이션결과 6.5 선형피드백쉬프트레지스터 선형피드백쉬프트레지스터 (linear feedback shift register: LFSR) 은출력의일부가 XOR 또는 XNOR게이트를통하여입력에피드백되는쉬프트레지스터이다. LFSR은오류검출에사용되는 CRC(cyclic redundancy check) 코드생성기, 의사난수발생기 (pseudo random pattern generator), 암호화등에사용된다. 의사난수발생기는회로의동작검사를위한스티뮬러스패턴을생성하는데사용될수있다. 그림 6.8은한개의출력을여러입력에 XOR 게이트를통하여피드백시키는 autonomous LFSR로서의사난수를발생시키는데에사용된다. 이회로에서최상위비트 Y(N-) 은 Y() 를피드백입력받고 Y(k) (k < N-) 는 C k 가 이면 Y(k+) 를입력받고 Ck가 이면 Y(k+) 과 Y() 의 XOR 연산결과를입력받는다. 여기서 C k 는피드백여부를나타내며탭계수라고부른다. LFSR은용도에따라서탭계수와초기상태가정해진다. 예 6.6은 8비트 LFSR 회로를모델링한예이다.

3 그림 6.8 한출력을여러입력에피드백시키는 LFSR 예 6.6 LFSR 회로 module LFSR(Y, reset, clock); parameter initial_state = 8'b_; // 9h parameter [7:] C = 7'b_; // coefficient input reset, clock; output [7:] Y; reg [7:] Y; always @ (posedge clock) begin if (!reset) // Active-low reset to initial state Y <= initial_state; else begin Y[7] <= Y[]; Y[6] <= C[7]? Y[7] ^ Y[] : Y[7]; Y[5] <= C[6]? Y[6] ^ Y[] : Y[6]; Y[4] <= C[5]? Y[5] ^ Y[] : Y[5]; Y[3] <= C[4]? Y[4] ^ Y[] : Y[4]; Y[2] <= C[3]? Y[3] ^ Y[] : Y[3]; Y[] <= C[2]? Y[2] ^ Y[] : Y[2]; Y[] <= C[]? Y[] ^ Y[] : Y[]; module

4 예 6.6의모델링은비슷한과정이반복되므로예 6.7과같이반복문을사용하여더간단하게기술할수있으며이모델링에서는쉬프트레지스터의비트수도재지정될수있도록 parameter를사용하여나타낼수있다. 예 6.7 반복문을사용한 LFSR 회로 module LFSR2(Y, reset, clock); parameter N = 8; // length parameter initial_state = 8'b_; // 9h parameter [N-:] C = 7'b_; // coefficient input reset, clock; output [N-:] Y; reg [N-:] Y; integer k; always @ (posedge clock) begin if (!reset) // Active-low reset to initial state Y <= initial_state; else begin Y[N-] <= Y[]; for (k = ; k <= N-; k=k+) Y[k-] <= C[k]? Y[k] ^ Y[] : Y[k]; module 그림 6.9 은설계한회로가동작되는예를나타낸것이다. 그림 6.9 LFSR 의데이터이동

5 6.6 레지스터파일 레지스터파일 (register file) 은여러개의레지스터들을포함한회로로서레지스터들이외에레지스터에대한읽기, 쓰기를위한추가적인회로로구성되어있다. 레지스터파일은포함한레지스터들에대한읽기와쓰기를동시에수행할수있다. 그림 6.2은 6개의레지스터로구성된레지스터파일의블록도로서동시에두개의레지스터값을읽어서출력하고, 한개의레지스터에입력값을저장하는동작을수행할수있다. 4 4 4 32 register file raddr dout raddr2 waddr dout2 din wen 32 32 그림 6.2 6 개의레지스터를포함한레지스터파일의블록도 레지스터파일내의레지스터는 4비트주소로선택되며 raddr과 raddr2는데이터를읽을두레지스터의주소입력이며, waddr는데이터를저장할레지스터의주소입력이다. dout과 dout2는주소 raddr과 raddr2이지정하는레지스터의값을출력한다. 데이터의저장은클럭에동기되어이루어진다. wen (write enable) 신호는데이터저장을활성화하는신호로서입력데이터 din은 wen이 일때의클럭의상승에지에서 waddr 이지정하는레지스터에저장된다. 이러한동작을수행하는레지스터파일은그림 6.2과같이구성될수있다. 6개의레지스터의출력은두개의멀티플렉서의입력에연결되는주소 raddr과 raddr2에의해서선택된레지스터의출력이두멀티플렉서의출력으로전달되어동시에두레지스터의값을읽을수있다. 입력데이터는모든레지스터의입력에연결되어있다. 그렇지만디코더를통하여 waddr에의해서선택된하나의레지스터만인에이블이되어클럭에동기되어입력데이터를저장할수있으며 wen이디스에이블되면아무레지스터도인에이블되지않는다.

6 din 32 decoder en D R Q mux 4 waddr en D R Q en D R5 Q dout dout2 wen CLK raddr raddr2 그림 6.2 레지스터파일의내부구성도 예 6.8은그림 6.2과같은구성의레지스터파일을설계한예이다. 이설계에서디코더와멀티플렉서를명시적으로사용하지는않았지만두동작에대한기술이포함되어있다. 예 6.8 레지스터파일 module regfile(dout, dout2, din, raddr, raddr2, waddr, wen, clock); output [3:] dout, dout2; input [3:] din; input [3:] raddr, raddr2, waddr; input wen, clock; reg [3:] reg_file [:5]; // 32 bit x 6 word memory declaration reg [3:] dout, dout2; integer i; // write always @(posedge clock) begin for (i=; i<6; i=i+) begin if (wen & (waddr==i)) reg_file[i] <= din; // read always @(raddr or raddr2 or reg_file[] or... or reg_file[5]) begin dout = 32'bx; dout2 = 32'bx;

7 for (i=; i<6; i=i+) begin if (raddr==i) dout = reg_file[i]; if (raddr2==i) dout2 = reg_file[i]; module 레지스터파일은예 6.9와같이주소신호를배열의첨자로사용하여기술할수있으며이러한기술은훨씬간단하지만논리합성도구에따라서합성되지못할수도있다. 예 6.9 레지스터파일 module register_file(dout, dout2, din, raddr, raddr2, waddr, wen, clock); output [3:] dout, dout2; input [3:] din; input [3:] raddr, raddr2, waddr; input wen, clock; reg [3:] reg_file [:5]; // 32 bit x 6 word memory declaration assign dout = reg_file[raddr]; // read assign dout2 = reg_file[raddr2]; always @ (posedge clock) begin // write if (wen) reg_file[waddr] <= din; module 이러한레지스터파일은그림 6.22와같이 ALU와연결하여두레지스터값을동시에읽어서연산을수행한후연산수행결과를같은클럭사이클의끝에서저장할수있도록하는데사용될수있다.

8 register file Raddr Raddr2 Waddr DataIn WEN DataOut DataOut2 CLK ALU 그림 6.22 ALU 에연결된레지스터파일