您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 32位双重快速跳跃进位链六级流水线加法器Verilog的实现
32位双重快速跳跃进位链六级流水线加法器Verilog的实现DLUT-SOFTWARE-0819MrXie2011/6/28`timescale1ns/1ps//定义时间单位为1ns,时间精度为1ps////////////////////////////////////////////////////////////////////////////////////模块名:fullAdder32//端口说明:clk:输入的时钟A:输入的32加数B:输入的32位被加数Cin:输入的最低位进位Cout:输出的最高位进位Sum:两个数相加的和//目标器件:Veritex4系列的XC4VSX35//工具版本:Xilinx-ISE10.1、ISESimulator(VHDL/Verilog)、SynplifyPro9.6.2//依懒关系:不依懒于其它模块//创建日期:08:43:3806/21/2011//创建人://////////////////////////////////////////////////////////////////////////////////modulefullAdder32(clk,A,B,Cin,Cout,Sum);inputclk;//声明clk为1位的线网型输入变量input[31:0]A;//声明A为32位的线网型输入变量input[31:0]B;//声明B为32位的线网型输入变量,inputCin;//声明Cin为1位的线网型输入变量outputCout;//声明Cout为1位的线网型输出变量output[31:0]Sum;//声明Sum为32位的线网型输出变量reg[31:0]Sum;//对Sum进行重新声明为寄存器型regCout;//对Cout进行重新声明为寄存器型reg[30:0]C;//每一位相加时产生的进位reg[30:0]tmpC1,tmpC2,tmpC3;//临时变量,对进位作一个暂存reg[31:0]d;//小组的本地进位reg[31:0]tmpd1,tmpd2,tmpd3;//临时变量,对本地进位作一个暂存reg[31:0]t;//小组的传递进位reg[31:0]tmpt1,tmpt2,tmpt3;//临时变量,对传递进位作一个暂存reg[8:1]D;//大组的本地进位reg[8:1]tmpD1;//临时变量,对大组的本地进位作一个暂存reg[8:1]T;//大组的传递进位reg[8:1]tmpT1;//临时变量,对大组的传递进位作一个暂存reg[31:0]tmpA1,tmpA2,tmpA3,tmpA4,tmpA5;//对输入变量A作暂存reg[31:0]tmpB1,tmpB2,tmpB3,tmpB4,tmpB5;//对输入变量B作暂存regtmpCin1,tmpCin2,tmpCin3,tmpCin4,tmpCin5;//对输入变量Cin作暂存regtmpCout1,tmpCout2;//对输出变量Cout作一个暂存//////////////////第一个时钟周期//////////////////////////////////计算小组的本地进位d和传递进位t//对输入的加数A,被加数B,低位进位Cin作一级暂存always@(posedgeclk)begind=A&B;t=A|B;tmpA1=A;tmpB1=B;tmpCin1=Cin;end//////////////////第二个时钟周期/////////////////////////////////对输入的加数A,被加数B,低位进位Cin作二级暂存//对小组的本地进位d,传递进位t作一级暂存//计算进位C[0],C[1],C[2]//计算大组的本地进位D、传递进位Talways@(posedgeclk)begintmpd1=d;tmpt1=t;tmpA2=tmpA1;tmpB2=tmpB1;tmpCin2=tmpCin1;C[0]=d[0]|t[0]&tmpCin1;C[1]=d[1]|t[1]&d[0]|t[1]&t[0]&tmpCin1;C[2]=d[2]|t[2]&d[1]|t[2]&t[1]&d[0]|t[2]&t[1]&t[0]&tmpCin1;D[1]=d[3]|&{t[3],d[2]}|&{t[3:2],d[1]}|&{t[3:1],d[0]};T[1]=&t[3:0];//t[3]&t[2]&t[1]&t[0];D[2]=d[7]|&{t[7],d[6]}|&{t[7:6],d[5]}|&{t[7:5],d[4]};T[2]=&t[7:4];//t[3]&t[2]&t[1]&t[0];D[3]=d[11]|&{t[11],d[10]}|&{t[11:10],d[9]}|&{t[11:9],d[8]};T[3]=&t[11:8];//t[11]&t[10]&t[9]&t[8];D[4]=d[15]|&{t[15],d[14]}|&{t[15:14],d[13]}|&{t[15:13],d[12]};T[4]=&t[15:12];//t[15]&t[14]&t[13]&t[12];D[5]=d[19]|&{t[19],d[18]}|&{t[19:18],d[17]}|&{t[19:17],d[16]};T[5]=&t[19:16];//t[19]&t[18]&t[17]&t[16];D[6]=d[23]|&{t[23],d[22]}|&{t[23:22],d[21]}|&{t[23:21],d[20]};T[6]=&t[23:20];//t[23]&t[22]&t[21]&t[20];D[7]=d[27]|&{t[27],d[26]}|&{t[27:26],d[25]}|&{t[27:25],d[24]};T[7]=&t[27:24];//t[27]&t[26]&t[25]&t[24];D[8]=d[31]|&{t[31],d[30]}|&{t[31:30],d[29]}|&{t[31:29],d[28]};T[8]=&t[31:28];//t[31]&t[30]&t[29]&t[28];end////////////////////////t第三个时钟周期///////////////////////////对输入的加数A,被加数B,低位进位Cin作三级暂存//对小组的本地进位d,传递进位t作二级暂存//对大组的本地进位D,传递进位T作一级暂存//对进位部分进位C作二级暂存//计算进位C[3],C[7],C[11],C[15]always@(posedgeclk)begintmpd2=tmpd1;tmpt2=tmpt1;tmpA3=tmpA2;tmpB3=tmpB2;tmpCin3=tmpCin2;tmpD1=D;tmpT1=T;tmpC1[2:0]=C[2:0];tmpC1[3]=D[1]|T[1]&tmpCin2;tmpC1[7]=D[2]|T[2]&tmpCin2;tmpC1[11]=D[3]|T[3]&tmpCin2;tmpC1[15]=D[4]|T[4]&tmpCin2;end////////////////////////t第四个时钟周期///////////////////////////对输入的加数A,被加数B,低位进位Cin作四级级暂存//对小组的本地进位d,传递进位t作三级暂存//对进位部分进位C作二级暂存//计算进位C[6:4],C[10:8],C[14:12],C[19:16],C[23],C[27]//计算最高进位Coutalways@(posedgeclk)begintmpd3=tmpd2;tmpt3=tmpt2;tmpA4=tmpA3;tmpB4=tmpB3;tmpCin4=tmpCin3;tmpC2[0]=tmpC1[0];tmpC2[1]=tmpC1[1];tmpC2[2]=tmpC1[2];tmpC2[3]=tmpC1[3];tmpC2[7]=tmpC1[7];tmpC2[11]=tmpC1[11];tmpC2[15]=tmpC1[15];tmpC2[4]=tmpd2[4]|tmpt2[4]&tmpC1[3];tmpC2[5]=tmpd2[5]|tmpt2[5]&tmpd2[4]|tmpt2[5]&tmpt2[4]&tmpC1[3];tmpC2[6]=tmpd2[6]|tmpt2[6]&tmpd2[5]|tmpt2[6]&tmpt2[5]&tmpt2[4]&tmpC1[3];tmpC2[8]=tmpd2[8]|tmpt2[8]&tmpC1[7];tmpC2[9]=tmpd2[9]|tmpt2[9]&tmpd2[8]|tmpt2[9]&tmpt2[8]&tmpC1[7];tmpC2[10]=tmpd2[10]|tmpt2[10]&tmpd2[9]|tmpt2[10]&tmpt2[9]&tmpt2[8]&tmpC1[7];tmpC2[12]=tmpd2[12]|tmpt2[12]&tmpC1[11];tmpC2[13]=tmpd2[13]|tmpt2[13]&tmpd2[12]|tmpt2[13]&tmpt2[12]&tmpC1[11];tmpC2[14]=tmpd2[14]|tmpt2[14]&tmpd2[13]|tmpt2[14]&tmpt2[13]&tmpt2[12]&tmpC1[11];tmpC2[16]=tmpd2[16]|tmpt2[16]&tmpC1[15];tmpC2[17]=tmpd2[17]|tmpt2[17]&tmpd2[16]|tmpt2[17]&tmpt2[16]&tmpC1[15];tmpC2[18]=tmpd2[18]|tmpt2[18]&tmpd2[17]|tmpt2[18]&tmpt2[17]&tmpt2[16]&tmpC1[15];tmpC2[19]=tmpD1[5]|tmpT1[5]&tmpC1[15];tmpC2[23]=tmpD1[6]|tmpT1[6]&tmpC1[15];tmpC2[27]=tmpD1[7]|tmpT1[7]&tmpC1[15];tmpCout1=tmpD1[8]|tmpT1[8]&tmpC1[15];end////////////////////////t第五个时钟周期///////////////////////////对输入的加数A,被加数B,低位进位Cin作五级级暂存//对进位部分进位C作三级暂存//对最高进位Cout作一级暂存//计算进位C[22:20],C[26:24],C[30:28]always@(posedgeclk)begintmpA5=tmpA4;tmpB5=tmpB4;tmpCin5=tmpCin4;tmpC3[19:0]=tmpC2[19:0];tmpC3[23]=tmpC2[23];tmpC3[27]=tmpC2[27];tmpCout2=tmpCout1;tmpC3[20]=tmpd3[20]|tmpt3[20]&tmpC2[19];tmpC3[21]=tmpd3[21]|tmpt3[21]&tmpd3[20]|tmpt3[21]&tmpt3[20]&tmpC2[19];tmpC3[22]=tmpd3[22]|tmpt3[22]&tmpd3[21]|tmpt3[22]&tmpt3[21]&tmpd3[20]|tmpt3[22]&tmpt3[21]&tmpt3[20]&tmpC2[19];tmpC3[24]=tmpd3[24]|tmpt3[24]&tmpC2[23];tmpC3[25]=tmpd3[25]|tmpt3[25]&tmpd3[24]|tmpt3[21]&tmpt3[20]&tmpC2[23];tmpC3[26]=tmpd3[26]|tmpt3[26]&tmpd3[25]|tmpt3[
本文标题:32位双重快速跳跃进位链六级流水线加法器Verilog的实现
链接地址:https://www.777doc.com/doc-5714940 .html