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 + -
显示快捷键?