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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于DE2115开发板的FPGA入门设计实验.docx

1、基于DE2115开发板的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, input 3:0 x, input 3:0 y, output reg 3:0 sum, out

2、put reg carry_out /溢出位);always(posedge clk or negedge rst_n)begin if(!rst_n) carry_out, sum = 0; else carry_out, sum = x + y;endendmodule2)substractor_4bits.v减法器module subtractor_4bits( input clk, input rst_n, input 3:0 x, input 3:0 y, output reg 3:0 sub, output reg borrow_out);always(posedge clk or

3、 negedge rst_n)begin if(!rst_n) borrow_out, sub = y) borrow_out, sub = 1b0, x - y; else borrow_out, sub = 1b1, x - y; endendendmodule3)seg7_lut.v 数码管显示译码模块module Seg7_lut ( input 3:0 iDIG, output reg 6:0 oSEG);always (iDIG)begin case(iDIG) 4h1: oSEG = 7b1111001; / -t- 4h2: oSEG = 7b0100100; / | | 4h

4、3: oSEG = 7b0110000; / lt rt 4h4: oSEG = 7b0011001; / | | 4h5: oSEG = 7b0010010; / -m- 4h6: oSEG = 7b0000010; / | | 4h7: oSEG = 7b1111000; / lb rb 4h8: oSEG = 7b0000000; / | | 4h9: oSEG = 7b0011000; / -b- 4ha: oSEG = 7b0001000; 4hb: oSEG = 7b0000011; 4hc: oSEG = 7b1000110; 4hd: oSEG = 7b0100001; 4he

5、: oSEG = 7b0000110; 4hf: oSEG = 7b0001110; 4h0: oSEG = 7b1000000; endcaseendendmodule1.3 结果 本设计通过Verilog HDL硬件描述语言。描述加法、减法算法,包括了进位以及借位,最终可以在实验板上观察结果,验证了算法的正确性。拨码开关SW7:0输入两位计算值,SW17为复位按键,如下图所示:该实验结果显示的是7+b=02,进位位在LEDG0显示,7-b=12,借位位在LEDR0显示。计算过程如下:2、Lab2: 三位二进制乘法器的设计2.1 摘要 在文件mult_3bits里面的工程文件operatio

6、n_4.v为顶层文件,该顶层文件包含了两个子模块,分别为数码管显示模块和三位二进制乘法器模块,最后通过DE2-115开发板显示实验结果。2.2 程序1)mult_3bits.v 乘法器module mult_3bits( input 2:0 x, input 2:0 y, output 5:0 mult_out);wire 2:0 temp0 = y0 ? x : 3d0;wire 2:0 temp1 = y1 ? x : 3d0;wire 2:0 temp2 = y2 ? x : 3d0; assign mult_out = temp0 + (temp1 1) + (temp2 2);end

7、module2)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 se

8、quence_detect( input clk, input rst_n, input din_en, /H vaild input din, output reg dout);/capture the posedge of din_en for data receivereg din_en_r0,din_en_r1;always(posedge clk or negedge rst_n)begin if(!rst_n) begin din_en_r0 = 0; din_en_r1 = 0; end else begin din_en_r0 = din_en; din_en_r1 = din

9、_en_r0; endendwire din_flag = (din_en_r1 & din_en_r0) ? 1b1 : 1b0;/din_en的值由0变1时,din_flag的值变为高电平维持一个时钟周期(脉冲边沿检测)/din_en作为数据输入的标志/-reg 3:0 sequence_data;/序列数据寄存器always(posedge clk or negedge rst_n)begin if(!rst_n) begin sequence_data = 0;/初始化时寄存器状态 dout = 0; /寄存器输出为0 end else if(din_flag)/din_en上升沿,d

10、in_flag=1 begin sequence_data = sequence_data2:0, din; /串行输入 dout = (sequence_data = 4b1111) ? 1b1 : 1b0; endendendmodule3.3 结果 该程序中定义可串行输入接口:din,串行输出接口dout,同时添加了数据输入标志信号din_en,以指示数据的输入。串行数据输入序列通过移位操作,存入与sequence_data中,同时检测sequence_data,当出现4b1111时,dout输出1表示检测到了要求的序列。其中仿真结果如下:4、Lab4: 变模计数器的设计4.1 摘要 在

11、设计一个计数器的前提下,要求模值可变,即计算器最大值可变。因此,这要求能动态改变计数器的模值,同时在数码管上实时显示输出结果。在文件variable_counter里面的工程文件variable_counter.v为顶层文件,该顶层文件包含了一个数码管显示子模块,最后通过DE2-115开发板显示实验结果。4.2 内容1)变模的实现 模值可以通过选择,也可以通过输入,来动态改变。在该实验中,通过一个拨码开关SW0来选择模值“16”或者“64”,实现选择通过一个选择语句即可实现。如下语句:wire 7:0 max_vaule = SW0 ? 8d64 : 8d16;2) 输出显示 本实验通过2个7

12、段数码管来显示数据。同时为了肉眼能看到数据的变化,通过计数,实现0.25S的使能标志定点时间,以此标志位来作为计数器的计数周期,保证肉眼可以看得到数据的变化。4.3 程序1) variable_counter.v 变模计数器顶层模块module variable_counter( input clk, /CLOCK_50 input rst_n, /SW17 input 0:0 SW, /SW0控制变模 output 6:0 HEX0, /ge_data output 6:0 HEX1 /shi_data);wire 7:0 max_vaule = SW0 ? 8d64 : 8d16;reg

13、23:0 cnt;always(posedge clk or negedge rst_n)begin if(!rst_n) cnt = 0; else cnt = (cnt = 24d12500000) ? 24d0 : cnt + 1b1;endwire delay02_flag = (cnt = 24d12500000) ? 1b1 : 1b0;/-reg 7:0 counter; /8位最大计数127always(posedge clk or negedge rst_n)begin if(!rst_n) counter = 0; else if(delay02_flag)/计数0.25s

14、 counter = max_vaule) ? 8d0 : counter + 1b1;end/-/hex2decimal convertwire 3:0 shi_data = (counter 10)? 4d0: (counter 20)? 4d1: (counter 30)? 4d2: (counter 40)? 4d3: (counter 50)? 4d4: (counter 60)? 4d5: (counter 70)? 4d6: (counter 80)? 4d7: (counter 90)? 4d8: 4d9;wire 3:0 ge_data = (counter 10)? cou

15、nter - 8d0: (counter 20)? counter - 8d10: (counter 30)? counter - 8d20: (counter 40)? counter - 8d30: (counter 50)? counter - 8d40: (counter 60)? counter - 8d50: (counter 70)? counter - 8d60: (counter 80)? counter - 8d70: (counter 90)? counter - 8d80: counter - 8d90; /shi_data displaySeg7_lut u_Seg7

16、_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为顶层文件,该顶层文件包含了三个子模块,分别为数码管显示模块,流水灯模块和计数器模块,实现数码管显示分、秒、毫秒计时的简易

17、电子钟和流水灯显示。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_displ

18、ay( input clk, input rst_n, output reg 7:0 led_data);/-reg 27:0 cnt;always(posedge clk or negedge rst_n)begin if(!rst_n) cnt = 0; else cnt = (cnt = 28d50_000000) ? 28d0 : cnt + 1b1; /1sendwire delay01_flag = (cnt = 28d50_000000) ? 1b1 : 1b0;always(posedge clk or negedge rst_n)begin if(!rst_n) led_da

19、ta = 0; else if(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的时候,自动清零并且给秒进位,当“秒”

20、到达59的时候,自动清零并且给分进位,当“分”到达59的时候,自动清零,重新计数,本实验通过一位拨码开关SW7控制复位,当SW7=0时,所有计数清零。2)数码管显示根据要显示的数据,通过不同的段的点亮,来实现0-9的显示。本实验分秒毫秒需要7位数码管,通过例化7个数码管显示电路,通过参数的传递,实现“分”高位、“分”低位、“秒”高位、“秒”低位、“毫秒”高位、“毫秒”中位、“毫秒”低位的实时显示。最后通过引脚配置,全局编译,下载到DE2-115中,观察现象,验证正确,如下图所示,下面实验现象显示07分43秒388毫秒,7位7段数码管,时刻很准确。5.2.3程序Time_Counter文件夹下的

21、time_counter.v文件为分秒计时器模块。Time_Counter文件夹下的seg7_lut.v文件为数码管显示模块。Time_Counter文件夹下的Labtest.v文件为顶层模块,通过调用分秒计时器模块和数码管显示模块实现该分秒计时器的显示。6、Lab6: 简易计算器的设计 文件Calculator_Design里面的工程文件Calculator_Design.v为顶层文件,该顶层文件包含了四个子模块,分别为按键消抖扫描模块,四位二进制乘法器模块,四位二进制加法器模块,数码管显示模块,实现计算乘法和加法的简易计算器的设计。6.1 摘要 通过Verilog HDL硬件描述语言,设计

22、一个简易计数器,实现09的加法算法,以及乘法算法。6.2 内容和结果1)加法、乘法电路 在前面的实验中已经设计过加减法器电路和乘法电路2)按键扫描程序 通常用户按键,在按下去之后,会有20ms左右的抖动,同时,在按键放开之后会有20ms左右的抖动。在这时候若采集信号,势必导致误操作,甚至系统崩溃。因此,在模拟或者数字电路中,我们要避免在最不稳定的时候采集信号,进行操作。对此一般产用消抖动的原理。一般可分为以下几种:(1)延时(2)N次低电平计数(3)低通滤波 在数字电路中,可以掩饰,当然更方便的是直接N次采样,来判断是否改变,以及改变的时间。因此做以下处理,进行N次计数,有效去噪声,抖动,以及

23、干扰。 按键扫描模块将输出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 程序Calc

24、ulator_Design文件夹下的Calculator_Design.v为该设计的顶层模块Time_Counter文件夹下的seg7_lut.v文件为数码管显示模块。Time_Counter文件夹下的key_scan.v文件为按键消抖扫描程序。Time_Counter文件夹下的mult_4bits.v文件为四位二进制乘法器模块。Time_Counter文件夹下的adder_4bits.v文件为四位二进制加法器模块。7、Lab7: LCD1602字符显示设计7.1 摘要 本设计基于Altera DE2-115开发平台,针对板载LCD字符显示器,通过Verilog硬件描述语言,采样状态机描述整个

25、时序,实现LCD1602的字符、数字的ASCII码显示。7.2 内容 驱动原理: 1)我们要明白LCD1602是慢速器件,如果直接用FPGA外接的50Mhz时钟直接驱动肯定是不行的,所以要对FPGA时钟进行分频驱动,或者计数延时使能驱动。这里采用的计数延时使能驱动,代码中通过计数器定时得出lcd_en信号线驱动,得到1Khz的频率,初始化LCD1602,如下图所示,LCD_EN的最小周期为500ns,则最大频率为2Mhz(不同的LCD1602的参数不相同)下面为LCD1602写操作的时序图和对时钟要求,来源于DE2-115开发板的LCD1602数据手册。 图1 写数据时序图图2 时序时间参数表

26、 2)通过三段式状态机,来初始化以及给数据。第一个状态机是时序进程,在时钟驱动下负责状态转换的过程,第二个状态机是组合进程,产生下一个状态的组合逻辑,描述状态转移规律,第三个状态机是同步时序进程,描述次状态寄存器的输出。 在状态机中,状态编码采用Gray编码,格雷码的相邻码元值间只有一位是不同的,LCD1602的驱动模块可分为以下几个状态: 3)通过循环读取某一“数组”,循环给LCD1602数据,以接口形式方便改变。 parameter 127:0 line_rom1 = we are student ; parameter 127:0 line_rom2 = Hello World*_*;实验现象如下图所示:7.3 程序 见文件夹lcd1602_driver里面的工程文件lcd1602_driver.v

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2