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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

FPGA实验报告.docx

1、FPGA实验报告本科生实习报告实习名称:FPGA综合实验 姓 名: 学 院:电气与控制工程学院 专业班级: 学 号: 指导教师: 二O一 七 年 三 月基本信息实习学生信息姓名 性别女学号出生年月 1996 年 2 月学院电器与控制工程学院专业微电子科学与工程班级1302班指导教师信息姓名性别职称女工程师男副教授实习单位信息实习单位名称 单位地址实习起至日期自 2017年3 月 6日至2017 年 3 月24 日自 年 月 日至 年 月 日自 年 月 日至 年 月 日自 年 月 日至 年 月 日自 年 月 日至 年 月 日实习记录周次实习内容记录病事假记录第一周周一了解FPGA综合实验内容和要

2、求;选择FPGA综合实验的题目;查阅相关资料。周二整理和学习相关资料;确定整体设计思路。周三根据系统功能要求进一步完善设计方案。周四进行硬件电路原理分析与设计。周五对所涉及的电路进行分析,确定相关参数第二周周一根据系统功能要求,采用硬件描述语言进行设计周二各功能模块设计周三各功能模块设计周四各功能模块设计周五各功能模块仿真验证实习记录周次实习内容记录病事假记录第三周周一系统整体仿真与分析周二下载程序到FPGA开发板,软件、硬件联合调试验证周三编程下载与调试验证周四调试验证成功后,给老师验收实验结果,撰写实验报告周五提交实验报告第四周周一周二周三周四周五实验报告基于FPGA的计算器设计与实验1、

3、实验目的 毕业实习是本科教学培养方案和教学计划的重要环节,是培养学生综合运用所学专业知识,分析总结和解决实际问题的最后一次实践环节,也是大学四年所学知识的一次全面综合训练,同时也可以增强学生适应社会的能力和就业竞争力。通过毕业实习,可以开阔学生视野、增强学生劳动观念;了解所学专业在工业生产要用到的设备、工作范围、工作性质;为毕业论文撰写积累经验。2、实验内容掌握4*4阵列键盘扫描原理,及存储器ROM、RAM的设计和应用,完成可以实现加减乘除功能的计算器的设计。3、实验要求 用4*4阵列键盘输入099整数操作;计算结果用LED数码管显示;采用FPGA作为运算控制器实现加减乘除等等基础计算功能。4

4、、设计思路 先把计算器分为五个模块:LED数码管显示模块,4*4键盘扫描分析电路,算术逻辑运算单元,数制转换模块,运算操作过程的状态机模块;然后分模块编写程序;最后用顶层文件将它们联系起来。5、设计原理 5.1 LED数码管显示模块设计原理 单个数码管共有8个显示段,每个显示段有一个独立的发光二极管组成,通过八位数据线控制LED的亮和灭,由此显示出设计者想要显示的字符和小数点。本实验采用共阴数码管,因此,若显示某段LED的另外一端为低电平,则该断LED灯熄灭,反之则点亮。 5.2 4*4键盘扫描分析电路设计原理 通过行列扫描确定4*4键盘上数字及运算符的准确位置,为防止按键按下瞬间链接不稳定,

5、在扫描模块中添加了去除按键抖动部分。44矩阵键盘原理图(图1)如下: 图1 44矩阵键盘原理图 5.3算术逻辑运算单元设计原理操作数a,b以及操作符opcode从键盘输入并转换为二进制数存入寄存器A、B,算数逻辑模块只做相应算数运算,对opcode=10、11、12、13时分别为加、减、乘、除。 5.4数制转换 (1)BCD码转制二进制码模块:计算模块只能对二进制进行运算,所 以需要将BCD码转成二进制数,才能送入计算模块进行运算。 其转换方法为: assign a23:0 = BCDa23:20*100000 + BCDa19:16*10000 + BCDa15:12*1000 + BCDa

6、11:8*100 +BCDa7:4*10+ BCDa3:0; (2)二进制码转制BCD码模块:计算结果需要用数码管显示,必须将 二进制数转成BCD码才能正常显示。其转换方法为: assign bcd23:20 = bin/100000; assign bcd19:16 = (bin/10000)%10; assign bcd15:12 = (bin/1000)%10; assign bcd11:8 = (bin/100)%10; assign bcd7:4 = (bin/10)%10; assign bcd3:0 = bin%10;六、实验结果6.1 加法运算(如图2)12+12=? 图26.

7、2 减法运算(如图3)12-3=? 图3 6.3 乘法运算(如图4) 12*3=? 图4 6.4 除法运算(如图5)12/3=? 图5七、遇到问题与解决方法7.1 问题:刚开始编写的程序中,错误比较多,也比较难找问题 解决方法:经老师提示,将程序分模块编写,然后分模块仿真,查找错误比较容易。7.2 问题:下载到实验箱后,按键后,数码管显示出现乱码 解决方法:检查程序后,发现程序是适用于共阳数码管的,将之改成适应于共阴的。8、心得体会 三周的实训已经过去了,我们在老师提供的实践平台上通过自己的实践学到了很多课本上学不到的宝贵东西,熟悉了对Quartus 软件的一般项目的操作和学到了处理简单问题的

8、基本方法,加深了对硬件描述语言的理解,尤其是本课题中乘法器的设计让我更清楚进程、变量、信号的使用及它们之间的区别。意识到了课程设计的重要性以及团队合作对于设计的重要性,更重要的是掌握了硬件描述语言的基本设计思路和方法,我想这些会对我今后的学习起到很大的助推作用。我还了解到了要加强培养动手能力,要明白理论与实践结合的重要性,只有理论知识也是不够的,只有把理论知识和实践相结合,才能真正提高我们的实际动手能力与独立思考的能力 。感谢学院给我们提供这次实训的机会,感谢老师对我们的指导,教会了我们如何运用所学的知识去解决实际的问题,此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了

9、,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。今后的理论知识学习过程中要一步一个脚印的扎实学习,灵活的掌握和运用专业理论知识这样才能在以后出去工作的过程中有所成果。附录程序清单:调用子程序模块:module cal(clk,rst_n,seg,sel,keyin,keyscan); input clk, rst_n; input 3:0 keyin; output 3:0 keyscan; output 2:0 sel; output 7:0 seg; wire clk_slow; wire 4:0 real_number; wire 23:0 BCDa,BC

10、Db,a,b,bin_data,result; wire 3:0 opcode; display u1( .clk(clk), .adata(BCDa), .bdata(BCDb), .rst_n(rst_n), .sel(sel), .seg(seg), .clk_slow(clk_slow) ); keyscan u2( .clk(clk_slow), .rst_n(rst_n), .keyscan(keyscan), .keyin(keyin), .real_number(real_number) ); keybcd u3( .clk(clk_slow), .real_number(re

11、al_number), .opcode(opcode), .rst_n(rst_n), .BCDa(BCDa), .BCDb(BCDb), .result(result) );bcdbin u4( .BCDa(BCDa), .BCDb(BCDb), .a(a), .b(b) ); binbcd u5( .bin(bin_data), .bcd(result) ); alu u6( .a(a), .b(b), .clk(clk_slow), .rst_n(rst_n), .opcode(opcode), .bin_data(bin_data) ); Endmodule数码管显示模块:module

12、 display(clk, rst_n, adata, bdata, sel, seg, clk_slow); input clk; input rst_n; input 23:0 adata,bdata;/状态机输出?/ output reg 2:0 sel; /weixuan/ output reg 7:0 seg; /duanxuan/ wire 23:0 data; reg 3:0 segdata; reg 15:0 cnt; /jishuqi/ output reg clk_slow; assign data = (bdata = 0) ? adata : bdata; /b=0-1

13、 always (posedge clk) begin if(!rst_n) begin cnt = 0; clk_slow = 1; end else begin cnt = cnt + 1; clk_slow = cnt12; end end always (posedge clk_slow or negedge rst_n) /saomiao begin if(!rst_n) begin sel = 0; end else begin sel = 5) sel = 0; end end always (*) begin if(!rst_n) begin segdata = 0; end

14、else begin case(sel) 5: segdata = data3:0; /ge 4: segdata = data7:4; /shi 3: segdata = data11:8; 2: segdata = data15:12; 1: segdata = data19:16; 0: segdata = data23:20; default: segdata = 0; endcase end end always (*) begin if(!rst_n) begin seg = 8hff; end else begin case(segdata) 0: seg = 8b0011111

15、1; /R-A L-.dp 1: seg = 8b00000110; 2: seg = 8b01011011; 3: seg = 8b01001111; 4: seg = 8b01100110; 5: seg = 8b01101101; 6: seg = 8b01111101; 7: seg = 8b00000111; 8: seg = 8b01111111; 9: seg = 8b01101111; default: seg = 8b00000000; endcase end endEndmodule键盘扫描模块:define OK 1b1 define NO 1b0 define NoKe

16、yIsPressed 17 module keyscan(clk,rst_n,keyscan,keyin,real_number); input clk,rst_n; input 3:0keyin; /hangsaomiao output 3:0 keyscan; /lieshuchu output 4:0 real_number; reg 3:0 state; reg 3:0 four_state; reg 3:0 scancode,scan_state; reg 4:0 numberout,number_reg,number_reg1,number_reg2, real_number; r

17、eg AnyKeyPressed;assign keyscan = scancode; always (posedge clk) if (!rst_n) begin scancode =4b0000; scan_state= 4b0000; end else if(AnyKeyPressed) /press botton scan-start case (scan_state) 4b0000: begin scancode=4b1110; scan_state= 4b0001; end 4b0001: begin scancode = scancode0,scancode3:1; end en

18、dcase else begin scancode =4b0000; scan_state= 4b0000; end always (posedge clk) if( !(&keyin) begin AnyKeyPressed = OK ; four_state = 4b0000; end else if(AnyKeyPressed) case(four_state) 4b0000: begin AnyKeyPressed = OK ; four_state=4b0001; end 4b0001: begin AnyKeyPressed = OK ; four_state=4b0010; en

19、d 4b0010: begin AnyKeyPressed = OK ; four_state=4b0100; end 4b0100: begin AnyKeyPressed = OK ; four_state=4b1000; end 4b1000: begin AnyKeyPressed = NO ; end default: AnyKeyPressed = NO ; endcase else four_state = 4b0000; always (posedge clk) /quedinganjian casex(scancode,keyin) 8b0111_1110: numberou

20、t = 5d10; /+ 8b1011_1110: numberout = 5d11; /- 8b1101_1110: numberout = 5d12; /* 8b1110_1110: numberout = 5d13; / 8b0111_1101: numberout = 5d3; 8b1011_1101: numberout = 5d6; 8b1101_1101: numberout = 5d9; 8b1110_1101: numberout = 5d14; /? 8b0111_1011: numberout = 5d2; 8b1011_1011: numberout = 5d5; 8b

21、1101_1011: numberout = 5d8; 8b1110_1011: numberout = 5d0; 8b0111_0111: numberout = 5d1; 8b1011_0111: numberout = 5d4; 8b1101_0111: numberout = 5d7; 8b1110_0111: numberout = 5d15; /= default: numberout =NoKeyIsPressed; endcase always (posedge clk) begin if (!rst_n) begin number_reg = 0; end else if(

22、numberout=5d0) begin number_reg = numberout; /anjianzhicunru jicunqi end else begin if(AnyKeyPressed = NO) number_reg = NoKeyIsPressed; end end always (posedge clk) /xiaochuanjiandoudong if (!rst_n) state = 4b0000; else case (state)4d0: begin number_reg1 = number_reg; state =4d1; end4d1: begin if(nu

23、mber_reg = number_reg1) state = 4d2; else state = 4d0; end4d2: begin if (number_reg = number_reg1) state = 4d3; else state = 4d0; end 4d3: begin if (number_reg = number_reg1) state = 4d4; else state = 4d0; end 4d4: begin if(number_reg = number_reg1) state =4d5; else state = 4d0; end4d5: begin if(num

24、ber_reg = number_reg1) state = 4d6; else state = 4d0; end4d6: begin if (number_reg = number_reg1) state = 4d7; else state = 4d0; end 4d7: begin if (number_reg = number_reg1) state = 4d8; else state = 4d0; end 4d8: begin if (number_reg = number_reg1) state =4d9; else state = 4d0; end4d9: begin if(num

25、ber_reg = number_reg1) state = 4d10; else state = 4d0; end4d10: begin if (number_reg = number_reg1) state = 4d11; else state = 4d0; end 4d11: begin if (number_reg = number_reg1) state = 4d12; else state = 4d0; end 4d12: begin if(number_reg = number_reg1) state = 4d13; else state = 4d0; end4d13: begi

26、n if (number_reg = number_reg1) state = 4d14; else state = 4d0; end 4d14: begin if (number_reg = number_reg1) state = 4d15; else state = 4d0; end 4d15: begin if (number_reg = number_reg1 ) begin state = 4d0; real_number =number_reg; end else state = 4b0000; end default: state = 4b0000; endcase endmodule状态机模块:module keybcd (clk, rst_n, real_number, opcode, /yunsuanfuhao BCDa, BCDb, result ); input 4:

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

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