ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:100.23KB ,
资源ID:6634538      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6634538.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验二 加减法运算器的设计实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验二 加减法运算器的设计实验报告.docx

1、实验二 加减法运算器的设计实验报告加减法运算器的设计实验报告实验二 加减法运算器的设计一、实验目的 1、理解加减法运算器的原理图设计方法2、掌握加减法运算器的VERILOG语言描述方法3、理解超前进位算法的基本原理4、掌握基于模块的多位加减运算器的层次化设计方法5、掌握溢出检测方法和标志线的生成技术6、掌握加减运算器的宏模块设计方法二、实验任务 1、用VERILOG设计完成一个4位行波进位的加减法运算器,要求有溢出和进位标志,并封装成模块。模块的端口描述如下:module lab2_RippleCarry 宽度可定制(默认为4位)的行波进位有符号数的加减法器。 #(parameter WIDT

2、H=4)( input signed WIDTH-1:0 dataa, input signed WIDTH-1:0 datab, input add_sub, / if this is 1, add; else subtract input clk, input cclr, input carry_in, /1 表示有进位或借位 output overflow, output carry_out, output reg WIDTH-1:0 result)2、修改上述运算器的进位算法,设计超前进位无符号加法算法器并封装成模块。模块的端口描述如下:module lab2_LookaheadCar

3、ry / 4位超前进位无符号加法器( input 3:0 a, input 3:0 b, input c0, /carry_in input clk, input cclr, output reg carry_out, output reg 3:0sum);3、在上述超前进位加法运算器的基础上,用基于模块的层次化设计方法,完成一个32位的加法运算器,组内超前进位,组间行波进位。4、用宏模块的方法实现一个32位加减运算器。三、实验内容1、用VERILOG设计完成一个4位行波进位的加减法运算器,要求有溢出和进位标志,并封装成模块。模块的端口描述如下:1)将清零信号cclr(sw16)设为1无效,将

4、控制加减的信号add_sub(sw17)设为1加法,将输入信号dataa(sw3sw0)和输入信号datab(sw7sw4)设为几组不同的值,观察输出信号result(ledr3ledr0),输出信号overflow(ledg6),和输出信号carry_out(ledr7)观察并记录输出;2)将清零信号cclr(sw16)设为0有效,将原来的数据清除,观察并记录输出,可以验证清零是否有效;3)再将清零信号cclr(sw16)设为1无效,将控制加减的信号add_sub(sw17)设为0减法,将输入信号dataa(sw3sw0)和datab(sw7sw4)设为几组不同的值,观察输出信号result

5、(ledr3ledr0),输出信号overflow(ledg6),和输出信号carry_out(ledr7)观察并记录输出,观察并记录输出。4)在时钟信号处输入一个上升沿(按下key0),观察并记录输出。2、超前进位无符号加法算法器并封装成模块1)将清零信号cclr(sw17)设为1无效,将输入信号a(sw3sw0)和b(sw7sw4)和c0(sw15)设为几组不同的值,观察输出信号sum(ledg3ledg0)和carry_out(ledg7),观察并记录输出;2)将清零信号cclr(sw17)设为0有效,观察是否可以清零,验证清零是否有效,观察并记录输出。3、用基于模块2的层次化设计方法,

6、完成一个32位的加法运算器,组内超前进位,组间行波进位。 1)调用一个32计数器模块并封装,引用两个该计数器,分别给的加数和被加数输入,将低位来的进位c0(sw0)设为0,加法器清零信号cclr(sw17)设为0无效,计数器的使能控制端enable(sw15)设为 1有效,计数器的复位信号reset1(sw0)设为0无效,观察并记录观察结果; 2)在1)的基础上,将低位来的进位c0(sw0)设为1,加法器清零信号cclr(sw17)设为0无效,计数器的使能控制端enable(sw15)设为 1有效,计数器的复位信号reset1(sw0)设为0无效,观察并记录观察结果; 3)在1)的基础上,将低

7、位来的进位c0(sw0)设为0,加法器清零信号cclr(sw17)设为1有效,计数器的使能控制端enable(sw15)设为 1有效,计数器的复位信号reset1(sw0)设为0无效,观察并记录观察结果; 4)在1)的基础上,将低位来的进位c0(sw0)设为0,加法器清零信号cclr(sw17)设为0无效,计数器的使能控制端enable(sw15)设为 0无效,计数器的复位信号reset1(sw0)设为0无效,观察并记录观察结果; 5)在1)的基础上,将低位来的进位c0(sw0)设为0,加法器清零信号cclr(sw17)设为1有效,计数器的使能控制端enable(sw15)设为 1有效,计数器

8、的复位信号reset1(sw0)设为1有效,观察并记录观察结果;4、用宏模块的方法实现一个32位加减运算器 1)引用一个32位的加减法器,并将其封装成模块,仍用任务三中的32位计数器给加数和被加数值; 2)将输入信号cclr(sw16)设为0无效,加减法控制信号add_sub(sw17)设为1加法,计数器的使能信号enable(sw15)设为1,计数器的复位信号reset1(sw0)设为0无效,观察在信号检测中引出的观察对象; 3)将输入信号cclr(sw16)设为0无效,加减法控制信号add_sub(sw17)设为0减法,计数器的使能信号enable(sw15)设为1,计数器的复位信号res

9、et1(sw0)设为0无效,观察在信号检测中引出的观察对象; 4)将输入信号cclr(sw16)设为0无效,加减法控制信号add_sub(sw17)设为1加法,计数器的使能信号enable(sw15)设为1有效,计数器的复位信号reset1(sw0)设为1有效,观察在信号检测中引出的观察对象; 5)将输入信号cclr(sw16)设为0无效,加减法控制信号add_sub(sw17)设为1加法,计数器的使能信号enable(sw15)设为0无效,计数器的复位信号reset1(sw0)设为1有效,观察在信号检测中引出的观察对象。 四、实验仪器及设备:一、电脑( Quartus 10.0) 二、DE2

10、_115开发板 五、实验步骤1 根据自己预习情况,编写VERILOG代码2进行功能仿真进行分析与综合,排除语法上的错误建立波形仿真文件,输入激励生成功能仿真网表进行功能仿真,观察输出结果3选择器件选择DE2_115开发板的CYCLONE IV 4CE1154 分配管脚5 下载验证DE2_115开发板的下载:使用USB-Blaster进行下载6按照实验要求设置波段开关,观察LEDR0的显示,验证任务一、二的功能是否正确。7按照实验原理进行仿真,验证任务三、四的结果,仿真图像如下:任务三任务四六、实验心得通过本次加减法运算器的设计的实验,我进一步了解了Verilog语言的基本语法,利用Verilo

11、g语句实现了用VERILOG设计的带有溢出和进位标志的一个4位行波进位的加减法运算器,超前进位无符号加法算法器,并将其封装为模块,调用实现了32位的加法计数器(组内超前,组间行波行进),以及用宏模块的方法实现一个8位加减运算器。在验证试验准确性时,学会了如何利用DE2_115开发板进行检测。另外,在实验过程中,我也了解到了,我们要时刻细心严谨,认真做好每一步,避免出现低级错误。七、思考题1、加减运算电路中减法是如何实现的? 回答:在加减运算电路中,一个数减去另一个数是由一个数加上另一个数的补码(即加上这个数取反再加1)来实现的。1、超前进位的原理是什么?回答:超前进位加法器是利用输入信号同时计

12、算出每一位的进位产生信号和进位传递信号,各级的进位彼此独立产生,只与输入数据和C0有关,将各级间的进位级联传播给去掉了,因此减小了进位产生的延迟,实现了各位的并行运算。令Gi 为进位产生信号, Pi 为进位传递信号则Ci+1= Gi+ Pi *Ci即:C1=G0 + P0C0C2=G1 + P1C1 = G1 + P1G0 + P1P0 C0C3=G2 + P2C2 = G2 + P2G1 + P2P1G0 + P2P1P0C0C4=G3 + P3C3 = G3 + P3G2 + P3P2G1 + P3P2P1G0 + P3P2P1P0C02、列出三种溢出检测算法?回答:(1)根据操作数的符号

13、位来检测 fa和fb分别表示两个操作数的(a,b)的符号位,fs表示结果的符号位,则溢出信号为OVL =,若OVL=1则表示有溢出,若为0则没有溢出。 (2)根据进位来检测 Ci表示符号位的进位,C表示数值最高位的进位,则溢出信号OVL=CiC,若OVL=1则表示有溢出,若为0则没有溢出。 (3)双符号位法 fs1和fs2表示结果的双符号位,则则溢出信号OVL=fs1fs2,若OVL=1则表示有溢出,若为0则没有溢出。3、标志线的生成方法是什么?回答:在此我们的设计方案中采取双符号位法,对输入数据进行双符号位表示,标志位取最终结果高两位的异或值,若结果为1,表示存在溢出;否则,表示没有溢出。4

14、、如何理解模块封装和层次化的设计思想?回答:将一个设计分为不同的层次进行设计,然后对每一部分的设计进行封装,最后在总的设计中进行调用。模块化的设计很好的体现了自上而下的设计思想。对于较大的工程,可以清洗的明白设计的逻辑,另外封装好的模块可以多次调用,节省了设计时间。5、宏模块的设计有何优点与缺点?应在何时使用?回答:优点:直接调用系统的模块,大大节省了设计者的时间,并且减少了设计者出错的可能性,方便快捷。 缺点:宏模块都是已经定以设计好的,用户不能根据自己的需要进行修改,因此具有一定的局限性。 何时使用:在设计对模块内部构造要求不高时,可以使用宏模块,以减少设计的工作量。八、Verilog代码

15、1、实现用VERILOG设计完成一个4位行波进位的加减法运算器,要求有溢出和进位标志,并封装成模块。module lab_2_1#(parameter WIDTH=4)( input signed WIDTH-1:0 dataa, input signed WIDTH-1:0 datab, input add_sub, / if this is 1, add; else subtract input clk, input cclr, input carry_in, output overflow, output carry_out, output reg WIDTH-1:0 result);w

16、ire WIDTH:0 dataa_temp;wire WIDTH:0 datab_temp;reg WIDTH:0 ci_temp;reg WIDTH:0 result_temp;reg carry_in_temp;integer i; integer temp;assign dataa_tempWIDTH:0= dataaWIDTH-1,dataaWIDTH-1:0;assign datab_tempWIDTH:0=(add_sub=1)?databWIDTH-1,databWIDTH-1:0:databWIDTH-1,databWIDTH-1:0;assign overflow = (r

17、esult_tempWIDTHresult_tempWIDTH-1)? 1b1:1b0; assign carry_out=ci_tempWIDTH;always (dataa_temp or datab_temp or carry_in ) begin carry_in_temp=(add_sub=1)?carry_in:carry_in; ci_temp0=carry_in_temp; temp=carry_in_temp; result_temp0= dataa_temp0datab_temp0ci_temp0; for (i=0;iWIDTH;i=i+1) begin ci_tempi

18、+1=(dataa_tempidatab_tempi)&temp|(dataa_tempi&datab_tempi);/ result_tempi+1= dataa_tempi+1datab_tempi+1ci_tempi+1; temp=ci_tempi+1; end endalways (posedge clk or negedge cclr) begin if (!cclr ) begin resultWIDTH-1:0 = 4b0000; end else begin resultWIDTH-1:0=result_tempWIDTH-1:0; end endendmodule2、实现修

19、改上述运算器的进位算法,设计超前进位无符号加法算法器并封装成模块module lab_2_2 ( input 3:0 a, input 3:0 b, input c0, input clk, input cclr, output reg carry_out, output reg 3:0sum);wire c1,c2,c3,c4;wire p0,p1,p2,p3; wire g0,g1,g2,g3; wire sum0,sum1,sum2,sum3;assign g0=a0&b0;assign g1=a1&b1;assign g2=a2&b2;assign g3=a3&b3;assign p0

20、=a0b0;assign p1=a1b1;assign p2=a2b2;assign p3=a3b3;assign c1=g0|c0&p0;assign c2=g1|(g0&p1)|(c0&p0&p1);assign c3=g2|(g1&p2)|(g0&p1&p2)|(c0&p0&p1&p2);assign c4=g3|(g2&p3)|(g1&p2&p3)|(g0&p1&p2&p3)|(c0&p0&p1&p2&p3);assign sum0=p0c0;assign sum1=p1c1;assign sum2=p2c2;assign sum3=p3c3;always (posedge clk o

21、r negedge cclr) begin if (!cclr) begin sum= 0; carry_out=0; end else begin sum=sum3,sum2,sum1,sum0; carry_out=c4; end endendmodule3、实现计数器的Verilog代码module counter#(parameter WIDTH=64)( input clk, reset, output reg WIDTH-1:0 count); / Reset if needed, or increment if counting is enabled always (posedg

22、e clk or posedge reset) begin if (reset) count = 0; else count = count + 1; endendmodule4、实现调用宏模块以及实例化的Verilog代码module lab2_4(input CCLR,CLK,A_B,EN,input 31:0A,B,output 31:0 RESULT,output OVERFLOW);rr rr_inst ( .aclr ( CCLR ), .add_sub ( A_B ), .clk_en ( EN), .clock ( CLK), .dataa ( A), .datab ( B ), .overflow ( OVERFLOW), .result ( RESULT) );endmodule

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1