| 태그 'adder'에 해당되는 글 1건 |
| QuartusII로 구현한 32bit Ripple Carry Adder |
Tech 07/05/16 19:02 ( Translate this page  )
글 주소 : https://ohyung.net/383
컴구조 시간에 나눠준것으로 대충;;;

소스 코드 타입 : VHDL
/*-----------------------------------------------------------------------
    Title : 32-bit Ripple Carry Adder
      File  : rca_32bit.v
-----------------------------------------------------------------------
      Author     : Oh, Hyung-Tak
      Organization : Kwangwoon university
      Created    : 2007.4.30
      Last update  : 2007.5.07
      Platform    : WINDOWS XP
      Simulators  : Quartus II 6.0 web
      Synthesizers : Quartus II 6.0 web
      Target     : Cyclone II:AUTO
-----------------------------------------------------------------------
      Descriptions       : 32 bit RCA
      Revisions Number    : 1
      Version          : 1.0
      Date of change      : 2007.5.06
      Modifier          : Oh, Hyung-Tak ( ohyung )
      Description of change : 32-bit에 맞춰 선연결 
-------------------------------------------------------------------------
*/

// 32-bit ripple carry adder //
module rca_32bit(out_carry, out_sum, in_a, in_b, in_carry);
    input      in_carry;            // 인풋 케리 선언
    input  [31:0] in_a, in_b;     // 인풋 변수 a , b
    output      out_carry;     // 케리아웃 발생시 출력
    output [31:0] out_sum;      // 덧셈 연산 수행의 결과
     
    wire  [31:0] carry;      // 32-bit 내부에서 발생하는 carry 를 연결해 주기 위해서 선언함
     
    assign out_carry = carry[31];  // MSB carry 를 케리아웃과 연결해줌
 
    /*  총 32개의 full_adder unit 들을 나열해주고 입출력 선들을 연결  */
    
    full_adder u0  (out_sum[0],  carry[0],  in_a[0],  in_b[0],  in_carry );
    // 1~30 번을 연결한다. 
    full_adder u1 (out_sum[1],  carry[1],  in_a[1],  in_b[1],  carry[0]);
    full_adder u2 (out_sum[2],  carry[2],  in_a[2],  in_b[2],  carry[1]);
    full_adder u3 (out_sum[3],  carry[3],  in_a[3],  in_b[3],  carry[2]);
    full_adder u4 (out_sum[4],  carry[4],  in_a[4],  in_b[4],  carry[3]);
    full_adder u5 (out_sum[5],  carry[5],  in_a[5],  in_b[5],  carry[4]);
    full_adder u6 (out_sum[6],  carry[6],  in_a[6],  in_b[6],  carry[5]);
    full_adder u7 (out_sum[7],  carry[7],  in_a[7],  in_b[7],  carry[6]);
    full_adder u8 (out_sum[8],  carry[8],  in_a[8],  in_b[8],  carry[7]);
    full_adder u9 (out_sum[9],  carry[9],  in_a[9],  in_b[9],  carry[8]);
    full_adder u10 (out_sum[10],  carry[10],  in_a[10],  in_b[10],  carry[9]);
    full_adder u11 (out_sum[11],  carry[11],  in_a[11],  in_b[11],  carry[10]);
    full_adder u12 (out_sum[12],  carry[12],  in_a[12],  in_b[12],  carry[11]);
    full_adder u13 (out_sum[13],  carry[13],  in_a[13],  in_b[13],  carry[12]);
    full_adder u14 (out_sum[14],  carry[14],  in_a[14],  in_b[14],  carry[13]);
    full_adder u15 (out_sum[15],  carry[15],  in_a[15],  in_b[15],  carry[14]);
    full_adder u16 (out_sum[16],  carry[16],  in_a[16],  in_b[16],  carry[15]);
    full_adder u17 (out_sum[17],  carry[17],  in_a[17],  in_b[17],  carry[16]);
    full_adder u18 (out_sum[18],  carry[18],  in_a[18],  in_b[18],  carry[17]);
    full_adder u19 (out_sum[19],  carry[19],  in_a[19],  in_b[19],  carry[18]);
    full_adder u20 (out_sum[20],  carry[20],  in_a[20],  in_b[20],  carry[19]);
    full_adder u21 (out_sum[21],  carry[21],  in_a[21],  in_b[21],  carry[20]);
    full_adder u22 (out_sum[22],  carry[22],  in_a[22],  in_b[22],  carry[21]);
    full_adder u23 (out_sum[23],  carry[23],  in_a[23],  in_b[23],  carry[22]);
    full_adder u24 (out_sum[24],  carry[24],  in_a[24],  in_b[24],  carry[23]);
    full_adder u25 (out_sum[25],  carry[25],  in_a[25],  in_b[25],  carry[24]);
    full_adder u26 (out_sum[26],  carry[26],  in_a[26],  in_b[26],  carry[25]);
    full_adder u27 (out_sum[27],  carry[27],  in_a[27],  in_b[27],  carry[26]);
    full_adder u28 (out_sum[28],  carry[28],  in_a[28],  in_b[28],  carry[27]);
    full_adder u29 (out_sum[29],  carry[29],  in_a[29],  in_b[29],  carry[28]);
    full_adder u30 (out_sum[30],  carry[30],  in_a[30],  in_b[30],  carry[29]);
    full_adder u31 (out_sum[31],  carry[31],  in_a[31],  in_b[31],  carry[30]);    

endmodule
 
// 1-bit full adder 모듈
module full_adder (sum, carry_out, in1, in2, carryin); 
    input in1, in2, carryin;       /* 1-bit 의 in1, in2, carryin 값을 입력 */
    output sum, carry_out;        /* 1-bit 의 sum 과 carry_out 값을 출력 */
     
    //여기에서 sum 은 in1 XOR in2 XOR carryin 으로 나타내었다.
    assign sum = (in1 ^ in2) ^ carryin;
     
    //여기에서 carry_out 은(in1 AND in2) OR (in1 AND carryin) OR (in2 AND carryin) 으로 나타내었다.
    assign carry_out = (in1 & in2) | (in1 & carryin) | (in2 & carryin); 
endmodule
| 이 포스트에 대한 이용규약 |
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 라이센스 에 따라 이용하실 수 있습니다.
This work is licensed under a Creative Commons Attribution 2.0 Korea LicenseLink in a new window.

| 트랙백 |
트랙백 주소 :: https://ohyung.net/rserver.php?mode=tb&sl=383