作业-基于verilog HDL的八位超前进位加法器

2019-01-19 11:08

基于verilog HDL的八位超前进位加法器

Verilog 综合作业 陈孙文

2011-10-25

指导老师:邓婉玲老师

目录:

1. 超前进位加法器原理 2. 算法代码

3. modelsim SE软件实现功能仿真 4. synplify pro软件实现综合

正文:

一、原理 (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部分:

module fast_adder4b(ina,inb,carry_in,sum_out,clk,rst_n); parameter ADDER_WIDTH=4; parameter SUM_WIDTH=5;

input [ADDER_WIDTH-1:0]ina; //输入数ina,8位 input [ADDER_WIDTH-1:0]inb; //输入数inb,8位 input carry_in; input rst_n; input clk;

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;

assign sg[0]=ina[0]&inb[0]; //中间变量G0=ina0&inb0; assign sg[1]=ina[1]&inb[1]; assign sg[2]=ina[2]&inb[2]; assign sg[3]=ina[3]&inb[3];

assign sp[0]=ina[0]^inb[0]; //中间变量P0=ina0^inb0; assign sp[1]=ina[1]^inb[1]; assign sp[2]=ina[2]^inb[2]; assign sp[3]=ina[3]^inb[3];

assign sc[0]=sg[0]|(sp[0]&carry_in); //进位位C0 assign sc[1]=sg[1]|(sp[1]&(sg[0]|(sp[0]&carry_in)));

assign sc[2]=sg[2]|(sp[2]&(sg[1]|(sp[1]&(sg[0]|(sp[0]&carry_in)))));

assign sc[3]=sg[3]|(sp[3]&(sg[2]|(sp[2]&(sg[1]|(sp[1]&(sg[0]|(sp[0]&carry_in))))))); always@(posedge clk or negedge rst_n) begin

if(!rst_n)

sum_out<=5'b00000; else

begin

sum_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]; end end endmodule

实现八位加法8bits.v部分:

module pipe_adder8b(ina,inb,sum_out,clk,rst_n); parameter ADDER_WIDTH=8; parameter SUM_WIDTH=9;

parameter HALF_ADDER_WIDTH=4; input [ADDER_WIDTH-1:0]ina; input [ADDER_WIDTH-1:0]inb; input rst_n; input clk;

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 @(posedge clk or negedge rst_n) begin

if(!rst_n) begin

ina_lsb<=4'b0000; ina_msb<=4'b0000; inb_lsb<=4'b0000; inb_msb<=4'b0000; end else begin

ina_lsb<=ina[3:0]; ina_msb<=ina[7:4]; inb_lsb<=inb[3:0]; inb_msb<=inb[7:4]; end end

fast_adder4b u1(ina_lsb,inb_lsb,1'b0,sum1,clk,rst_n); //低四位调用4位加法器模块

always @(posedge clk or negedge rst_n) begin

if(!rst_n) begin

ina_msb1<=4'b0000; inb_msb1<=4'b0000; end else begin

ina_msb1<=ina_msb; inb_msb1<=inb_msb; end end

fast_adder4b u2(ina_msb1,inb_msb1,sum1[4],sum2,clk,rst_n); always @(posedge clk or negedge rst_n) begin

if(!rst_n)

sum11<=4'b0000; else

sum11<=sum1; end

always @(posedge clk or negedge rst_n) begin

if(!rst_n)

sum_out<=9'b0000_00000; else

sum_out<={sum2,sum11[3:0]}; end endmodule

testbengch.v部分: `timescale 1ns/1ns module test_8a; reg clk,rst_n; reg [7:0]ina,inb; wire [8:0]sum_out;

always #20 clk=~clk; //时钟信号40ns一个周期 initial begin

rst_n=1; clk=0; #30

ina=43; //给a赋值43 inb=61; #200 rst_n=0; #40 rst_n=1; #2000 $stop; end

//高四位调用4位加法器模块 //fast_adder4b bbb(.ina(ina),.inb(inb),.carry_in(1'b0),.sum_out(sum_out),.clk(clk),.rst_n(rst_n)); pipe_adder8b te(.ina(ina),.inb(inb),.sum_out(sum_out),.clk(clk),.rst_n(rst_n)); endmodule

三、 modelsim软件实现功能仿真

三个代码文件compile通过之后,执行simulation;添加待观察端口到波形图wave中,执行simulation->run all命令,在wave波形图中得到以下的仿真波形:

四、 synplify pro软件综合

[3:0]clkina[7:0]D[3:0]RQ[3:0][3:0][7:0][7:4]D[3:0]Q[3:0][3:0]Rrst_nina_msb[3:0]fast_adder4bcarry_inclkrst_nsum_out[4:0][3:0][4:0][4:0]ina_msb1[3:0][4][3:0]D[8:0]RQ[8:0][8:0][8:0]sum_out[8:0]ina[3:0]inb[3:0]inb[7:0]R[7:0][7:4]D[3:0]Q[3:0][3:0][3:0]D[3:0]Q[3:0][3:0][3:0]Ru2sum_out[8:0]inb_msb[3:0]inb_msb1[3:0]0fast_adder4b[3:0]D[3:0]RQ[3:0][3:0][3:0][3:0]D[3:0]sum_out[4:0][4:0]Q[3:0]ina[3:0]inb[3:0][3:0]R[3:0]carry_inclkrst_nsum11[3:0]ina_lsb[3:0]u1[3:0]D[3:0]Q[3:0][3:0]Rinb_lsb[3:0]


作业-基于verilog HDL的八位超前进位加法器.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:冲床送料机生产线,冲床的吨位计算公式

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: