您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 作业-基于verilog-HDL的八位超前进位加法器
基于verilogHDL的八位超前进位加法器Verilog综合作业陈孙文2011-10-25指导老师:邓婉玲老师目录:1.超前进位加法器原理2.算法代码3.modelsimSE软件实现功能仿真4.synplifypro软件实现综合正文:一、原理(1)、全加器列出真值表如表所示,若Ai、Bi两个一位二进制数相加,以Ci表示来自低位的的进位,Si表示和,Ci表示向高位的进位,可以看出该电路考虑来低位的进位,是一个一位数的全加器电路,其逻辑符号如图所示。串并行超前进位加法器的特点是:各级进位信号同时产生,减小或消除因进位信号逐级传递所用的时间。每一位的进位信号不依赖于从低位逐级传递,而是—开始就能确定。全加器真值可以得到逻辑表达式:为表达简单,定义两个中间变量Gi和Pi得出得到各位进位信号的逻辑表达式为:当实际位数较多时,往往将全部数位按4位一组分成若干组,组内采用超前进位,组间采用串行进价,组成所谓的串并行进位加法器。二、算法代码:有4bits.v、8bits.v、testbench.v三个文件;4bits.v实现输入为4位数的加法器;8bits.v中调用4bits.v中的函数来实现8位数相加;testbench.v为测试代码;实现四位加法4bits.v部分:modulefast_adder4b(ina,inb,carry_in,sum_out,clk,rst_n);parameterADDER_WIDTH=4;parameterSUM_WIDTH=5;input[ADDER_WIDTH-1:0]ina;//输入数ina,8位input[ADDER_WIDTH-1:0]inb;//输入数inb,8位inputcarry_in;inputrst_n;inputclk;output[SUM_WIDTH-1:0]sum_out;reg[SUM_WIDTH-1:0]sum_out;wire[ADDER_WIDTH-1:0]sg;wire[ADDER_WIDTH-1:0]sp;wire[ADDER_WIDTH-1:0]sc;assignsg[0]=ina[0]&inb[0];//中间变量G0=ina0&inb0;assignsg[1]=ina[1]&inb[1];assignsg[2]=ina[2]&inb[2];assignsg[3]=ina[3]&inb[3];assignsp[0]=ina[0]^inb[0];//中间变量P0=ina0^inb0;assignsp[1]=ina[1]^inb[1];assignsp[2]=ina[2]^inb[2];assignsp[3]=ina[3]^inb[3];assignsc[0]=sg[0]|(sp[0]&carry_in);//进位位C0assignsc[1]=sg[1]|(sp[1]&(sg[0]|(sp[0]&carry_in)));assignsc[2]=sg[2]|(sp[2]&(sg[1]|(sp[1]&(sg[0]|(sp[0]&carry_in)))));assignsc[3]=sg[3]|(sp[3]&(sg[2]|(sp[2]&(sg[1]|(sp[1]&(sg[0]|(sp[0]&carry_in)))))));always@(posedgeclkornegedgerst_n)beginif(!rst_n)sum_out=5'b00000;elsebeginsum_out[0]=sp[0]^carry_in;//输出结果位sum_out[1]=sp[1]^sc[0];sum_out[2]=sp[2]^sc[1];sum_out[3]=sp[3]^sc[2];sum_out[4]=sc[3];endendendmodule实现八位加法8bits.v部分:modulepipe_adder8b(ina,inb,sum_out,clk,rst_n);parameterADDER_WIDTH=8;parameterSUM_WIDTH=9;parameterHALF_ADDER_WIDTH=4;input[ADDER_WIDTH-1:0]ina;input[ADDER_WIDTH-1:0]inb;inputrst_n;inputclk;output[SUM_WIDTH-1:0]sum_out;reg[SUM_WIDTH-1:0]sum_out;reg[HALF_ADDER_WIDTH-1:0]ina_lsb;reg[HALF_ADDER_WIDTH-1:0]ina_msb;reg[HALF_ADDER_WIDTH-1:0]inb_lsb;reg[HALF_ADDER_WIDTH-1:0]inb_msb;reg[HALF_ADDER_WIDTH-1:0]ina_msb1;reg[HALF_ADDER_WIDTH-1:0]inb_msb1;reg[HALF_ADDER_WIDTH:0]sum11;wire[HALF_ADDER_WIDTH:0]sum1;wire[HALF_ADDER_WIDTH:0]sum2;always@(posedgeclkornegedgerst_n)beginif(!rst_n)beginina_lsb=4'b0000;ina_msb=4'b0000;inb_lsb=4'b0000;inb_msb=4'b0000;endelsebeginina_lsb=ina[3:0];ina_msb=ina[7:4];inb_lsb=inb[3:0];inb_msb=inb[7:4];endendfast_adder4bu1(ina_lsb,inb_lsb,1'b0,sum1,clk,rst_n);//低四位调用4位加法器模块always@(posedgeclkornegedgerst_n)beginif(!rst_n)beginina_msb1=4'b0000;inb_msb1=4'b0000;endelsebeginina_msb1=ina_msb;inb_msb1=inb_msb;endendfast_adder4bu2(ina_msb1,inb_msb1,sum1[4],sum2,clk,rst_n);//高四位调用4位加法器模块always@(posedgeclkornegedgerst_n)beginif(!rst_n)sum11=4'b0000;elsesum11=sum1;endalways@(posedgeclkornegedgerst_n)beginif(!rst_n)sum_out=9'b0000_00000;elsesum_out={sum2,sum11[3:0]};endendmoduletestbengch.v部分:`timescale1ns/1nsmoduletest_8a;regclk,rst_n;reg[7:0]ina,inb;wire[8:0]sum_out;always#20clk=~clk;//时钟信号40ns一个周期initialbeginrst_n=1;clk=0;#30ina=43;//给a赋值43inb=61;#200rst_n=0;#40rst_n=1;#2000$stop;end//fast_adder4bbbb(.ina(ina),.inb(inb),.carry_in(1'b0),.sum_out(sum_out),.clk(clk),.rst_n(rst_n));pipe_adder8bte(.ina(ina),.inb(inb),.sum_out(sum_out),.clk(clk),.rst_n(rst_n));endmodule三、modelsim软件实现功能仿真三个代码文件compile通过之后,执行simulation;添加待观察端口到波形图wave中,执行simulation-runall命令,在wave波形图中得到以下的仿真波形:四、synplifypro软件综合fast_adder4bu1fast_adder4bu2ina_lsb[3:0]Rina_msb[3:0]Rinb_lsb[3:0]Rinb_msb[3:0]Rsum11[3:0]Rsum_out[8:0]Rina_msb1[3:0]Rinb_msb1[3:0]Rrst_nclksum_out[8:0][8:0]inb[7:0][7:0]ina[7:0][7:0][4:0][3:0]0carry_inclkrst_n[3:0]ina[3:0][3:0]inb[3:0][4:0]sum_out[4:0][4]carry_inclkrst_n[3:0]ina[3:0][3:0]inb[3:0][4:0]sum_out[4:0][3:0]Q[3:0][3:0]D[3:0][3:0]Q[3:0][7:4]D[3:0][3:0]Q[3:0][3:0]D[3:0][3:0]Q[3:0][7:4]D[3:0][3:0]Q[3:0][3:0]D[3:0][8:0]Q[8:0]D[8:0][3:0]Q[3:0][3:0]D[3:0][3:0]Q[3:0][3:0]D[3:0]
本文标题:作业-基于verilog-HDL的八位超前进位加法器
链接地址:https://www.777doc.com/doc-4444125 .html