基于FPGA的通用外设电路设计毕业设计论文

上传人:沈*** 文档编号:41555815 上传时间:2021-11-21 格式:DOC 页数:42 大小:682KB
收藏 版权申诉 举报 下载
基于FPGA的通用外设电路设计毕业设计论文_第1页
第1页 / 共42页
基于FPGA的通用外设电路设计毕业设计论文_第2页
第2页 / 共42页
基于FPGA的通用外设电路设计毕业设计论文_第3页
第3页 / 共42页
资源描述:

《基于FPGA的通用外设电路设计毕业设计论文》由会员分享,可在线阅读,更多相关《基于FPGA的通用外设电路设计毕业设计论文(42页珍藏版)》请在装配图网上搜索。

1、毕毕业业设设计计(论论文文)题题 目:基于目:基于 FPGA 的通用外设电路设计的通用外设电路设计英文题目:英文题目:Design of Universal Peripheral Circuit Based on FPGA东华理工大学毕业(设计)论文 摘 要摘摘 要要FPGA 器件作为可编程逻辑主流硬件,近年来,应用越来越广泛,在现代科学技术中占有举足轻重的作用和地位。其外设电路作为芯片与外界输入方式之一,是十分具有研究价值的。FPGA 器件不断增加新的模块,功能越来越强大,基于FPGA 的外设电路也顺应形势,不断升级。本设计综合行列式键盘、LED 显示器、时钟一体,应用 Verilog HD

2、L 语言实现下述功能:计时功能,包括时分秒的计时;校时功能:对时分秒手动调整以校准时间;键盘功能:应用 4*4 行列式键盘,可实现 0-9 数字的直接输入;LED 动态扫描显示和闪烁,移位,灭零等功能,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过 Altera Quartus8.0 完成综合、仿真。本设计实现以上 FPGA 各功能,可作为 EDA 技术发展的价值体现。此程序通过下载到 FPGA 芯片后,可应用于实际的数字钟显示中。关键字关键字:行列式键盘、LED 显示器、时钟、Verilog HDL。东华理工大学毕业(设计)论文 AbstractABSTRACTFPG

3、A programmable logic devices, as the mainstream of hardware, in recent years, more and more extensive applications in modern science and technology plays a vital role and status. Its peripheral circuit chip with the outside world as one of input is very valuable in research. FPGA devices are constan

4、tly adding new modules, more powerful, FPGA-based response to the peripheral circuit is also the situation escalated.The determinant of the design of an integrated keyboard, LED display, integrated clock, application Verilog HDL language to achieve the following functions: time functions, including

5、the time when minutes and seconds; school functions: every minute of time to manually adjust the calibration time; keyboard functions: application of 4 * 4 determinant keyboard, numbers 0-9 can be directly imported; LED dynamic scanning display and blinking, shift, such as anti-zero function, highli

6、ghts the hardware description language as a good readability, easy to understand the advantages of portability, and Altera Quartus 8.0 through the completion of synthesis, simulation. FPGA Design and Implementation of the above various functions, can be used as the value of EDA technology embodied.

7、This process by downloading to the FPGA chip can be used in practical digital clock display.Keywords: determinant keyboard, LED display, clock, Verilog HDL.东华理工大学毕业(设计)论文 目 录1目 录引 言.1第一章 系统硬件及设计软件介绍.21.1 开发板介绍.21.2 设计软件介绍.3第二章 系统方案设计.42.1 总设计方案.42.2 分频器设计方案.42.3 行列式键盘设计方案.52.4 六位 7 段 LED 显示设计方案.62.5

8、 顶层模块设计方案.7第三章 系统程序设计.83.1 分频器程序设计.83.2 行列式键盘程序设计.103.3 六位 7 段 LED 显示程序设计.123.4 顶层模块程序设计.13第四章 程序仿真.204.1 分频器程序仿真.204.2 行列式键盘程序仿真.204.3 六位 7 段 LED 显示程序仿真.214.4 顶层模块程序仿真.22结 论.25致 谢.27参考文献.28附录 1 分频器程序.29附录 2 行列式键盘程序.31附录 3 六位 7 段 LED 显示程序.33附录 4 顶层时钟程序.35东华理工大学毕业(设计)论文 引 言1引 言计算机技术和微电子工艺的发展,使得现代数字系统

9、的设计和应用进入了新的阶段。电子设计自动化(EDA)技术在数字系统设计中起的作用越来越重要,新的工具和新的设计方案不断推出,可编程逻辑器件不断增加新的模块,功能越来越强,硬件设计语言也顺应形式,推出新的标准,更加好用,更加便捷。本设计主要以 FPGA 器件、EDA 软件工具、Verilog HDL 硬件描述语言三方面内容作为主线,综合行列式键盘,LED 显示器件,以及时钟模块于一体,实现三个主要模块的联动,输入部分为 4*4 行列式键盘,具备 0-9 十个数字键、修改/确认键、左右移动键,输出数据为 6 位二进制代码,输出部分为六位 7 段 LED 数码管,可实现时分秒显示,时钟灭零显示,修改

10、闪烁以及小数点秒闪烁功能。而顶层文件时钟模块则将输入输出部分联结起来,实现时钟发生,显示缓存,数据修改,移位,灭零等功能。另时钟产生模块采用 FPGA 硬件内置 66MHz 分频,产生250Hz,5Hz,1Hz 信号供时钟模块,输入输出模块使用。本设计完全采用 Verilog HDL 语言完成,此程序通过下载到 FPGA 芯片后,可应用于实际的数字钟显示中。东华理工大学毕业(设计)论文 第 1 章 系统硬件及设计软件介绍2第一章 系统硬件及设计软件介绍1.1 开发板介绍本设计需要的硬件资源主要有:1、六位七段数码管2、4*4 行列式键盘经过仔细筛选,最终选定联华众科 FPGA 开发板 FA13

11、0。联华众科 FPGA 开发板 FA130 核心器件为 Altera Cyclone 系列的 EP1C3,配置芯片为 EPCS1,FA130 上可以运行 SOPC Builder 制作的简单的工程。FA130 具有丰富的板载资源,由于板载有 51 单片机,FA130 还可以作为 51 单片机的学习开发板。FA130 实现了 3.3V 系统与 5V 系统对接功能,具体是通过 74LVXC3245(或简称 3245)实现的。FA130 随板资料中包括丰富的开发实例和制作开发实例的详细步骤说明,以及 Quartus II 环境下的设计输入,综合,仿真等内容,另外还包括 SOPC 建立和开发方面内容,

12、如Nios II 的建立和 Nios II 环境下 C/C+程序开发等。FA130 的 EDA 开发实例包括VHDL 和 Verilog 两个版本,FA130 的 51 单片机开发实例包括汇编和 C 语言两个版本。同时 FA130 还包括详细的使用手册和丰富的配套资料,非常适合FPGA,VHDL,Verilog 开发学习者使用。另外 FA130 随板 DVDROM 中还包括VS.NET 的开发实例,在学习 FPGA 开发、51 单片机开发的同时还可以学习到VS.NET 开发环境中 C#程序的开发,VS.NET 和 C#也是 WINCE.NET 系统上主要的开发环境和编程语言。图 1-1 FA1

13、30 开发板东华理工大学毕业(设计)论文 第 1 章 系统硬件及设计软件介绍3联华众科FPGA开发板FA130具有丰富的板载资源。核心器件包括FPGA芯片Altera EP1C3T100和PLCC封装的单片机STC89LE52。EP1C3可用I/O分4组全部以插针的形式引出,供外部扩展时使用。FPGA配置芯片为EPCS1,EPCS1为FLASH类型存储器,存储空间为1M位(1,046,496bits),EPCS1可以工作在5V或3.3V,在本开发板EPCS1与FPGA的IO相同工作电压为3.3V。时钟资源包括频率为66M有源晶振和1个外接有源晶振插座,外接有源晶振插座可直接安装用户自己希望的任

14、何频率有源晶振。复位电路由一个复位按键和一片复位芯片组成,复位芯片为IMP812T,IMP812T输出高电平有效的复位脉冲,脉冲宽度为140ms。IMP812T的复位门限(Reset Threshold)为3.08V,输出的复位信号同时提供给FPGA芯片和单片机使用,FA130上EP1C3和51单片机89LE52均工作在3.3V电源电压。显示资源包括6位共阴七段数码管,8位LED(绿色),1片1602LCD显示屏。键盘资源包括4*4按键阵列,4个独立按键,其中4个独立按键可以作为单片机的中断源使用。电源部分包括1片LM1085-5.0,1片AS2830-3.3和1片AS2830-1.5,LM1

15、085-5.0提供5V直流电源作为AS2830-3.3,AS2830-1.5输入电源和LCD1602供电电源。AS2830-3.3提供3.3V直流电源,作为FPGA的IO电源和开发板上其他设备电源。AS2830-1.5提供1.5V直流电源,作为FPGA的核心供电电源。存储资源包括1片24C02和1片93C46,24C02连接在I2C总线上,是存储空间为256字节串行E2PROM,24C02的设备地址也可以由板上的3位拨码开关设置。93C46为SPI接口的串行E2PROM,93C46存储空间为128字节。其他资源还包括8位拨码开关,连接到EP1C3上。1.2 设计软件介绍本设计使用 Altera

16、 公司的 Quartus II 软件,版本为 8.0。Altera Quartus II 设计软件是业界唯一提供 FPGA 和固定功能 HardCopy 器件统一设计流程的设计工具。工程师使用同样的低价位工具对 Stratix FPGA 进行功能验证和原型设计,又可以设计HardCopy Stratix 器件用于批量成品。系统设计者现在能够用 Quartus II 软件评估HardCopy Stratix 器件的性能和功耗,相应地进行最大吞吐量设计。Altera 的 Quartus II 可编程逻辑软件属于第四代 PLD 开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于 Int

17、ernet 的协作设计。Quartus 平台与 Cadence、ExemplarLogic、 MentorGraphics、Synopsys 和 Synplicity 等 EDA 供应商的开发工具相兼容。改进了软件的 LogicLock 模块设计功能,增添 了 FastFit 编译选项,推进了网络编辑性能,而且提升了调试能力。东华理工大学毕业(设计)论文 第 2 章 系统方案设计4第二章 系统方案设计设计要求:1、行列式键盘电路包括:时钟产生电路,扫描电路、按键标志产生电路和键盘译码器;2、LED 显示电路设计包括:时钟发生器、扫描信号发生器、显示缓存器、七段译码器、小数点产生模块和闪烁模块;

18、3、键盘与 LED 显示电路配合,完成数据修改,移位,灭零和小数点移动等功能。2.1 总设计方案根据课题要求,本设计主要由三个模块完成,1)输入:行列式键盘,具备 0-9 十个数字键及数据修改/确认,左移位键,右移位键三个功能键。2)输出:六位 7 段数码管。3)主程序:实现时钟产生,键位识别,数据修改,移位等功能。4)应以上三个模块要求,设计分频模块,产生符合要求的方波。如图 2-1 所示:图 2-1 系统设计方案图2.2 分频器设计方案本设计采用 FPGA 硬件设计,其内置时钟频率为 66MHz,而三个模块需要的是频率较低的信号,应通过寄存器计数来实现分频,考虑到高低频率差异太大,所以拆分

19、成为两个寄存器来实现,这样可以得到 250Hz 信号,然后再使用两个寄存器可分别得到 5Hz,1Hz 两个信号。如图 2-2 所示。东华理工大学毕业(设计)论文 第 2 章 系统方案设计5图 2-2 分频示意图2.3 行列式键盘设计方案行列式键盘的工作方式是读取行列线的状态,查看是否有按键按下。键盘部分提供一种扫描的工作方式,能对键盘不断扫描、自动消抖、自动识别按下的键,并给出编码,能对双键或 n 个键同时按下的情况实行保护。本设计需要实现数据修改,移位,所以除了 0-9 数字键盘以外,还至少需要左右移位键及修改/确认三个功能键,如图 2-3 所示。图 2-3 键盘示意图键盘需要响应迅速,所以

20、采用了 250Hz 信号,输入由X1,X2,X3,X4;Y1,Y2,Y3,Y4 八根纵横交错的连接线组成,当某根 X 连接线和Y 连接线同时为低电平时有效,例如当 X3,Y2 为低电平时,识别为“0”键,将输出相应信号供主程序识别。如图 2-4 所示。东华理工大学毕业(设计)论文 第 2 章 系统方案设计6图 2-4 键盘电路原理2.4 六位 7 段 LED 显示设计方案在译码器设计时,常用发光二极管的状态验证设计是否满足要求。这种方式是很直观的,但在计数器设计时,这样的验证方式就显得很不直观,尤其当计数器的位数增加时(如百进制计数) ,太多的发光管将使结果的独处非常困难。此时应采用数码管显示

21、,但是当用七段数码显示器显示的位数较多时(如显示 8 位)BCD 码十进制数) ,为了节省硬件开支,常用动态显示方法,即对各 LED 数码管循环扫描。分时使用显示器驱动电路。1) 驱动方式:直接驱动方式,直接对数码管相应的字段给出驱动电平,以显示字形,其真值表如表 2-1 所示:表 2-1 LED 真值表abcdefg输出111111000110000111011012111100130110011410110115101111161110000711111118111101192)动态扫描显示动态扫描的 FPGA 实现可以采用将所有数码管的相同字段并联,由 FPGA 芯片的输出信号 a,b,

22、c,d,e,f,g 直接驱动相应字段,由软件编程产生片选信号MS1,MS2,,MS6 循环选中 6 个数码管。数码管显示的字形由表 2-2 决定。3)相关知识共阴数码管如右图 2-5 所示:每一条线分别对应一个管脚,当管脚为1时,这条线为亮,当管脚设置为0时,这条线不亮。例如:设置 a 的管脚为1,那么 0 这条线就会亮;设置 g 的管脚为1,那么 6 这条线就会亮。要让数码管显示数字 0,那么我们可以设置a,b,c,d,e,f,g为“1111110”。图 2-5 数码管示意图东华理工大学毕业(设计)论文 第 2 章 系统方案设计72.5 顶层模块设计方案此模块为系统核心模块,大部分的功能都由

23、此模块完成。1)时钟模块设计思路:定义一个长度为 24 位的时钟显示缓存寄存器,每 4 位用 BCD 码来分别显示时分秒的个位,十位,每当 1 秒周期则秒个位加一,当秒个位为 9 时则清零,秒十位加一,当秒为 59 时清零,分加一,同理当分为 59,秒为 59 时,分、秒清零,时加一,同理当时为 23,分为 59,秒为 59 时,时分秒清零。完成时钟的设计。2)键盘译码模块设计思路:定义 1 位寄存器 sel,每当检测到 sel 信号则自加 1,当 sel 为 1 时进入修改状态,为 0 则为时钟状态。3)数据移位模块设计思路:定义 3 位寄存器 flag,当 flag 不为 0 时,每当检测

24、到“”信号时,flag 自减 1,当 flag 不为 5 时,每当检测到“”信号,flag 自加 1。4)数据修改模块设计思路:当 sel 为 1 时,进入修改状态,检测 flag 的值,flag 的值分别对应各将被修改的数据,如图 2-6。图 2-6 数据修改信号检测键盘输入信号,若有 0-9 数字信号输入则将对应数字赋值给相应时钟显示缓存寄存器。5)闪烁模块设计思路:当 sel 为 1 时,引入 5Hz 信号 clkss,当 clkss 为 1 时,flag 所对应数据输出信号为缓存数据,为 0 时对应数据电平将为高阻态不显示,这样可实现被修改数据会以 5Hz 的频率闪烁显示。6)显示输出

25、模块设计思路:将时钟显示缓存寄存器的数据赋值给输出管脚。东华理工大学毕业(设计)论文 第 3 章 系统程序设计8第三章 系统程序设计3.1 分频器程序设计在现代电子系统中,数字系统所占的比例越来越大。系统发展的趋势是数字化和集成化,而 CPLD/FPGA 作为可编程 ASIC(专用集成电路)器件,它将在数字逻辑系统中发挥越来越重要的作用。在数字逻辑电路设计中,分频器是一种基本电路。通常用来对某个给定频率进行分频,以得到所需的频率。整数分频器的实现非常简单,可采用标准的计数器,也可以采用可编程逻辑器件设计实现。本设计采用标准计数器来实现。根据设计思路,本模块将 66MHz信号分频成为250Hz,

26、5Hz,1Hz 三个输出信号,流程图如图 3-1 所示。程序每当检测到内置时钟上升沿,计数寄存器 1 自加1,如果寄存器 1 等于 999,则寄存器 1 置 0,寄存器 2 自加 1,如果寄存器 2 等于131,则 clksy 取反,寄存器3,寄存器 4 均自加 1,寄存器 2 清零,Fs=fx/ns=50M/(999+1)*(131+1)=500,可得 clksy 每秒钟取反 500 次,即可得 clksy=250Hz, 图 3-1分频程序流程图 同理寄存器 3 和寄存器 4 每 1/500 秒自加 1。如果寄存器 3 等于 249,则寄存器 3 清零,clk 取反,根据以上结果可得 clk

27、 每秒取反2 次,即可得 clk=1Hz。 东华理工大学毕业(设计)论文 第 3 章 系统程序设计9如果寄存器 3 等于 49,则寄存器 4 清零,clkss 取反,根据以上结果可得 clkss 每秒取反 10 次,即可得 clkss=5Hz。根据以上思路,Verilog HDL 程序如下:module clkfs(clk,clkss,clksy,clk66MHz); input clk66MHz; output clk,clkss,clksy;reg clk,clkss,clksy; reg9:0 count1;reg6:0 count2; reg7:0 count3;reg5:0 coun

28、t4; reg cin1,cin2;always (posedge clk66MHz)if(count19:0=10d999)begin count19:0=10d0; cin1=1d1;/产生进位信号 1endelse begin count19:0=count19:0+10d1; cin1=1d0;/进位信号 1 清零endalways (posedge clk66MHz)if(count27:0=8d131)begin count27:0=8d0; clksy=clksy; /clksy=250Hz cin2=1d1;/产生进位信号 2endelse begin count27:0=co

29、unt27:0+cin1;/若进位信号 1 为 1 则加 1,为 0 则不变 cin2=1d0;/进位信号 2 清零endalways (posedge clk66MHz)if(count37:0=8d249)begin count37:0=8d0; clk=clk; /clk=1Hzendelse count37:0=count37:0+cin2;/若进位信号 2 为 1 则加 1,为 0 则不变always (posedge clk66MHz)if(count45:0=6d49)东华理工大学毕业(设计)论文 第 3 章 系统程序设计10begin count45:0=6d0; clkss=

30、clkss; /clkss=5Hzendelse count45:0=count45:0+cin2;endmodule3.2 行列式键盘程序设计相对 if 语句只有两个分支而言,else 语句是一种多分支语句,故 case 语句多用于条件译码电路,本设计的行列式键盘模块采用 case 语句键盘译码。利用 250Hz 信号扫描 X 轴和 Y 轴电位信号,当某根 X 连接线和 Y 连接线同时为低电平时有效。键盘去抖功能:按键在闭合和断开时,触点会存在抖动现象,本设计采用250Hz 低频信号,触发判定为 clk 信号上升沿和下降沿,也就是在 40ms 时间内会有两次判定,如果两次判定均为同一键位,则

31、输出键值,否则输出为 0,可以消除触点抖动的负面作用。示意图如下:图 3-2 去抖示意图图示为两次按键,第一次按键时间极短,可视为一次抖动,第二次为正常按键(时间较长,可以是多个 CLK 周期,图示只列出 1 个周期) ,现分析如下:图示 1 处:读取 key1 为低;图示 2 处:读取 key2 为高;结果:key 为 0,判定无按键。图示 1 处:读取 key1 为低;图示 2 处:读取 key2 为低;结果:key 为对应键位值,判定有按键。程序如下:module keypad(clksy,x,y,key); /clksy=64hzinput clksy;input3:0 x,y; /4

32、*4 key ,low activeoutput5:0 key;reg5:0 key1,key2;东华理工大学毕业(设计)论文 第 3 章 系统程序设计11always (posedge clksy) /第一次判定begincase(y3:0,x3:0)8b00010001:key15:0=6d1;8b00010010:key15:0=6d2;8b00010100:key15:0=6d3;8b00011000:key15:0=6d4;8b00100001:key15:0=6d5;8b00100010:key15:0=6d6;8b00100100:key15:0=6d7;8b00101000:k

33、ey15:0=6d8;8b01000001:key15:0=6d9;8b01000010:key15:0=6d10;8b01000100:key15:0=6d16;8b01001000:key15:0=6d32;8b10001000:key15:0=6d48;default:key15:0=6d0; /输出结果寄存在 key1endcaseendalways (negedge clksy) /第二次判定begincase(y3:0,x3:0)8b00010001:key25:0=6d1; /键位 18b00010010:key25:0=6d2; /键位 28b00010100:key25:0=

34、6d3; /键位 38b00011000:key25:0=6d4; /键位 48b00100001:key25:0=6d5; /键位 58b00100010:key25:0=6d6; /键位 68b00100100:key25:0=6d7; /键位 78b00101000:key25:0=6d8; /键位 88b01000001:key25:0=6d9; /键位 98b01000010:key25:0=6d10; /键位 08b01000100:key25:0=6d16; /键位8b01001000:key25:0=6d32; /键位8b10001000:key25:0=6d48; /键位 s

35、el东华理工大学毕业(设计)论文 第 3 章 系统程序设计12default:key25:0=6d0;/输出结果寄存在 key2endcaseendassign key=(key1=key2)?key1:6d0; /判定 如果两次结果相同 则输出为/键值 如果不同 则输出为 0endmodule3.3 六位 7 段 LED 显示程序设计联华众科 FPGA 开发板 FA130 的数码显示为六位 7 段共阴极数码管,其工作特点是,当笔段电极接高电平,公共阴极接低电平时,相应笔段发光。本模块同时具有片选,七段译码,灭零功能。本模块由 250Hz 信号驱动,采用动态显示方法,即对六个 LED 数码管循

36、环扫描。分时使用显示器驱动电路。可得每个数码管显示频率为 250/642Hz,人眼视觉暂留时间的要求为 25 帧每秒,可达到要求。程序如下:module xianshi(clksy,a,b,c,d,e,f,g,D0,D1,D2,D3,D4,D5,num0,num1,num2,num3,num4,num5);input clksy;input3:0 num0,num1,num2,num3,num4,num5; /num0-num5 为时分秒 6 位输入output a,b,c,d,e,f,g,D0,D1,D2,D3,D4,D5; /a-g 为数码管 7 段电平reg a,b,c,d,e,f,g,

37、D0,D1,D2,D3,D4,D5; /D0-D5 为片选信号reg3:0 num10,num11,num12,num13,num14,num15;reg3:0 temp;reg2:0 flag;always(posedge clksy) beginD0,D1,D2,D3,D4,D5=6b000000;if(flag=6) flag=0;else flag=flag+1;num10,num11,num12,num13,num14,num15=num0,num1,num2,num3,num4,num5;if(num15=0) /首位灭零num15=4bzzzz;case(flag)/片选0:be

38、gin temp=num10;D0=1;end东华理工大学毕业(设计)论文 第 3 章 系统程序设计131:begin temp=num11;D1=1;end2:begin temp=num12;D2=1;end3:begin temp=num13;D3=1;end4:begin temp=num14;D4=1;end5:begin temp=num15;D5=1;enddefault:temp=0;endcasecase(temp) /七段译码 4d0:a,b,c,d,e,f,g=7b1111110; /显示数字 0 4d1:a,b,c,d,e,f,g=7b0110000; /显示数字 1

39、4d2:a,b,c,d,e,f,g=7b1101101; /显示数字 2 4d3:a,b,c,d,e,f,g=7b1111001; /显示数字 3 4d4:a,b,c,d,e,f,g=7b0110011; /显示数字 4 4d5:a,b,c,d,e,f,g=7b1011011; /显示数字 5 4d6:a,b,c,d,e,f,g=7b1011111; /显示数字 6 4d7:a,b,c,d,e,f,g=7b1110000; /显示数字 7 4d8:a,b,c,d,e,f,g=7b1111111; /显示数字 8 4d9:a,b,c,d,e,f,g=7b1111011; /显示数字 9 defa

40、ult:a,b,c,d,e,f,g=7b0000000; /无任何显示endcaseendendmodule3.4 顶层模块程序设计根据设计思路,画出流程图,见 3-3。程序是无限循环,也就是到了流程图结束的地方后又会回到开始,程序首先判定是否有键按下,如果有,则判定键值:若键值为或移动键,则会修改 flag 的值,有前文所述,flag 的值代表时分秒的个、十位;若键值为 Sel 修改键,则会改变sel 寄存器的值,设计需求是按一次 Sel 键将会进入修改状态,再按一次将退出修改状态,方案为设定 sel 寄存器为 1 位。程序接下来会判断 sel 的值,如果为 1 则进入修改状态,为零则进入计

41、时状态。 在修改状态下,程序再次判定键值,若为数字键,则会将对应数据赋值给 flag所对应缓存,若为或移动键,则会修改 flag 的值,若为 Sel 修改/确认键,将退出修改状态。东华理工大学毕业(设计)论文 第 3 章 系统程序设计14图 3-3 顶层模块设计流程图东华理工大学毕业(设计)论文 第 3 章 系统程序设计15在计时状态,程序将逐秒对秒缓存加 1,判断:若秒低位为 9,则秒低位清零,秒高位加一;判断:若秒高位为 5,则秒高位清零,分低位加一;判断:若分低位为 9,则分低位清零,分高位加一;判断:若分高位为 5,则分高位清零,时低位加一;判断:若时低位为 9,则时低位清零,时高位加

42、一;判断:若时高低位为 23,则时清零。程序到这里还没有结束,关于修改位闪烁的方案,我将它和输出管脚赋值整合在一起,首先判定是否为修改状态,若是,则将该修改数据和 5Hz 频率相与再赋值给输出管脚,当 5Hz 频率为高电平,输出缓存数据,反之则无输出信号,这样可实现被修改字符出现频率为 5Hz 的闪烁。程序如下:module clock(clkss,key,sec,min,hour);input clkss;input5:0 key;reg sel;reg2:0 flag1,sumsec;output7:0 sec,min,hour;wire7:0 sec,min,hour; reg23:0

43、sum;reg seccin,cinsec,cinmin,ss0,ss1,ss2,ss3,ss4,ss5;initial flag1=3d0;always(posedge clkss)beginif(key=6d48) sel=sel+1d1;/如果为 Sel 键 将在修改/确认间切换else if(key=6d16) /如果为键 begin if(!flag1) flag1=flag1-3d1; /如果 flag 不为 0 ,那么 flag 减 1 endelse if(key=6d32) /如果为键 begin if(flag1=5) flag1=3d5;/如果 flag 等于 5 ,fl

44、ag 值不变 else flag1=flag1+3d1;/否则 flag 加 1 endendalways(posedge clkss) /这段语句将 5Hz 信号分频成为 1Hz 时钟信东华理工大学毕业(设计)论文 第 3 章 系统程序设计16号begin if(sumsec2:0=3d4)begin sumsec2:0=3d0; seccin=1;endelse begin sumsec2:0=sumsec2:0+3d1; seccin=0;endendalways(posedge clkss)begin if(sel)/判定是否为修改状态begin if(flag1=0) begin i

45、f(key=6d10) sum3:0=4d0; /零键位的识别 else sum3:0=key3:0?key3:0:sum3:0; /key 低四位不为零则赋值 end else if(flag1=1) begin if(key=6d10) sum7:4=4d0; else sum7:4=key3:0?key3:0:sum7:4; endendelse if(seccin) beginif(sum3:0=4d9)begin sum3:0=4d0;if(sum7:4=4d5)begin sum7:4=4d0; cinsec=1;endelse begin sum7:4=sum7:4+4d1; c

46、insec=0;end东华理工大学毕业(设计)论文 第 3 章 系统程序设计17endelse begin sum3:0=sum3:0+seccin; cinsec=0;endendendalways(posedge clkss)begin if(sel)begin if(flag1=2) begin if(key=6d10) sum11:8=4d0; else sum11:8=key3:0?key3:0:sum11:8; end else if(flag1=3) begin if(key=6d10) sum15:12=4d0; else sum15:12=key3:0?key3:0:sum1

47、5:12; endendelse if(cinsec) beginif(sum11:8=4d9)begin sum11:8=4d0;if(sum15:12=4d5)begin sum15:12=4d0; cinmin=1;endelse begin sum15:12=sum15:12+4d1; cinmin=0;endendelse begin sum11:8=sum11:8+cinsec; cinmin=0;东华理工大学毕业(设计)论文 第 3 章 系统程序设计18endendendalways(posedge clkss)beginif(sel)begin if(flag1=4) begi

48、n if(key=6d10) sum19:16=4d0; else sum19:16=key3:0?key3:0:sum19:16; end else if(flag1=5) begin if(key=6d10) sum23:20=4d0; else sum23:20=key3:0?key3:0:sum23:20; endendelse if(cinmin) beginif(sum23:16=8d23) sum23:16=8d0;elseif(sum19:16=4d9) begin sum19:16=4d0; sum23:20=sum23:20+4d1; endelse sum19:16=su

49、m19:16+cinmin;endendalways (posedge clkss)beginif(sel)begin case(flag1)/判定是否为修改状态0:ss0,ss1,ss2,ss3,ss4,ss5=6b100000;1:ss0,ss1,ss2,ss3,ss4,ss5=6b010000;2:ss0,ss1,ss2,ss3,ss4,ss5=6b001000;3:ss0,ss1,ss2,ss3,ss4,ss5=6b000100;4:ss0,ss1,ss2,ss3,ss4,ss5=6b000010;东华理工大学毕业(设计)论文 第 3 章 系统程序设计195:ss0,ss1,ss2,s

50、s3,ss4,ss5=6b000001;default:ss0,ss1,ss2,ss3,ss4,ss5=6d0; endcaseendelse ss0,ss1,ss2,ss3,ss4,ss5=6d0;endassign sec3:0=ss0?(clkss?sum3:0:4bz):sum3:0; assign sec7:4=ss1?(clkss?sum7:4:4bz):sum7:4;assign min3:0=ss2?(clkss?sum11:8:4bz):sum11:8;assign min7:4=ss3?(clkss?sum15:12:4bz):sum15:12;assign hour3:0

51、=ss4?(clkss?sum19:16:4bz):sum19:16;assign hour7:4=ss5?(clkss?sum23:20:4bz):sum23:20; /*括号内的值:clkss 高电平 sum,低电平为高阻态,输出管脚的值:该管脚在修改状态则为括号内的值 否则为 sum 值*/endmodule东华理工大学毕业(设计)论文 第 4 章 程序仿真20第四章 程序仿真4.1 分频器程序仿真因为分频比例太大,在仿真时将比例减小。下图为将寄存器 1 的分频比 1000:1 改为 1:1,即:if(count19:0=10d999)if(count19:0=10d0);寄存器 2 的

52、分频比 132:1 改为 2:1,即:if(count27:0=8d131)if(count27:0=8d1);将寄存器 3 的分频比 250:1 改为 3:1,即:if(count37:0=8d249)if(count37:0=8d2);将寄存器 4 的分频比 50:1 改为 6:1,即:if(count45:0=6d49) if(count45:0=6d5);其他程序部分无任何改变,图 4-1 为修改后的程序仿真结果。图 4-1 分频器模拟仿真设在单位时间内:clk50MHz 的上升沿的次数为 N,clksy 取反次数为 Nsy,计数器 1 的分频比为 p1,计数器 2 的分频比为 p2,

53、计数器 3 的分频比为 p3,计数器4 的分频比为 p4,则 Nsy=N/(p1*p2) ,代入模拟仿真数据,得 Nsy=N/2,若在 4 个clk50MHz 的时间内,clksy 取反 2 次,即一个周期,所以 clksy 与 clk50MHz 的频率比为 1:4,与模拟仿真结果吻合。如图可看出:在 clksy 取反 6 次的时间内,clkss 取反一次,clk 取反 3 次,仿真结果正确。如将各寄存器分频比改为原值,能得到与程序设计所需要频率一致的结果。4.2 行列式键盘程序仿真这部分的仿真比较简单,如图 4-2 所示。 东华理工大学毕业(设计)论文 第 4 章 程序仿真21图 4-2 行

54、列式键盘程序仿真在上图中,一共模拟了 3 次按键,对照图 2-3 和图 2-4:第一次按下 x3,y3 键,即键,输出 key4=1,即 key5:0=16;第二次按下 x3,y2 键,即 7 键,输出 key5:0=7;第三次按下 x2,y2 键,即 6 键,输出 key5:0=6.可看出仿真结果完全正确。4.3 六位 7 段 LED 显示程序仿真如图 4-3 所示为输入信号:图 4-3 LED 输入信号图 4-4 所示为输出信号。图 4-4 LED 输出信号由图可得:片选信号正常工作,a,b,c,d,e,f,g 七段信号随片选信号变化,对比共阴极数码管真值表 2-1,仿真结果正确。东华理工

55、大学毕业(设计)论文 第 4 章 程序仿真224.4 顶层模块程序仿真1)时钟仿真,如图 4-5。 图 4-5 时钟仿真2)闪烁仿真,如图 4-6。图 4-6 闪烁仿真3)移位仿真,如图 4-7。图 4-7 移位仿真4)修改仿真如图 4-8。图 4-8 修改仿真5)确认键仿真,如图 4-9。图 4-9 确认键仿真说明一下 key 值代表的含义:东华理工大学毕业(设计)论文 第 4 章 程序仿真231-10:表示输入数字 1,2,3,9,0;16:左移32:右移48:修改/确认由以上多图仿真可看出,程序功能完全正确。4.5 原理图 如图 4-10 所示。东华理工大学毕业(设计)论文 第 4 章

56、程序仿真24图 4-10 原理图连接本设计没有外部链接,分频模块接入开发板内置时钟 66MHz 信号,输入模块接 4*4 行列式键盘,输出部分为六位 7 段数码管,小数点显示部分直接接入 1Hz 信号,作为时钟状态下秒的显示信号。东华理工大学毕业(设计)论文 结 论25结 论本设计实现了设计任务要求的大部分功能,设计要求实现的时钟,键盘,闪烁,显示等功能都已完成,仿真结果也令我十分满意,虽然仿真结果中存在不少抖动现象,但经过观察,抖动的时间很短,并且在各时钟的上升沿和下降沿时没有抖动(同 3.2 节键盘去抖原理) ,并且 LED 显示部分的仿真结果不存在抖动,如果将程序写入 FPGA 开发板,

57、将不存在由抖动带来的任何负面作用。但本设计不足的地方还有很多,相对来说,这是一个简单的程序,可以改进的地方还有很多,如在键盘中加入“+”“-”“=”等键实现简单计算器的功能,如加入百分秒寄存器实现秒表功能,设计要求的小数点功能也被我简化成为了一个 1Hz 的连接线(见图 4-5) ,这些升级功能暂且不提,在仿真时我发现了一个比较不方便的负面作用,在按键时只考虑了去抖,却没有考虑按键的延时,举例来说,若按下“”键,键盘模块会立即响应(250Hz)并传递键值给主模块,主模块将会在 0.2 秒(5Hz)内响应这个信号并改变 flag 的值,仿真在这里没有出现问题,但是:如果在下一个 0.2 秒内仍在

58、继续按着“”键,主模块将会继续改变 flag 的值,也就是说,如果按下“”一秒,flag 将左移 5 次,而一般键盘却是按下再弹起时才会做出响应,或持续按下一段时间后才会做出“连加”响应。解决办法:定义一个 4 位寄存器,寄存器的值在主程序接收到键值时改变,如下所示:reg3:0 key1; /定义寄存器always (posedge clkss) begin if(key1) /如果 key1 不为 0 begin if(!key) /如果 key 为 0,即已经松开按键 case(key1) /判断 key1 的值1:; /对应各值的处理方法,不再累赘2:;3:; :13:; endcas

59、eendelse /如果为 0,将检测 key 的值,如果 key 不为零 /则将 key 的键位 1-13 赋值给 key1,不再赘述东华理工大学毕业(设计)论文 结 论26关于小数点移动的功能实现。本设计实现了 FPGA 的“外设”功能,但是似乎却并不“通用” , 本设计中,小数点仅仅起到一个跟随秒闪烁的功能,EDA 技术的发展,HDL 语言的强大不仅仅是制作一个带键盘的时钟,当为了实现更多的功能,小数点的移动十分的必要,下面简要叙述下其设计思想:例:使用键盘输入一组带小数点的数据,要求液晶实时显示输入数据设计思想:定义一个默认为 0 的寄存器,代表小数点的位置为最低位,当检测到键盘小数点

60、输入时,触发一个模块,当再次检测到数字输入时,该寄存器自加一。功能实现:例如键盘输入 123.456 液晶显示器依次显示结果如下:1.;12.;123.;123.4;123.45;123.456。实现了小数点移动功能。综上所述,在完成一个设计课题时,要充分考虑到各种问题,以及实现方法的优越性,尽量使在满足课题要求的前提下做到尽善尽美。这就要我们多思考多对比,多总结和参考相关的参考资料,认真的投入到设计中。东华理工大学毕业(设计)论文 致 谢27致 谢本课题在选题及研究过程中得到黄乡生老师的悉心指导。黄老师多次询问研究进程,并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励。感谢管小明老师、

61、陈坚老师等对我的教育培养。他们细心指导我的学习与研究,在此,我要向诸位老师深深地鞠上一躬。感谢我的同学李小雷、邹蕾、马立刚、郑志强四年来对我学习、生活的关心和帮助。东华理工大学毕业(设计)论文 参考文献28参考文献 1 王金明 编著数字系统设计与 Verilog HDL (第二版).北京:电子工业出版社,2005.9 2 黄乡生 编写EDA 技术与应用实践教学指导书.东华理工大学电子与机械工程学院,2007.103 王金明 编著Verilog HDL 程序设计教程.北京:人民邮电出版社,20044 潘松 黄继业 编著EDA 技术实用教程.北京:科学出版社,2002 5 黄任 编著VHDL 入门

62、解惑经典实例经验总结 (第一版).北京:北京航空航天大学6 王金明,杨吉斌编著数字系统设计与 Verilog HDL.北京:电子工业出版社,2002 7 Doulos 编写Verilog黄金参考指南.Verilog-XLTM,1996 8 Charke K KPhase measurement,traceability,and verification,theoryand practiceJ IEEE TransIM,1990,9 J.Bhasker 著,徐振林等译.Verilog HDL 硬件描述语言.北京:机械工业出版社,2000东华理工大学毕业(设计)论文 附 录29附录 1 分频器程序

63、module clkfs(clk,clkss,clksy,clk66MHz);input clk66MHz;output clk,clkss,clksy;reg clk,clkss,clksy;reg9:0 count1;reg7:0 count2;reg7:0 count3;reg5:0 count4;reg cin1,cin2;always (posedge clk66MHz)if(count19:0=10d999)begin count19:0=10d0; cin1=1d1;endelse begin count19:0=count19:0+10d1; cin1=1d0;endalway

64、s (negedge clk66MHz)if(count27:0=8d131)begin count27:0=8d0; clksy=clksy; /clksy=250Hz cin2=1d1;endelse begin count27:0=count27:0+cin1; cin2=1d0;endalways (negedge clk66MHz)if(count37:0=8d249)begin count37:0=8d0; clk=clk; /clk=1Hzendelse count37:0=count37:0+cin2;东华理工大学毕业(设计)论文 附 录30always (negedge cl

65、k66MHz)if(count45:0=6d49)begin count45:0=6d0; clkss=clkss; /clkss=5Hzendelse count45:0=count45:0+cin2;endmodule 东华理工大学毕业(设计)论文 附 录31附录 2 行列式键盘程序module keypad(clksy,x,y,key); /clksy=64hzinput clksy;input3:0 x,y; /4*4 key ,low activeoutput5:0 key;reg5:0 key1,key2;always (posedge clksy)begincase(y3:0,x

66、3:0)8b00010001:key15:0=6d1;8b00010010:key15:0=6d2;8b00010100:key15:0=6d3;8b00011000:key15:0=6d4;8b00100001:key15:0=6d5;8b00100010:key15:0=6d6;8b00100100:key15:0=6d7;8b00101000:key15:0=6d8;8b01000001:key15:0=6d9;8b01000010:key15:0=6d10;8b01000100:key15:0=6d16;8b01001000:key15:0=6d32;8b10000100:key15:0=6d48;default:key15:0=6d0;endcaseendalways (negedge clksy)begincase(y3:0,x3:0)8b00010001:key25:0=6d1;8b00010010:key25:0=6d2;8b00010100:key25:0=6d3;8b00011000:key25:0=6d4;8b00100001:key25:0=6d5;8b0010

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!