




已阅读5页,还剩88页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京科技大学本科生毕业设计(论文)对高速模幂乘算法硬件研究与开发毕业设计目录摘要IAbstractII引言11 绪论21.1 模幂乘运算硬件IP研究进展及本文的主要工作21.1.1 模幂乘运算研究现状与存在的问题21.1.2 本文的主要工作31.2 相关技术的发展32 模幂乘硬核IP实现原理分析52.1 RSA算法基础52.2 Montgomery算法分析112.3 Montgomery算法在模幂乘IP设计中的应用112.4 模乘算法功能实现122.5 模幂乘算法功能实现153 模幂乘IP结构分析173.1 模幂乘主控模块实现173.2 模乘模块实现183.2.1 模乘的顶层模块183.2.2 模乘运算模块203.2.3 模乘控制模块233.2.4 模乘存储模块244 前仿测试及FPGA测试的实验过程详述274.1 前仿测试274.1.1 测试说明274.1.2 预期结果与实际结果对比274.1.3 小结304.2 FPGA测试304.2.1 FPGA测试环境简介304.2.2 FPGA环境搭建过程315.1.1 测试准备及结果记录335.1.2 小结36结论38参 考 文 献39致谢42附录 高速模幂乘实现编码VHD描述43- 93 -1 绪论1.1 模幂乘运算硬件IP研究进展及本文的主要工作RSA算法是由Rivest、Shamir与Adleman三人于1978年合作开发的,并以他们的名字命名的公开密钥算法。其加密密钥是公开的,而解密密钥是保密的。它是基于一个非常简单的数论思想:“将两个素数乘起来是很容易的,但是分解该乘积是非常困难的”。因而,研究如何用硬件快速实现模幂乘运算有着重要的现实意义。密码技术是使信息系统达到安全的核心手段,用硬件来实现密码算法在性能和物理安全方面具有一定优势。无论是加密还是解密,发送方和接收方需要完成的运算是memodn,即大数模幂乘运算。很多加密算法都用到模幂乘运算,如Diffie-Hellman密钥交换算法,ElGamal数字签名及DSA数字签名等等。为此,开发高速的模幂乘运算硬件IP核是必要的。1.1.1 模幂乘运算研究现状与存在的问题在现在以及将来,信息安全将在计算机和通信系统中起着重要作用。信息安全涉及法律、管理和技术等方面,在此仅讨论技术问题。从技术的角度讲,密码技术是使信息系统达到安全的核心手段。信息数据加密既可用硬件来实现,也可以通过软件来完成。虽然软件加密已经变得比较流行,但是硬件加密仍是商业和军事用途的主要选择。采用硬件的好处之一是速度,许多加密算法采用软件实现是无效率可言的,如DES、SHA1等,需要用专门的硬件来加以实现。之二是安全性,对运行在没有物理保护的一般的计算机上的某个加密算法,敌对方可以用各种跟踪工具修改算法而不让其他人知道。硬件加密设备可以安全地封装起来,可以避免对关键信息的任何非法访问。现实社会并没有处在理想社会,国家间仍然存在着政治、军事和经济斗争;企业间仍然存在着技术和商业利益竞争;人与人之间存在着个人隐私。如果通过网络以明文方式传送不希望第三方(敌对方)知道的敏感信息,无论是通过无线还是有线传输,所传送的敏感信息很容易被第三方窃听。若把在公共信道上传送的信息以密文的方式传输,使窃听者难以获得有用信息,则可达到安全通信的目的。对于保护由地面通信线路、通信卫星和微波设备组成的通信网络中所传的信息,密码技术是唯一已知的实用方法。另一方面,信息技术包括保密技术的发展也使得在极大规模上的信息交流可以秘密进行。这些交流包括正常的有利于社会的活动,也有罪恶的计划。它们可以在更大规模上秘密地策划、组织、实施。而在过去,只要计划的规模一大,通讯的规模也自然会大,因而就很难保住秘密。密码术有很长的历史。古代人在没有高速运算设备的条件下想尽了各种方法,也包含了许多巧妙的构思。早在公元前1900年,一个古埃及书写员就在一个铭文中使用了非标准的象形文字,这是人类最早的有记录的密码术。其后,古代人使用的密码术有如把字母表的顺序颠倒过来、进行字母替代,或者用错后一定数目的位置的字母替代前面的字母。其中有些密码术的构思也是十分巧妙的。1.1.2 本文的主要工作在开发高速模幂乘芯片的历史长河中。人们都在应用各种算法和技术去实现。本文的主要工作是研究及验证Montgomery算法原理,通过改进过后的免减Montgomery算法,开发设计出256位、1024位、2048位规格的模幂乘运算电路,并利用仿真工作Modelsim、quartusII进行仿真验证。在电路设计过程中,详细描述电路结构及其电路中各个模块结构之间的关系。每个模块的端口信号,以及每个模块内部主要逻辑和运算器件。在仿真过程中,详细例出各种规格数据的运行结果。包括前仿真测试和FPGA测试。1.2 相关技术的发展在计算机和通信网络飞速发展的今天,人们利用网络进行快捷、方便地交换信息,真有天涯若比邻的感觉,以至于人们把地球称为地球村。人们通过网络谈论个人私事、或传递商务信息、或下达军事和政府指令。它在方便人们生活的同时,也极大地提高了工作效率。现代密码术的划时代突破,是威特菲尔德迪菲(Whitfield Diffie)和马丁海尔曼(Martin Hellman)有关公开密钥加密系统的构想,这是在1976年发表的。但威特菲尔德迪菲和马丁海尔曼提供的MH背包算法于1984年被破译,因而失去了实际意义。真正有生命力的公开密钥加密系统算法是由隆里维斯特(Ronald L. Rivest)、阿迪沙米尔(Adi Shamir)和雷奥纳德阿德尔曼(Leonard M.Adlemen)在威特菲尔德迪菲和马丁海尔曼的论文的启发下,在1977年发明的,这就是沿用至今的RSA算法。它是第一个既能用于数据加密也能用于数字签名的算法。2 模幂乘硬核IP实现原理分析2.1 RSA算法基础1) 欧几里得方程在RSA 算法中,往往要在已知A、N的情况下,求 B,使得 (A*B)%N=1。即相当于求解B、M都是未知数的二元一次不定方程 A*B-N*M=1 的最小整数解。而针对不定方程ax-by=c 的最小整数解,古今中外都进行过详尽的研究,西方有著名的欧几里德算法,即辗转相除法,中国有秦九韶的“大衍求一术”。事实上,二元一次不定方程有整数解的充要条件是c为a、b的最大公约数。即当c=1时,a、b必须互质。而在RSA算法里由于公钥d为素数,素数与任何正整数互质,所以可以通过欧几里德方程来求解私钥e。欧几里德算法是一种递归算法,比较容易理解:例如:11x-49y=1,求x(a) 11 x - 49 y = 1 49%11=5 -(b) 11 x - 5 y = 1 11%5 =1 -(c) x - 5 y = 1令y=0 代入(c)得x=1令x=1 代入(b)得y=2令y=2 代入(a)得x=9同理可使用递归算法求得任意 ax-by=1(a、b互质)的解。实际上通过分析归纳将递归算法转换成非递归算法就变成了大衍求一术:x=0,y=1WHILE a!=0i=yy=x-y*a/bx=ii=aa=b%ab=iIF x=0IF E%2=0C=C*C % NE=E/2ELSED=D*C % NE=E-1RETURN D继续分析会发现,要知道E 何时能整除 2,并不需要反复进行减一或除二的操作,只需验证E 的二进制各位是0 还是1 就可以了,从左至右或从右至左验证都可以,从左至右会更简洁,设E=Sumi=0 to n(E*2*i),0=E=1,则:D=1FOR i=n TO 0D=D*D % NIF E=1 D=D*C % NRETURN D这样,模幂运算就转化成了一系列的模乘运算。3) 模乘运算对于乘模运算 A*B%N,如果A、B都是1024位的大数,先计算A*B,再% N,就会产生2048位的中间结果,如果不采用动态内存分配技术就必须将大数定义中的数组空间增加一倍,这样会造成大量的浪费,因为在绝大多数情况下不会用到那额外的一倍空间,而采用动态内存分配技术会使大数存储失去连续性而使运算过程中的循环操作变得非常繁琐。所以模乘运算的首要原则就是要避免直接计算A*B。设A=Sumi=0 to k(A*r*i),r=0x10000000,0=Ar,则:C = A*B = Sumi=0 to n(A*B*r*i) %N可以用一个循环来处理:C=0;FOR i=n to 0C=C*rC=C+A*BRETURN C这样将一个多位乘法转换成了一系列单位乘法和加法,由于:a*b %n = (a%n * b%n) %na+b %n = (a%n + b%n) %n所以,对于求C=A*B %N,我们完全可以在求C的过程中完成:C=0;FOR i=n to 0C=C*r %NC=C+A*B %NRETURN C这样产生的最大中间结果是A*B 或C*r,都不超过1056位,空间代价会小得多,但是时间代价却加大了,因为求模的过程由一次变成了多次。对于孤立的乘模运算而言这种时间换空间的交易还是值得的,但是对于反复循环的乘模运算,这种代价就无法承受,必须另寻出路。4) Montgomery模乘根据文献2证明,假设A=Sumi=0 to k(A*2*i),0=A=N C=C-NRETURN C 由于在RSA中A、B总是小于N,又0=A,C0=1,所以:C = (C+A*B+C0*N)/2C (C+2N)/22C C+2NC 2N既然C总是小于2N,所以求C %N 就可以很简单地在结束循环后用一次减法来完成,即在求A*B*2*(-k) %N的过程中不用反复求模,达到了我们避免做除法的目的。当然,这一算法求得的是A*B*2*(-k) %N,而不是我们最初需要的A*B %N。但是利用A*B*2*(-k)我们同样可以求得A*E %N。设R=2*k %N,R=2*(-k) %N,E=Sumi=0 to n(E*2*i):A=A*R %NX=AFOR i FROM n TO 0X=X*X*R %NIF E=1 X=X*A*R %NX=X*1*R %NRETURN X最初:X = A*R %N,开始循环时:X = X*X*R %N= A*R*A*R*R %N = A*2*R %N反复循环之后:X = A*E*R %N最后:X = X*1*R %N= A*E*R*R %N= A*E %N如此,我们最终实现了不含除法的模幂算法,这就是著名的蒙哥马利算法,而X*Y*R %N 则被称为“蒙哥马利模乘”。以上讨论的是蒙哥马利模乘最简单,最容易理解的二进制形式。蒙哥马利算法的核心思想在于将求A*B %N转化为不需要反复取模的A*B*R %N,但是利用二进制算法求1024位的A*B*R %N,需要循环1024次之多,我么必然希望找到更有效的计算A*B*R %N的算法。考虑将A表示为任意的r进制:A = Sumi=0 to k(A*r*i) 0=A=N C=C-NRETURN C因为在循环中每次C=C/r 时,都可能有余数被舍弃。假如我们能够找到一个系数 q,使得(C + A*B + q*N) %r =0,并将算法修改为:C=0FOR i FROM 0 TO kC=C+A*B+q*NC=C/rIF C=N C=C-NRETURN C则C的最终返回值就是A*B*R %N的精确值,所以关键在于求q。由于:(C + A*B + q*N) %r =0= (C %r + A*B %r + q*N %r) %r =0= (C0 + A*B0 + q*N0) %r =0若令N0*N0 %r =1,q=(C0+A*B0)*(r-N0) %r,则:(C0 + A*B0 + q*N0) %r= (C0+A*B0 - (C0+A*B0)*N0*N0) %r) %r= 0于是我们可以得出r为任何值的蒙哥马利算法:m=r-N0C=0FOR i FROM 0 TO kq=(C0+A*B0)*m %rC=(C+A*B+q*N)/rIF C=N C=C-NRETURN C如果令 r=0x100000000,则 %r 和 /r 运算都会变得非常容易,在1024位的运算中,循环次数k 不大于32,整个运算过程中最大的中间变量C=(C+A*B+q*N) 2*r*N 1057位,算法效率就相当高了。唯一的额外负担是需要计算 N0,使N0*N0 %r =1,而这一问题前面已经用欧几里德算法解决过了,而且在模幂运算转化成反复模乘运算时,N是固定值,所以N0只需要计算一次,负担并不大。2.2 Montgomery算法分析根据2.1的第4小节,可知,选择与(模数)n互素的基数R。为计算方便,它通常是机器字长的倍数;假如选择的模数n为64bit的数,那为R可以选择为0X10000000000000000,R为65bit的数据。并且选择R-1及n,满足0 R-1n,0 n/R,使得,R R-1-nn/=1。对于0mRn的任意整数,Montgomery给出求模乘法mR-1 mod n的快速算法M(m) 19 :Function M(m)=(m mod R) n/ mod R;0R t=(m+n)/Rif t n then return (t-n), else return t 从上面的M(m)运算可以看出,因为nmnn/-m mod R ,故t为整数;同时tRm mod n,得tmR-1 mod n。由于0m+nRn+Rn,M(m)的运算结果范围是0t2n。2.3 Montgomery算法在模幂乘IP设计中的应用Montgomery算法只给出满足0mRn的任意整数m时mR-1 mod n的快速算法,而我们在计算RSA的加解密时需要计算类似于Z=AB mod n的计算,其中0A,Bn,则可直接利用Montgomery算法M(AB)计算ABR-1 mod n,然后做适当的调整。但在实际的硬件实现时Rn,所以必须对此算法做适当的修改,根据文献17,18证明,在模乘循环过程中增加一次循环,就可免去在模乘循环结束时的Zs-n及其相关的判断操作,修改后的(免减)Montgomery算法描述如下:设nRs,且GCD(n,R)=1,整数A,B满足An,Bn,A=,B=,n=则:Z=M(A,B)ABR-(s+1) mod n的计算算法如下:Function M(A,B)Z00 For i =0 to s do i= (Zi+aib0) n/L mod R Zi+1=Zi +aiB+in Zi+1=Zi+1 /R Endfori 式(2.1) 其中n/L=n/ mod R。2.4 模乘算法功能实现1) 模运算基础(1) 模p运算给定一个正整数p,任意一个整数n,一定存在等式n = kp + r 其中k、r是整数,且 0 r = p ,则(a+b) mod p = (r1 + r2) -p否则(a+b) mod p = (r1 + r2)再和c进行模p和运算,得到结果为 r1 r2 + r3 的算术和除以p的余数。对右侧进行计算可以得到同样的结果,得证。(2) 模P相等如果两个数a、b满足a mod p = b mod p,则称他们模p相等,记做 a b mod p 可以证明,此时a、b满足 a = kp + b,其中k是某个整数。 对于模p相等和模p乘法来说,有一个和四则运算中迥然不同得规则。在四则运算中,如果c是一个非0整数,则 ac = bc 可以得出 a =b 但是在模p运算中,这种关系不存在,例如: (3 x 3) mod 9 = 0 (6 x 3) mod 9 = 0 因为: 3 mod 9 = 3 6 mod 9 =6 根据定理(消去律):如果gcd(c,p) 1 ,则 ac bc mod p 可以推出 a b mod p 证明: 因为ac bc mod p 所以ac = bc + kp,也就是c(a-b) = kp 因为c和p没有除1以外的公因子,因此上式要成立必须满足下面两个条件中的一个 1) c能整除k 2) a = b 如果2不成立,则c|kp 因为c和p没有公因子,因此显然c|k,所以k = ck 因此c(a-b)kp可以表示为c(a-b) =ckp 因此a-b = kp,得出a b mod p 如果a = b,则a b mod p成立,得证。(3) 欧拉定理 对于互质的整数a和n,有a(n) 1 mod n 证明: 首先证明下面这个命题: 对于集合Zn=x1,x2,.,x(n),考虑集合 S = ax1 mod n,ax2mod n,.,ax(n) mod n 则S = Zn 1) 由于a,n互质,xi 也与n互质,则axi 也一定于p互质,因此 任意xi, axi mod n 必然是Zn的一个元素 2) 对于Zn中两个元素xi 和xj,如果xi xj 则axi mod n axi mod n,这个由a、p互质和消去律可以得出。 所以,很明显,S=Zn 既然这样,那么 (ax1 ax2.ax(n))mod n = (ax1 mod n ax2 mod n . ax(n mod n)mod n = (x1 x2 . x(n)mod n 考虑上面等式左边和右边 左边等于(a(n) (x1 x2 . x(n))mod n) mod n 右边等于x1 x2 . x(n))mod n 而x1 x2 . x(n))mod n和p互质 根据消去律,可以从等式两边约去,就得到: a(n) 1 mod n推论:对于互质的数a、n,满足a(n)+1) a mod n(4) 费马定理a是不能被质数p整除的正整数,则有a 1 mod p 由于(p) = p-1,代入欧拉定理即可证明。 同样有推论:对于不能被质数p整除的正整数a,有a a mod p2) 模乘算法功能实现设求B=M1*M2 mod n (M、n均为整数)(1) B1=M1*M2*R-1 mod n,( Montgomery算法实现)(2) B=B1*R2*R-1 mod n根据本2.4节中1中的模运算结合率,可由(a*b) mod p * c)mod p = (a * (b*c) mod p) mod p,B =(M1*M2*R-1 mod n )* R2*R-1 mod n 得到B= M1*M2*R-1*R2*R-1 mod n = M1*M2 mod n2.5 模幂乘算法功能实现 设求A=Me mod n (M、e、n均为整数,e=3)1) 设s=1,求B=M*M mod n2) 求A1=B*M mod n ,s=s-1,3) 判断s=e? 若s=e,则完成运算,否则跳到2步执行 图2.1 模幂乘算法功能实现图状态说明:第0状态:初始状态,等待模幂乘MMC_E使能信号第2状态:执行模乘运算B1=M1*M2*R-1 mod n;当模乘运算结束后,信号MMUL_OV有效,跳至状态3第3状态:将运算结果B1存入原M1所存的存储器中;并对信号DD进行判断,若DD为0,则跳至状态4,若DD为1,则跳至状态6第4状态:将R2 存入原M2所存的存储器中;跳至状态2第5状态:将底数M存入原M2所存的存储器中;跳至状态2第6状态:判断幂指数信号E是否为0,若为0,则跳至结束状态7;若为1,则跳至第5状态 3 模幂乘IP结构分析3.1 模幂乘主控模块实现模幂乘主控模块编码说明:1) 通过循环调用模乘模块来实现模幂乘运算。每调用两次模乘模块运算实现一次模乘。第一次调用模乘模块实现B1=M1*M2*R-1 mod n,第二次调用模乘模块实现B=B1*R2*R-1 mod n (B1为上次模乘模块运算结果,R2结果相当于上次模乘模块运算中的M2输入,公式中其余项不变。所以可得B= M1*M2 mod n)。2)通过重复进行A=A*B mod n模乘运算来实现Me mod n模幂乘运算,Me mod n不能先计算Me然后再求模,这样Me的结果会占用巨量的存储空间而无法实现,只能对Me的中间结果进行求模运算,使结果能保持在n的值以内。这种方法需要e-1次模乘运算。例如计算M15 mod n需要计算A=M2 mod n,得到A后再计算A1= M3 mod n,依此类推。3)由上分析,可以推出模幂乘模块的输入输出管脚及其功能。如下表表2.2 模幂乘模块外特性说明信号名称方向规格信号说明及其功能CLKIN1BIT时钟信号RSTIN1BIT复位信号MMCIN1BIT模块使能信号,启动模块工作EIN2048BIT模幂乘的指数输入,规格下1024BITCLK_NIN1BIT负沿时钟信号MGML_OVIN1BIT模乘模块操作结束信号NLIN32BIT模乘模块输入数据信号SPIN3BIT操作规格选择信号C_STOUT1BIT模乘模块输入数据C控制信号EEC_OVOUT1BIT模幂乘操作结束信号4) 模幂乘实现编码的管脚定义如下:library WORK;library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_ARITH.all;use IEEE.STD_LOGIC_UNSIGNED.all;entity MMUL_32 is port ( C40M_CLK : in STD_LOGIC; CLK : in STD_LOGIC; CLK20_SP : in STD_LOGIC; CLK_N : in STD_LOGIC; MMC_E : in STD_LOGIC; MMUL1_OV : out STD_LOGIC; NL : in STD_LOGIC_VECTOR(31 downto 0 ); RESET : in STD_LOGIC; SP : in STD_LOGIC_VECTOR(2 downto 0 ); E : in STD_LOGIC_VECTOR( 2047 downto 0 ) ); end MMUL_32;3.2 模乘模块实现3.2.1 模乘的顶层模块模块MMUL_32为模乘的顶层模块,它调用的模块有存储模块MEM_8、RAM9_128、RAM10_128、RAM128_16,模乘控制模块MMUL_CTRL32,模乘运算模块MMUL_OP32。模块之间操作关系图如下: 图3.1 模乘顶层模块图1) 模乘顶层模块说明:摸乘控制模块控制的运算是:Function M(A,B)Z00 For i =0 to s do i= (Zi+aib0) n/L mod R Zi+1=Zi +aiB+in Zi+1=Zi+1 /R Endfori 其中n/L=n/ mod R。 运算过程中,运算模块主要执行乘法和加法操作,寄存器存储运算中间结果,存储器存储运算中间结果及最终结果。控制模块同时控制其它模块的运行和操作。 2) 模乘顶层模块端口定义如下:library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_ARITH.all;use IEEE.STD_LOGIC_UNSIGNED.all;entity MMUL_32 is port ( C40M_CLK : in STD_LOGIC; CLK : in STD_LOGIC; CLK20_SP : in STD_LOGIC; CLK_N : in STD_LOGIC; E_MODMUL : in STD_LOGIC; MMUL_OV : out STD_LOGIC; NL : in STD_LOGIC_VECTOR(31 downto 0 ); RESET : in STD_LOGIC; SP : in STD_LOGIC_VECTOR(2 downto 0 ) );end MMUL_32;3.2.2 模乘运算模块模块MMUL_OP32为运算模块,主要用2个32位乘法器和4个32位加法器来实现Montgomery算法。如图所示: 图3.2 模乘运算模块图1) 运算模块功能分析若要实现Zi+1=Zi +aiB+in,设B和n为128bit数据,Zi,ai,i均为32bit。而可提供的乘法器与加法器的位数为32位,并且乘法器为2个,加法器为4个。要完成这个功能,请见如下时序图,图 3.3 运算模块时序简图B和n为128bit数据,那么可得i = 4。B分为B0,B1,B2,B3,同样n分为n0,n1,n2,n3。Zi分为Zi_0,Zi_1,Zi_2,Zi_3。当i=0时,Z0=0,Z1_0=a0 * B00 * n0, 结合图3.2,在第一周期,做a0 * B0,0 * n0,且把两个结果取出低32位做加法运算。如图3.2所示,是就是为什么乘法器与加法器中间有个寄存器的原因,通过这个寄存器,可以暂时让高32位数据不进入加法器的输入。那么这结果的高32位在什么时候用呢,在第二周期。如下,Z1_1=a0*B1 + 0 * n1,这时,在第二周期,做a0 * B1,0 * n1,可知,分别能得到64位数据,那么低32便和第一周期得到的高32位数做加,得到两个加法过后的结果。之后,这两个结果再进行加法运算,如图3.2。当然,两轮的加法操作都在一个周期完成。第三,第四,乃到第N周期都是同样的操作。但是,那图3.2中,最右下角的那个加法器有什么用呢,请看这式子:Zi+1=Zi +aiB+in,Zi这个数只有当i=0时,才为0,其它时候都是有值的,所以右下角的加法器就用来寄存Zi的32为数值。模乘运算模块端口定义如下:entity MMUL_OP32 is port ( CAL40_CLK : in STD_LOGIC; CLK : in STD_LOGIC; CLK20_SP : in STD_LOGIC; CLK_N : in STD_LOGIC; MMUL_SCYC : in STD_LOGIC_VECTOR(5 downto 0 ); NL : in STD_LOGIC_VECTOR(31 downto 0 ); RAM10_QQ : in STD_LOGIC_VECTOR(127 downto 0 ); RAM1QQ : in STD_LOGIC_VECTOR(127 downto 0 ); RAM9_QQ : in STD_LOGIC_VECTOR(127 downto 0 ); RAM_D : out STD_LOGIC_VECTOR(127 downto 0 ); RAM_QQ : in STD_LOGIC_VECTOR(127 downto 0 ); RESET : in STD_LOGIC; SCYCDT : in STD_LOGIC_VECTOR(5 downto 0 ); XX_E1 : in STD_LOGIC; XX_E2 : in STD_LOGIC; Z2_EE : out STD_LOGIC; Z4_EE : out STD_LOGIC; ZSEL_OV : out STD_LOGIC );3.2.3 模乘控制模块模块MMUL_CTRL32为控制模块,主要控制模乘的运算过程。通过公式Z00 For i =0 to s do i= (Zi+aib0) n/L mod R Zi+1=Zi +aiB+in Zi+1=Zi+1 /R Endfori可以看出,S0为初始态,YY计算i,S6,S9计算出Zi+1,E2_20_MCK状态是对运算时钟的选择,运算时钟可以选择20M或41M,S10,S11表示操作结束。如下图如示:图3.4 MMUL_OP32模块状态图控制模块端口实现:library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_ARITH.all;use IEEE.STD_LOGIC_UNSIGNED.all;entity MMUL_CTRL32 is port ( E_MODMUL : in STD_LOGIC; CLK : in STD_LOGIC; RESET : in STD_LOGIC; MMUL_SCYC : in STD_LOGIC_VECTOR(5 downto 0 ); SCYCDT : out STD_LOGIC_VECTOR(5 downto 0 ); R9ADR : out STD_LOGIC_VECTOR(3 downto 0 ); R10ADR : out STD_LOGIC_VECTOR(3 downto 0 ); RADR : out STD_LOGIC_VECTOR(3 downto 0 ); E_MMUL256 : in STD_LOGIC; E_MMUL1024 : in STD_LOGIC; E_MMUL2048 : in STD_LOGIC; XX_E1 : out STD_LOGIC; XX_E2 : out STD_LOGIC; RAM_WE : out STD_LOGIC; R1ADR : out STD_LOGIC_VECTOR(3 downto 0 ); ZSEL_OV : in STD_LOGIC; Z4_EE : in STD_LOGIC; WADR : out STD_LOGIC_VECTOR(3 downto 0 ); Z2_EE : in STD_LOGIC; MMUL_OV : out STD_LOGIC; CLK20_SP : in STD_LOGIC );end MMUL_CTRL32;3.2.4 模乘存储模块由8个128BIT*16的存储器组成,主要存储最终的运算结果,运算结果可以为256BIT,1024BIT,2048BIT。模块端口定义:library WORK;library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_ARITH.all;use IEEE.STD_LOGIC_UNSIGNED.all;use IEEE.VITAL_TIMING.all;entity MEM_8 is port ( CLK : in STD_LOGIC; RAM1_CEN : in STD_LOGIC; RAM1_WE : in STD_LOGIC; RAM1ADR : in STD_LOGIC_VECTOR(3 downto 0 ); RAM1QQ : out STD_LOGIC_VECTOR(127 downto 0 ); RAM2_CEN : in STD_LOGIC; RAM2_WE : in STD_LOGIC; RAM2ADR : in STD_LOGIC_VECTOR(3 downto 0 ); RAM2QQ : out STD_LOGIC_VECTOR(127 downto 0 ); RAM3_CEN : in STD_LOGIC; RAM3_WE : in STD_LOGIC; RAM3ADR : in STD_LOGIC_VECTOR(3 downto 0 ); RAM3QQ : out STD_LOGIC_VECTOR(127 downto 0 ); RAM4_CEN : in STD_LOGIC; RAM4_WE : in STD_LOGIC; RAM4ADR : in STD_LOGIC_VECTOR(3 downto 0 ); RAM4QQ : out STD_LOGIC_VECTOR(127 downto 0 ); RAM5_CEN : in STD_LOGIC; RAM5_WE : in STD_LOGIC; RAM5ADR : in STD_LOGIC_VECTOR(3 downto 0 ); RAM5QQ : out STD_LOGIC_VECTOR(127 downto 0 ); RAM6_CEN : in STD_LOGIC; RAM6_WE : in STD_LOGIC; RAM6ADR : in STD_LOGIC_VECTOR(3 downto 0 ); RAM6QQ : out STD_LOGIC_VECTOR(127 downto 0 ); RAM7_CEN : in STD_LOGIC; RAM7_WE : in STD_LOGIC; RAM7ADR : in STD_LOGIC_VECTOR(3 downto 0 ); RAM7QQ : out STD_LOGIC_VECTOR(127 downto 0 ); RAM8_CEN : in STD_LOGIC; RAM8_WE : in STD_LOGIC; RAM8ADR : in STD_LOGIC_VECTOR(3 downto 0 ); RAM8QQ : out STD_LOGIC_VECTOR(127 downto 0 ); RAM_INH : in STD_LOGIC_VECTOR(127 downto 0 ); RAM_INL : in STD_LOGIC_VECTOR(127 downto 0 ) );end MEM_8;存储器说明:该存储模块内,包含8个16*128的存储器,时序图如下,图3.5 存储器RAM的操作时序图信号说明:wren为写使能,data为输入数据信号,address为地址信号,clock为时钟,clken相当于存储RAM的片选使能。 4 前仿测试及FPGA测试的实验过程详述4.1 前仿测
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东广州医科大学附属第五医院第一次招聘17人考前自测高频考点模拟试题及答案详解(历年真题)
- 2025年新乡延津县选调县外在编在岗教师回乡任教的考前自测高频考点模拟试题及完整答案详解1套
- 2025年甘肃省定西市临洮县中铺镇选聘摩云村文书考前自测高频考点模拟试题有答案详解
- 安全培训教室设备清单表课件
- 2025年光伏发电用控制器项目发展计划
- 2025北京邮电大学与通信工程学院招聘1人(人才派遣)模拟试卷及答案详解1套
- 2025甘肃张掖市教育局培黎职业学院引进高层次人才14人考前自测高频考点模拟试题附答案详解(典型题)
- 2025年中职高考对口升学(理论考试)真题卷【轻工纺织大类】模拟练习
- 2025江苏南京市浦口区卫健委所属事业单位招聘高层次人才11人考前自测高频考点模拟试题及参考答案详解一套
- 小学安保人员安全培训课件
- 2025年广西继续教育公需科目考试试题和答案
- 系统性风险压力测试框架-洞察阐释
- 数据迁移及备份服务合同
- 子宫动脉栓塞术后护理常规
- 教育中的数字化转型读书心得体会
- 幼儿园一日工作流程解读
- 纤支镜灌洗的术前术后护理讲课件
- 加气站风控分级管理制度
- 乡墅建房公司运营管理制度
- 学习通《大学生就业指导》章节测试含答案
- 工程机械发动机课件
评论
0/150
提交评论