rfc1936.txt

来自「中、英文RFC文档大全打包下载完全版 .」· 文本 代码 · 共 1,180 行 · 第 1/3 页

TXT
1,180
字号
RFC 1936    Implementing the Internet Checksum in Hardware    April 1996Summary   This note describes the design of a hardware Internet Checksum that   can be implemented in an inexpensive PLD, achieving 1.26 Gbps. This   design has been implemented in the PC-ATOMIC host interface hardware   [8]. We believe this design is of general use to the Internet   community.Security Considerations   Security considerations are not addressed here. The Internet Checksum   is not intended as a security measure.Acknowledgements   The authors would like to thank the members of the "High-Performance   Computing and Communications", notably Mike Carlton, and "Advanced   Systems" Divisions at ISI for their assistance in the development of   the hardware, and this memo.References   [1] Braden, R., Borman, D., and Partridge, C., "Computing the       Internet Checksum," Network Working Group RFC-1071, ISI, Cray       Research, and BBN Labs, Sept. 1988.   [2] Mallory, T., and Kullberg, A., "Incremental Updating of the       Internet Checksum," Network Working Group RFC-1141, BBN Comm.,       Jan. 1990.   [3] Plummer, W., "TCP Checksum Function Design," IEN-45, BBN, 1978,       included as an appendix in RFC-1071.   [4] Postel, Jon, "Internet Protocol," Network Working Group RFC-       791/STD-5, ISI, Sept. 1981.   [5] Postel, Jon, "User Datagram Protocol," Network Working Group       RFC-768/STD-6, ISI, Aug. 1980.   [6] Postel, Jon, "Transmission Control Protocol," Network Working       Group RFC-793/STD-7, ISI, Sept. 1981.   [7] Rijsinghani, A., "Computation of the Internet Checksum via       Incremental Update," Network Working Group RFC-1624, Digital       Equipment Corp., May 1994.   [8] Touch, J., "PC-ATOMIC", ISI Tech. Report. SR-95-407, June 1995.Touch & Parham               Informational                      [Page 8]RFC 1936    Implementing the Internet Checksum in Hardware    April 1996Authors' Addresses   Joe Touch   University of Southern California/Information Sciences Institute   4676 Admiralty Way   Marina del Rey, CA 90292-6695   USA   Phone: +1 310-822-1511 x151   Fax:   +1 310-823-6714   URL:   http://www.isi.edu/~touch   EMail: touch@isi.edu   Bruce Parham   University of Southern California/Information Sciences Institute   4676 Admiralty Way   Marina del Rey, CA 90292-6695   USA   Phone: +1 310-822-1511 x101   Fax:   +1 310-823-6714   EMail: bparham@isi.eduTouch & Parham               Informational                      [Page 9]RFC 1936    Implementing the Internet Checksum in Hardware    April 1996Appendix A: PLD source codeThe following is the PLD source code for an AMD MACH-435 PLD. TheMACH-435 is composed of 8 22V10-equivalent PLD blocks, connected by aconfigurable internal matrix.---- (PLD source code follows) ----TITLE    PC-ATOMIC IP Sum Accelerator - 1-clock 2- and 3-bit 26 ns versionPATTERN  ip_sumREVISION 1.01AUTHOR   J. Touch & B. ParhamCOMPANY  USC/ISIDATE     06/21/94CHIP    ip_sum          MACH435; accumulates in 1 clock (1 level of logic);; resources allocated to reduce fitting time;; uses an input register "dl" to latch the data bus values on rising edge; accumulates a hi/lo ones-complement sum in register "q"; the input and output are accessed via bidirectional pins "dq";; uses 2 groups of 6 carry bit registers "cy";; use 3-bit full-adders with carry lookahead (settles in 6 clocks); group 16 bits as      [000102 030405 0607 080910 111213 1415];                       [161718 192021 2223 242526 272829 3031];; locking the pins down speeds up fitting and is designed to force; 4-bit components into single "segments" of the PLD.; we could have indicated the same thing via:;       GROUP MACH_SEG_A        dq[6..0];       GROUP MACH_SEG_B        dq[14..8];       GROUP MACH_SEG_C        dq[22..16];       GROUP MACH_SEG_D        dq[30..24];; control pins:;PIN     20      clk             ; adder clockPIN     62      ip_add          ; add current data to sumPIN     83      ip_sum_ena      ; output current sumPIN     41      ip_clr          ; clear current sumPIN 23  ip_dclk                 ; input data latch (tied to clk, or not)Touch & Parham               Informational                     [Page 10]RFC 1936    Implementing the Internet Checksum in Hardware    April 1996;; dq are data bus pins; dl is the input register;PIN     [9..3]          dq[6..0] IPAIR dl[6..0]         ; IO portPIN     [18..12]        dq[14..8] IPAIR dl[14..8]       ; IO portPIN     [30..24]        dq[22..16] IPAIR dl[22..16]     ; IO portPIN     [39..33]        dq[30..24] IPAIR dl[30..24]     ; IO portPIN     ?       dq[31,23,15,7] IPAIR dl[31,23,15,7]     ; IO port;; q  is the partial checksum register; dl is the input register; dq are the data bus pins;NODE    ?       q[31..0] OPAIR dq[31..0]        ; internal data in regNODE    ?       dl[31..0] REG                   ; input reg;; cy are the carry register bits;NODE    ?       cy[31,29,26,23,21,18,15,13,10,7,5,2] REG                                                ;1-bit internal carry bitsEQUATIONS;; .trst is the tri-state control, 0 means these are always inputs;ip_add.trst             = 0ip_clr.trst             = 0ip_sum_ena.trst         = 0;; grab data to the input register on every clock (irrelevant if invalid);dl[31..0].clkf          = ip_dclk       ; grab data all the time        ; don't use setf, rstf, or trst for dl        ; we want dl to map to input registers, not internal cells        ; besides, input registers don't need setf, rstf, or trst;; control of the checksum register;dq[31..0].clkf          = clk                   ; clk clocks everythingdq[31..0].setf          = gnd                   ; never preset registersdq[31..0].rstf          = ip_clr                ; clear on resetdq[31..0].trst          = ip_sum_ena            ; ena outputs sum - readTouch & Parham               Informational                     [Page 11]RFC 1936    Implementing the Internet Checksum in Hardware    April 1996;; control for the carry register;cy[31,29,26,23,21,18,15,13,10,7,5,2].clkf       = clkcy[31,29,26,23,21,18,15,13,10,7,5,2].setf       = gnd    ; never presetcy[31,29,26,23,21,18,15,13,10,7,5,2].rstf       = ip_clr ; clear on reset;; INPUT DATA LATCH; nothing fancy here - grab all inputs when ip_add signal is high; i.e., grab data in input register;dl[31..0]             := dq[31..0];; COMBINATORIAL ADDER;; built as a series of 2-bit and 3-bit (carry-lookahead) full-adders; with carries sent to the carry register "pipeline";; sum[n] are sum bits; cy[m] are carry bits; ":+:" is XOR;; SUM[0] = (A0 :+: B0 :+: CARRY_IN);; CY[0] = ((A0 * B0) + ((A0 :+: B0) * CARRY_IN));; actually, the latter can be rewritten as;; CY[0] = ((A0 * B0) + ((A0 + B0) * CARRY_IN));; because the XOR won't be invalidated by the AND case, since the; result is always 1 from the first term then anyway; this helps reduce the number of XOR terms required, which are; a limited resource in PLDs;Touch & Parham               Informational                     [Page 12]RFC 1936    Implementing the Internet Checksum in Hardware    April 1996; SUM THE LOW-ORDER WORD;;; the first 5 bits [0..4] of the low-order word;q[0]    := (q[0] :+: (ip_add * dl[0]) :+: cy[15])q[1]    := (q[1] :+: (ip_add * dl[1]) :+:        ((ip_add *                (q[0] * dl[0] +                dl[0] * cy[15])) +        (q[0] * cy[15])))q[2]    := (q[2] :+: (ip_add * dl[2]) :+:        ((ip_add *                (q[1] * dl[1] +                 q[1] *  q[0] *  dl[0] +                dl[1] *  q[0] *  dl[0] +                 q[1] * dl[0] * cy[15] +                dl[1] * dl[0] * cy[15] +                dl[1] *  q[0] * cy[15])) +        (q[1] * q[0] * cy[15])))cy[2]   := ((ip_add *                (q[2] * dl[2] +                 q[2] *  q[1] * dl[1] +                dl[2] *  q[1] * dl[1] +                 q[2] *  q[1] *  q[0] *  dl[0] +                 q[2] * dl[1] *  q[0] *  dl[0] +                dl[2] *  q[1] *  q[0] *  dl[0] +                dl[2] * dl[1] *  q[0] *  dl[0] +                 q[2] *  q[1] * dl[0] * cy[15] +                 q[2] * dl[1] *  q[0] * cy[15] +                 q[2] * dl[1] * dl[0] * cy[15] +                dl[2] *  q[1] *  q[0] * cy[15] +                dl[2] *  q[1] * dl[0] * cy[15] +                dl[2] * dl[1] *  q[0] * cy[15] +                dl[2] * dl[1] * dl[0] * cy[15])) +        (q[2] * q[1] * q[0] * cy[15]))q[3]    := (q[3] :+: (ip_add * dl[3]) :+: cy[2])q[4]    := (q[4] :+: (ip_add * dl[4]) :+:        ((ip_add *                (q[3] * dl[3] +                dl[3] * cy[2])) +        (q[3] * cy[2])))Touch & Parham               Informational                     [Page 13]RFC 1936    Implementing the Internet Checksum in Hardware    April 1996;; the next 3 bits [5..7] of the low-order word;q[5]    := (q[5] :+: (ip_add * dl[5]) :+:        ((ip_add *                (q[4] * dl[4] +                 q[4] *  q[3] * dl[3] +                dl[4] *  q[3] * dl[3] +                 q[4] * dl[3] * cy[2] +                dl[4] * dl[3] * cy[2] +                dl[4] *  q[3] * cy[2])) +        (q[4] * q[3] * cy[2])))cy[5]   := ((ip_add * (                 q[5] * dl[5] +                 q[5] *  q[4] * dl[4] +                dl[5] *  q[4] * dl[4] +                 q[5] *  q[4] *  q[3] * dl[3] +                 q[5] * dl[4] *  q[3] * dl[3] +                dl[5] *  q[4] *  q[3] * dl[3] +                dl[5] * dl[4] *  q[3] * dl[3] +                 q[5] *  q[4] * dl[3] * cy[2] +                 q[5] * dl[4] *  q[3] * cy[2] +                 q[5] * dl[4] * dl[3] * cy[2] +                dl[5] *  q[4] *  q[3] * cy[2] +                dl[5] *  q[4] * dl[3] * cy[2] +                dl[5] * dl[4] *  q[3] * cy[2] +                dl[5] * dl[4] * dl[3] * cy[2])) +        (q[5] * q[4] * q[3] * cy[2]))q[6]    := (q[6] :+: (ip_add * dl[6]) :+: cy[5])q[7]    := (q[7] :+: (ip_add * dl[7]) :+:        ((ip_add *                (q[6] * dl[6] +                dl[6] * cy[5])) +        (q[6] * cy[5])))cy[7]   := ((ip_add *                (q[7] * dl[7] +                 q[7] *  q[6] * dl[6] +                dl[7] *  q[6] * dl[6] +                 q[7] * dl[6] * cy[5] +                dl[7] * dl[6] * cy[5] +                dl[7] *  q[6] * cy[5])) +        (q[7] * q[6] * cy[5]))Touch & Parham               Informational                     [Page 14]RFC 1936    Implementing the Internet Checksum in Hardware    April 1996

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?