8.1 데이터경로와제어장치 Chapter 8 데이터경로와제어장치 많은순차회로의설계는다음의두부분으로구성 datapath: data의이동및연산을위한장치 control unit에상태신호제공 control ol unit: datapath th 에서적절한순서로 data 이동및연산을수행할수있도록제어신호제공. 먼저, datapath를설계 다음에, control unit 를설계 데이터경로와제어장치및 산술연산회로 data path control signals status signals control unit 임베디드하드웨어설계 1 2 8.2 수의표현 2진수표현 : B = b n-1 b n-2 b 1 b 0 unsigned integer: 값 = unsigned(b) = signed integer (2's complement 표기법 ): 값 = signed(b) = ( 예 ) B = 10100010 unsigned(b) = 2 7 + 2 5 + 2 1 = 128 + 32 + 2 = 162 signed(b) = 2 7 + 2 5 + 2 1 = 128 + 32 + 2 = 94 또는 = 2 8 + (2 7 + 2 5 + 2 1 ) = 256+162 = 94 ( 참고 ) 10100010 의 2의보수 = 01011110 = 2 6 +2 4 +2 3 +2 2 +2 1 = 64+16+8+4+2 = 94 3 8.3 가감산기와 shifter 가산기설계 방법 1: 논리회로를직접설계 방법 2: + 연산자이용 FPGA 를사용한설계에서는 + 연산자를이용하는것이좋음 합성도구가 carry 전용경로를사용하므로더효율적인합성을수행 가감산기설계 가산기, 감산기별도구현 2 의보수덧셈을사용하여뺄셈수행 A B A B + - MUX sub A B B 의 2 의보수 + MUX 4
가산기 : 논리회로직접설계 가산기 : + 연산자이용 합성결과 합성결과 더효율적 carry 출력이용 LE 당출력 1 개사용 5 6 가감산기 가감산기 (2) 가감산기동작 sub=0 일때가산기 C0, C4 는 carry 입출력 sub=1 일때감산기 C0, C4 는 borrow 입출력 가감산기설계 가산기와감산기이용 A[3:0] B[3:0] adder/ C0 C4 subtractor S[3:0] sub 가감산기설계 - 뺄셈을 2의보수덧셈으로구현 2 의보수 =(1 의보수 ) +1 borrow=0이면 A + (B의 1의보수 )+ 1 borrow=1이면 A + (B의 1의보수 ) + 0 borrowo 출력은가산기의 carry 출력과반대가됨 가산기, 감산기개별적구현가능성 7 가산기 8
가감산기 (3) simulation ( 두설계가같음 ) 가감산기 (4) 합성결과 9 10 Shifter Barrel Shifter 한번에여러비트 ( 가변 ) 를이동시킬수있는조합회로 (shift 횟수 =count) 구현 A shift 1 shift 2 shift 4 shift 8 F count[0] count[1] count[2] count[3] A shifter F 각 shift 회로는 2x1 multiplexer 로구현 A shift 2 A<<2 시프트연산자사용 : A << count 합성도구가구현 컴퓨터정보통신 count 임베디드하드웨어설계 11 8.4 곱셈기 2 진수곱셈 (unsigned) 곱셈기설계 Multiplicand (13) x) 1011 Multiplier(11) 0000 10001011 Product(143) 조합회로설계 : 배열곱셈기 n-1개의 n-bit 가산기를사용 순차회로설계 : 1개의 n-bit 가산기를사용 한번에한자리씩곱셈수행 n 번수행 12
배열곱셈기 n 비트배열곱셈기 n-1 개의 n 비트가산기사용 0을더하는부분은 FA대신에 HA사용가능 0 4-bit adder 4-bit adder B2 0 B1 0 B0 B1 HA FA FA HA B2 B0 B3 4-bit adder 0 FA FA FA HA B3 S7 S6 S5 S4 S3 S2 S1 S0 FA FA FA HA 곱셈연산자사용 :A* B 합성도구가조합회로곱셈기구현컴퓨터정보통신임베디드하드웨어설계 13 S7 S6 S5 S4 S3 S2 S1 S0 14 Carry Save 배열곱셈기 8.5 순차곱셈기 carry를현재줄의윗자리대신에다음줄의윗자리로전달 B1 HA HA HA HA B2 FA FA FA FA B3 FA FA FA FA B0 2 진수곱셈과정 Multiplicand x) 1011 Multiplier Shift Left Multiplicand 100111 0000 100111 10001111 Product 순차곱셈기 한번에 multiplier 1 자리씩곱셈계산 datapath 와 control unit 로구성됨 datapath 를설계하면서필요한제어신호정의 control unit 에서적절한순서로제어신호를공급 S7 S6 S5 S4 S3 S2 S1 S0 15 16
Datapath Algorithm M=multiplier (n-bit) A = multiplicand (n-bit) P = 0 (2n-bit) repeat n times do if (M[0]=1) P H = P H + A shift right M shift right P end Datapath C m-cand A M shift-right + multiplier li n add (bit 0) product shift-right P word1 : multiplicand word2 : multiplier control unit 에서제어신호를공급 P H 는 P의 upper half 특징 multiplicand 를 shift-left 하는것대신에 product 를 shift-right 함 n-bit adder 및 n-bit multiplicand register 사용 17 18 Datapath (product 와 multiplier 를같이사용 ) 순차곱셈기 수정사항 Product 의하위부분에 multiplier 저장 multiplier 레지스터불필요 Algorithm A = multiplicand l (n-bit) Datapath 4 P L = multiplier P H = 0 (P: 2n-bit ) repeat n times do if (M[0]=1) P H = P H + A shift right M shift right P C end m-cand A + (bit 0) n multiplier add product shift-right P 블록다이어그램과내부구조도 start word1 word2 multiplier word1: 피승수 word2: 승수 product: 곱 product ready start : 상태초기화 start: 곱셈수행시작 ready: 계산할준비됨 controller load shift add m0 word1 word2 datapath ready product 19 20
순차곱셈기 controller 의상태도 -/S S8 start/ L S0 m0/a /R S1 S2 L: R: Ready A: Add S: Shift : 입력을레지스터에저장하는제어신호 m0/a -/S S7 S3 shift 또는 add-shift 동작을반복 -/S m0/a in/out 은 S6 m0/a S5 -/S S4 in=1일때out=1이됨을표시 in /out은 in=0 일때 out=1 이됨을표시 표시되지않은출력은 0을표시 순차곱셈기 Verilog description Datapath 는앞의정의참조 21 22 초기상태와곱셈이진행되는 8개상태를최상위비트로구분하도록상태인코딩함 ( 계속 ) 23 24
순차곱셈기 8.5 빠른곱셈기 Simulation 13 x 11 = 143 datapath multiplier 를 product 의하위부분을공유사용 add 결과저장과 shift 를한번에수행 동작 : shift 또는 add-shift m-cand + multiplier n+1 product Shift Add-shift m0 Shift sum Add-shift 25 26 빠른곱셈기 빠른곱셈기 곱셈수행과정 // 5-bit // product <= {1 b0, product[7:1]}; // product <= {sum, product[3:1]}; 27 28
빠른곱셈기 빠른곱셈기 controller 의상태도 L: R: Ready S: Shift AS: Add-Shift start / L S0 / R S1 ( 계속 ) S7 S3 S5 29 30 빠른곱셈기 빠른곱셈기 Simulation 31 32
8.6 카운터를사용한곱셈기제어 카운터를사용한곱셈기제어 곱셈기제어의문제점및해결책 문제점 : 비트수를변경하면제어기를수정해야함 해결책 : 카운터를사용하여제어기설계 start & ~enable () counter word1 word2 enable End load start shift controller add-shift datapath m0 상태도 start/l S0 End '/R Verilog description counter S1 / E End' L: R: Ready S: Shift AS: Add-Shift E: Enable (counter) ready product counter 동작곱셈시작할때에 count 0 각곱셈단계에서 count 증가 counter 출력이 N-1 이면 End 신호출력 33 34 카운터를사용한곱셈기제어 카운터를사용한곱셈기제어 datapath 는앞의빠른곱셈기와같음 counter 신호 35 36
카운터를사용한곱셈기제어 Simulation (N=4) 8.7 signed 곱셈기 Binary notation: B = b n-1 b n-2 b 1 b 0 unsigned(b) = signed(b) = unsigned 곱셈기를 signed 곱셈기로간단하게수정하는방법 최상위 bit가 1이면 multiplicand를더하는것대신에뺄셈을수행 뺄셈을수행할수있도록 datapath를수정 2의보수덧셈 ( 가감산기 ) adder를 signed number에대한덧셈 / 뺄셈에사용할때에는 carry-out은사용하지않음 ( 대신에 n+1비트가감산수행 ) product를 shift-right 시킬때에부호 ( 최상위 bit) 를그대로유지해야함 37 38 signed 곱셈기 signed 곱셈기 datapath adder/subtractor n+1 비트가감산기사용 multiplicand 는 n+1 비트로부호확장 carry 출력은사용하지않음 m-cand n+1 +/- Sub product multiplier m0 Shift Add-shift A B ~B 0 1 adder sum Sub controller 의상태도,Sub S7 start / L S0 / R S1 '/R S5 S3 카운터사용한상태도 '/R start/l S0 End L: R: Ready S: Shift AS: Add-Shift Sub: Sub End' S1 / E m0.end/sub 39 40
signed 곱셈기 signed 곱셈기 adder/subtractor (sub=1일때뺄셈 ) 41 42 signed 곱셈기 signed 곱셈기 : Verilog description simulation (-5)*(-3) ( = 15 counter 는앞의곱셈기와같음 43 44
통합곱셈기 순차나눗셈 - unsigned 통합곱셈기 제어신호에따라서 unsigned 곱셈또는 signed 곱셈수행 두가지곱셈이모두가능하도록 datapath 와 controller 를수정 word1 word2 start ready signed 0: unsigned 1: signed result 45 46 순차나눗셈기 unsigned 나눗셈알고리즘 datapath dividend 와 remainder/quotient 를함께사용 나눗셈후에 dividend 는 remainder/quotient 로대치됨 divisor 를 shift-right 하는것대신에 dividend 를 shift-left 함 n+1 비트 subtractor 사용 divisor - sign dividend sub shift-left Dividend (9-bit) word1 (8-bit), Divisor word1 (4-bit) repeat 4timesdo Shift Left Dividend Diff = Dividend[8:4] {0,Divisor[3:0]} // 5-bit subtraction if (Diff < 0) // Diff[4]==1 Dividend[0] 0 // Quotient = 0 else // Diff[4]==0 Dividend[0] 1, Dividend[8:4] Diff // Quotient = 1 end Remainder Dividend[7:4], Quotient Dividend[3:0] if (Dividend[8:4]>=Divisor) then Overflow 47 48
순차나눗셈기 -signed 나눗셈알고리즘 datapath n+1 비트 adder/subtractor 사용 sub divisor +/- sign dividend load_result shift-left Dividend (8-bit) word1 (8-bit), Divisor word1 (4-bit) repeat 4timesdo Shift Left Dividend if (Dividend and Divisor have same sign) Result = Dividend[8:4] id d[8 {Dii {Divisor[3],Divisor[3:0]} [3]Dii [30]} else Result = Dividend[8:4] + {Divisor[3],Divisor[3:0]} [ ]} if (Dividend and Result have same sign or Result is 0) Dividend[0] 1, Dividend[8:4] Result // Quotient = 1 else Dividend[0] 0 // Quotient = 0 end Remainder Dividend[7:4] if (word1 and word2 have same sign) Quotient Dividend[3:0] else Quotient 2 s 2s complement of Dividend[3:0] 49 컴퓨터정보통신 임베디드하드웨어설계 50