




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于DE2 115开发板的FPGA入门设计实验 于基于DE2-115开发板的FPGA入门设计实验 1、Lab1:4位加法器、减法器的设计1.1摘要在文件add_sub里面的工程文件operation_4.v为顶层文件,该顶层文件包含了三个子模块,分别为数码管显示模块,4位带进位的二进制加法器模块和4位带借位的二进制减法器模块,最后通过DE2-115开发板显示实验结果。 1.2程序1)add_4bits.v加法器module adder_4bits(input clk,input rst_n,input3:0x,input3:0y,output reg3:0sum,output regcarry_out/溢出位);always(posedge clkor negedgerst_n)begin if(!rst_n)carry_out,sum=0;elsecarry_out,sum=x+y;end endmodule2)substractor_4bits.v减法器module subtractor_4bits(input clk,input rst_n,input3:0x,input3:0y,output reg3:0sub,output regborrow_out);always(posedge clkor negedgerst_n)begin if(!rst_n)borrow_out,sub=y)borrow_out,sub=1b0,x-y;elseborrow_out,sub=1b1,x-y;end end endmodule3)seg7_lut.v数码管显示译码模块module Seg7_lut(input3:0iDIG,output reg6:0oSEG);always(iDIG)begin case(iDIG)4h1:oSEG=7b1111001;/-t-4h2:oSEG=7b0100100;/|4h3:oSEG=7b0110000;/lt rt4h4:oSEG=7b0011001;/|4h5:oSEG=7b0010010;/-m-4h6:oSEG=7b0000010;/|4h7:oSEG=7b1111000;/lb rb4h8:oSEG=7b0000000;/|4h9:oSEG=7b0011000;/-b-4ha:oSEG=7b0001000;4hb:oSEG=7b0000011;4hc:oSEG=7b1000110;4hd:oSEG=7b0100001;4he:oSEG=7b0000110;4hf:oSEG=7b0001110;4h0:oSEG=7b1000000;endcase end endmodule1.3结果本设计通过Verilog HDL硬件描述语言。 描述加法、减法算法,包括了进位以及借位,最终可以在实验板上观察结果,验证了算法的正确性。 拨码开关SW7:0输入两位计算值,SW17为复位按键,如下图所示该实验结果显示的是7+b=02,进位位在LEDG0显示,7-b=12,借位位在LEDR0显示。 计算过程如下 2、Lab2:三位二进制乘法器的设计2.1摘要在文件mult_3bits里面的工程文件operation_4.v为顶层文件,该顶层文件包含了两个子模块,分别为数码管显示模块和三位二进制乘法器模块,最后通过DE2-115开发板显示实验结果。 2.2程序1)mult_3bits.v乘法器module mult_3bits(input2:0x,input2:0y,output5:0mult_out);wire2:0temp0=y0?x:3d0;wire2:0temp1=y1?x:3d0;wire2:0temp2=y2?x:3d0;assign mult_out=temp0+(temp11)+(temp22);endmodule2)seg7_lut.v文件与Lab1中的相同2.3结果本设计通过Verilog HDL硬件描述语言,通过移位以及加法,实现三位二进制乘法功能,最终可以在实验板上观察结果,验证了算法的正确性。 拨码开关SW6:0输入两位计算值,SW17为复位按键,如下图所示 3、Lab3:序列检测器的设计3.1摘要通过Verilog HDL硬件描述语言,按照要求,设计一个序列检测器,在检测到4b1111序列后输出高电平标志位,反之输出低电平。 电路在Quartus II中设计,最后通过波形图仿真和开发板得出实验结果。 3.2程序sequence_detect.v序列检测器module sequence_detect(input clk,input rst_n,input din_en,/H vaildinput din,output regdout);/capture theposedge ofdin_en fordata receivereg din_en_r0,din_en_r1;always(posedge clkor negedgerst_n)begin if(!rst_n)begin din_en_r0=0;din_en_r1=0;end elsebegin din_en_r0=din_en;din_en_r1=din_en_r0;endend wire din_flag=(din_en_r1&din_en_r0)?1b1:1b0;/din_en的值由0变1时,din_flag的值变为高电平维持一个时钟周期(脉冲边沿检测)/din_en作为数据输入的标志/-reg3:0sequence_data;/序列数据寄存器always(posedge clkor negedgerst_n)begin if(!rst_n)begin sequence_data=0;/初始化时寄存器状态dout=0;/寄存器输出为0end else if(din_flag)/din_en上升沿,din_flag=1begin sequence_data=sequence_data2:0,din;/串行输入dout=(sequence_data=4b1111)?1b1:1b0;endend endmodule3.3结果该程序中定义可串行输入接口din,串行输出接口dout,同时添加了数据输入标志信号din_en,以指示数据的输入。 串行数据输入序列通过移位操作,存入与sequence_data中,同时检测sequence_data,当出现4b1111时,dout输出1表示检测到了要求的序列。 其中仿真结果如下 4、Lab4:变模计数器的设计4.1摘要在设计一个计数器的前提下,要求模值可变,即计算器最大值可变。 因此,这要求能动态改变计数器的模值,同时在数码管上实时显示输出结果。 在文件variable_counter里面的工程文件variable_counter.v为顶层文件,该顶层文件包含了一个数码管显示子模块,最后通过DE2-115开发板显示实验结果。 4.2内容1)变模的实现模值可以通过选择,也可以通过输入,来动态改变。 在该实验中,通过一个拨码开关SW0来选择模值“16”或者“64”,实现选择通过一个选择语句即可实现。 如下语句wire7:0max_vaule=SW0?8d64:8d16;2)输出显示本实验通过2个7段数码管来显示数据。 同时为了肉眼能看到数据的变化,通过计数,实现0.25S的使能标志定点时间,以此标志位来作为计数器的计数周期,保证肉眼可以看得到数据的变化。 4.3程序1)variable_counter.v变模计数器顶层模块module variable_counter(input clk,/CLOCK_50input rst_n,/SW17input0:0SW,/SW0控制变模output6:0HEX0,/ge_data output6:0HEX1/shi_data);wire7:0max_vaule=SW0?8d64:8d16;reg23:0t;always(posedge clkor negedgerst_n)begin if(!rst_n)t=0;else t=(t=24d12500000)?24d0:t+1b1;endwire delay02_flag=(t=24d12500000)?1b1:1b0;/-reg7:0counter;/8位最大计数127always(posedge clkor negedgerst_n)begin if(!rst_n)counter=0;else if(delay02_flag)/计数0.25s counter=max_vaule)?8d0:counter+1b1;end/-/hex2decimal convertwire3:0shi_data=(counter10)?4d0:(counter20)?4d1:(counter30)?4d2:(counter40)?4d3:(counter50)?4d4:(counter60)?4d5:(counter70)?4d6:(counter80)?4d7:(counter90)?4d8:4d9;wire3:0ge_data=(counter10)?counter-8d0:(counter20)?counter-8d10:(counter30)?counter-8d20:(counter40)?counter-8d30:(counter50)?counter-8d40:(counter60)?counter-8d50:(counter70)?counter-8d60:(counter80)?counter-8d70:(counter90)?counter-8d80:counter-8d90;/shi_data displaySeg7_lut u_Seg7_lut1(.iDIG(shi_data),.oSEG(HEX1);/ge_data displaySeg7_lut u_Seg7_lut2(.iDIG(ge_data),.oSEG(HEX0);Endmodule2)Seg7_lut.v数码管显示模块与Lab1中的相同4.3结果SW0=0时,计数器的最大值为16SW0=1时,计数器的最大值为 645、Lab5:流水灯和简易电子时钟的设计在文件time_counter里面的工程文件Labtest.v为顶层文件,该顶层文件包含了三个子模块,分别为数码管显示模块,流水灯模块和计数器模块,实现数码管显示分、秒、毫秒计时的简易电子钟和流水灯显示。 5.1流水灯设计5.1.1摘要通过verilog HDL硬件描述语言,实现8个LED每隔1s点亮一个的功能。 5.1.2内容1)1S延时实现D2-115开发板的时钟频率为50Mhz,通过计数器计数50000000次,到点即输出使能标志,即可实现延时。 2)挨个点亮LED本设计通过移位操作来实现8个LED的挨个点亮功能,led_data=led_data6:0,1b1;/每一秒左移一位最后通过引脚配置,全局编译,下载到DE2-115中,观察现象,验证正确,如下图所示5.1.3程序Time_Counter文件夹下的led_display.v文件module led_display(input clk,input rst_n,output reg7:0led_data);/-reg27:0t;always(posedge clkor negedgerst_n)begin if(!rst_n)t=0;else t=(t=28d50_000000)?28d0:t+1b1;/1s endwiredelay01_flag=(t=28d50_000000)?1b1:1b0;always(posedge clkor negedgerst_n)beginif(!rst_n)led_data=0;elseif(delay01_flag)/计时1S led_data=led_data6:0,1b1;/每一秒左移一位endendmodule5.2简易电子时钟的设计5.2.1摘要在DE2-115开发板上,通过Verilog HDL硬件描述语言,实现分、秒、毫秒计时的简易电子时钟,并且通过数码管显示出来。 5.2.2内容和结果本实验主要内容是计数,其次,描述出分秒毫秒之间的计时关系,即可实现功能。 1)分秒毫秒计时根据晶振时钟的输入,通过计数实现1ms的delay,然后通过此标志位,进行“毫秒”(0999)计数,当“毫秒”到达999的时候,自动清零并且给秒进位,当“秒”到达59的时候,自动清零并且给分进位,当“分”到达59的时候,自动清零,重新计数,本实验通过一位拨码开关SW7控制复位,当SW7=0时,所有计数清零。 2)数码管显示根据要显示的数据,通过不同的段的点亮,来实现0-9的显示。 本实验分秒毫秒需要7位数码管,通过例化7个数码管显示电路,通过参数的传递,实现“分”高位、“分”低位、“秒”高位、“秒”低位、“毫秒”高位、“毫秒”中位、“毫秒”低位的实时显示。 最后通过引脚配置,全局编译,下载到DE2-115中,观察现象,验证正确,如下图所示,下面实验现象显示07分43秒388毫秒,7位7段数码管,时刻很准确。 5.2.3程序Time_Counter文件夹下的time_counter.v文件为分秒计时器模块。 Time_Counter文件夹下的seg7_lut.v文件为数码管显示模块。 Time_Counter文件夹下的Labtest.v文件为顶层模块,通过调用分秒计时器模块和数码管显示模块实现该分秒计时器的显示。 6、Lab6:简易计算器的设计文件Calculator_Design里面的工程文件Calculator_Design.v为顶层文件,该顶层文件包含了四个子模块,分别为按键消抖扫描模块,四位二进制乘法器模块,四位二进制加法器模块,数码管显示模块,实现计算乘法和加法的简易计算器的设计。 6.1摘要通过Verilog HDL硬件描述语言,设计一个简易计数器,实现09的加法算法,以及乘法算法。 6.2内容和结果1)加法、乘法电路在前面的实验中已经设计过加减法器电路和乘法电路2)按键扫描程序通常用户按键,在按下去之后,会有20ms左右的抖动,同时,在按键放开之后会有20ms左右的抖动。 在这时候若采集信号,势必导致误操作,甚至系统崩溃。 因此,在模拟或者数字电路中,我们要避免在最不稳定的时候采集信号,进行操作。 对此一般产用消抖动的原理。 一般可分为以下几种 (1)延时 (2)N次低电平计数 (3)低通滤波在数字电路中,可以掩饰,当然更方便的是直接N次采样,来判断是否改变,以及改变的时间。 因此做以下处理,进行N次计数,有效去噪声,抖动,以及干扰。 按键扫描模块将输出key_flag按键按下反馈信号,以及即时输出的数据3)数值输入与计算数值采用拨码开关输入,同时为了确保数值在用户拨动拨码开关后输入,更容易改变x或者y,由于硬件的局限,只能通过轻触按键的触发来实现数值的输入。 每个拨码开关代表一个值(0-9),同时,第一个轻触按键表示x的输入触发,第二个轻触按键表示y的输入触发,第三个表示输出x+y的结果,第四个表示输出x*y的结果。 4)数码管显示数码管译码电路跟之前的实验一样,通过点亮不同的段,来实现0-F的显示,简易计算x,y的值,以及结果刚好通过4位数码管显示出来,如下图所示,9+9=18,9*9=816.3程序Calculator_Design文件夹下的Calculator_Design.v为该设计的顶层模块Time_Counter文件夹下的seg7_lut.v文件为数码管显示模块。 Time_Counter文件夹下的key_scan.v文件为按键消抖扫描程序。 Time_Counter文件夹下的mult_4bits.v文件为四位二进制乘法器模块。 Time_Counter文件夹下的adder_4bits.v文件为四位二进制加法器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 平高集团安全生产培训课件
- 装灯安全协议书9篇
- 委婉提建议课件
- Fluralaner-intermediate-4-Acetyl-2-methylbenzoic-acid-生命科学试剂-MCE
- 央财张川川课件
- 平衡课件教学课件
- 农发行南充市南部县2025秋招笔试创新题型专练及答案
- 2025年新能源汽车内饰色彩搭配创新趋势研究报告
- 新能源汽车自动驾驶在新能源调度中的应用与调度系统升级报告
- 农发行宁德市福安市2025秋招笔试英语题专练及答案
- 脑电图基础知识及判读课件
- 病毒性脑炎临床路径(2016年版)
- 装修公司审计报告范本
- IATF16949项目移交管理程序
- 第三节酒店业的演变-课件
- GB/T 8758-2006砷化镓外延层厚度红外干涉测量方法
- GB/T 6396-2008复合钢板力学及工艺性能试验方法
- GB/T 35759-2017金属清洗剂
- ABB缠绕型干式变压器
- GB/T 21063.1-2007政务信息资源目录体系第1部分:总体框架
- 第三讲:新闻真实性分析课件
评论
0/150
提交评论