




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
可编程逻辑器件电路设计课程设计报告多功能数字钟的fpga实现姓 名: 班 级: 学 号: 指导老师: 日期: 37摘 要fpga( field programmable gate array,现场可编程门阵列),是20 世纪70 年代发展起来的一种可编程逻辑器件,是目前数字系统设计的主要硬件基础。可编程逻辑器件的设计过程是利用eda 开发软件和编程和编程工具对器件进行开发的过程。本系统采用模块化的设计方式,重复使用的功能模块均以组件(component)的形式存在,一边相关块的调用,主程序内用不同功能块构成一个完整的结构。将所有的组件收集在同一个程序包my_pkg中。本设计主要使用了vhdl 语言,采用的fpga 开发平台是maxplus2,而设计一个多功能数字钟,在maxplus2 开发平台下进行了编译、仿真、下载,实现了基本计时显示和设置、调整时间、报时和闹钟功能。 关键词 fpga;模块化;vhdl;maxplus2;数字钟目 录1设计任务及要求11.1 设计任务11.2 设计要求11.3 功能拓展12 方案比较与选择23 底层文件仿真与分析33.1 1024分频文件33.2 二选一数据选择器33.3 60进制计数器43.4 24进制计数器43.5 十进制转bcd模块53.6 bcd转led显示码53.7 数码管动态扫描显示模块63.8 闹钟报警模块64 顶层文件仿真与分析84.1顶层时钟设计输入输出图元84.2 顶层文件仿真分析85硬件验证分析105.1 管脚分配105.2 硬件调试116课程设计心得12abstract13参考文献附录(源代码)1设计任务及指标1.1设计任务能进行正常的时、分、秒计时功能,分别由6只数码管显示24小时、60分、60秒。按下试验箱上的某个按键时,计时器迅速递增,并按24小时循环,计到23小时后再回到00。按下试验箱上的某个按键时,计分器迅速递增,并按60分循环,计到59分后再回到00。利用试验箱上的扬声器可以实现整,当计时到达59分50秒时开始报时,在59分50秒、52秒、54秒、56秒、58秒时鸣叫,鸣叫声频率为500hz,整点报时频率可定义为1khz.1.2设计要求运用顶层设计思路设计好各个底层文件(vhdl代码),对各个底层文件进行功能仿真;采用原理图或者文本方法来实现顶层文件的设计,对顶层文件进行功能真仿真。在顶层文件功能仿真正确之后,把顶层文件下载到实验箱的fpga里边去,验证电路功能是否正确。具体时间用6位数码管来显示,具有整点报时功能1.3 功能拓展实现数字钟的闹铃功能。2方案比较与选择方案一:系统直接采用1hz脉冲作为作为时钟输入信号。数码管采用静态显示。时间调整采用具有预置功能的计数器。报时为频率512hz脉冲,并引入1024hz脉冲进行整点报时。方案二:系统采用1024hz脉冲作为作为时钟输入信号。数码管采用动态扫描显示。时间调整采用一个数据选择器,以一个按键作为控制端。当调整按键按下时,选择比较高的频率作为计数器计数信号作为输入信号,加快计数的速度,以此达到时间调整的效果。clkkey0key1key21024分频128分频秒计数分计数时计数二选一二选一二选一与门非门非门与门图一 方案二时钟流程方案比较:对于方案一,因为系统需要1024hz和512hz的脉冲驱动蜂鸣器,并且在快速调整时间是也需要比1hz快的脉冲,故需要采用另外的脉冲输入,增加管脚资源开支和外部资源。实现具有预置功能的计数器比较复杂,并且预置输入端需要多个端口。数码管采用静态显示也会增加管脚的开销。对于方案二,因为采用1024hz的脉冲,能够通过分频得到多种频率的脉冲,因而可以实现单一脉冲信号输入即可完成快速调整时间和采用数码管动态扫描显示,节省管脚资源和外部资源。综上所述,故采用方案二。3底层文件仿真与分析3.1 1024分频文件整个系统采用1024hz的频率,由此文件产生1hz频率,作为秒信号。此文件的图元及仿真波形如下图所示。同理亦可以产生4hz频率,512hz频率。图二 1024分频文件图元图三 仿真波形如图二所示,输入1024hz的频率,输出信号频率为1hz。3.2二选一数据选择器图四 数据选择器图元图五 数据选择器仿真波形图3.3 60进制计数器由此模块对秒或分信号进行分频,产生分和小时信号。图六 60进制计数器图元图七 60进制计数器仿真波形图3.4 24进制计数器由此模块对小时信号进行分频,产生日周期。图八 24进制计数器图元图九 24进制计数器仿真波形图3.5 十进制转bcd模块由于有计数器产生的信号为十进制,所以要由此模块转化成bcd码。图十 十进制转bcd模块图元图十一 十进制转bcd模块仿真波形图3.6 bcd转led显示码因为系统采用七段数码管显示,所以要将bcd码转换成七段数码管相应的显示的七位码值。图十二 bcd转led显示码图元图十三 bcd转led显示码仿真波形图3.7 数码管扫描动态显示模块为了节省管脚资源,外置一片74ls138译码芯片,采用六位动态数码管显示。如图十三所示,mux_out为数码管的段选,s为位选,作为74ls138译码芯片的3位输入信号。a,b,c,d,e,f分别为时分秒计数器的输入端口。扫描原理是在时钟控制下,轮流对a到f的输入信号分别在对应的一位数码管显示其值,利用人体视觉暂留效应,同时显示6位值。图十四 数码管扫描动态显示模块图元图十五 数码管扫描动态显示模块仿真波形3.8 闹钟报警模块如图十五所示,此模块有正常计时的时分秒输入和闹钟预置时分秒输入,当两者相同时,这输出报警信号。图十六 闹钟报警模块图元图十七 闹钟报警模块仿真波形4顶层文件仿真与分析4.1 顶层时钟设计输入输出图元 如下图:图十八 顶层文件图元4.2 顶层文件仿真分析 如下图所示,整个系统需用23个管脚。clk为系统时钟输入信号端口。rst为复位信号输入端口,高电平有效。key0,key1,yey2分别为秒、分、小时调整输入端口。al_key0,al_key1,al_key2分别为闹钟的秒,分,小时预置输入端口。speak为整点报时输出端口。a_out为闹钟报警输出信号端口。a_shift为正常计时与闹钟预置切换信号输入。a_en为闹钟时能信号输入端口。seg4为数码管段选输出端口,s为作为74ls138输入信号的数码管位选输出信号。图十九 顶层原件框图图二十 顶层文件仿真波形5硬件验证分析5.1 管脚分配表1 多功能数字钟的fpga管脚分配node namedirectionlocational_key0inputpin=24al_key1inputpin=25al_key2inputpin=27clkinputpin=84eninputpin=35key0inputpin=21key1inputpin=22key2inputpin=23rstinputpin=29shiftinputpin=30outoutputpin=17seg40outputpin=5seg41outputpin=6seg42outputpin=7seg43outputpin=8seg44outputpin=9seg45outputpin=10seg46outputpin=11speakoutputpin=19s00outputpin=78s01outputpin=79s02outputpin=80在各个子模块以及顶层模块编译成功后,需要下载到fpga中进行调试或实现,下载之前需要对程序所用的输入输出端口进行分配。查询了实验箱上的fpga 的管脚分配,对各个端口进行关联。5.2 硬件调试 各个程序都在编译器maxplus2 中正常的编辑,在管脚分配以后,连接好实验箱,将编译过的程序下载到实验箱的fpga上,调试每一个输入端口的控制,验证输出结果是否与预想中的一致。如果不一致就修改程序。然后再进行编译下载调试。直到实现所有功能位置。总设计调试流程如下: 文本输入层次化设计编 译是否正确?确?管 脚 分 配重 新 编 译时序仿真正确形 成 下 载 文 件硬件测试修改nono结束是否正确?no图二十一 总体设计调试图6课程设计心得本次设计我们小组选的题目是多功能数字钟的fpga实现 ;在确立这个题目之前,我们借阅了相关的书籍,结合了小组自身的情况选择了这个课题。确定课题后,我们进行组内分工。发挥各人特长,根据程序编写,程序调试,报告撰写的工作量,合理的分配了相应的工作。在模块设立的明细下,程序的初步编写还是挺简单的,然而,对每个子模块的编译过程,还是会出现一些错误,比如,定义的端口没有给信号;定义好的器件代码,没有放到程序包中进行例化。在完善代码的过程当中,我们更加熟悉了vhdl代码的开发流程,以及相应的开发形式。在调试的过程中,还是发现挺多问题的。发现时钟调时和秒钟调时,相互重叠,于是我们检查了源代码,发现在信号的传送过程,向端口赋予了错误的信号。发现在秒钟、分钟的调时设置时,会产生进位信号,于是又想着增加一个与门,当有调时信号(高有效)时,经过非门到达与门,则此时停止对高位的计时。经过多次的修改,达到了要求实现的效果。于是我们自己设置了新的功能闹钟。在完成这个设计的过程中,我们学到了很多,整个过程都是对这个学期eda课程学习的进阶。在遇到问题的时候,我们学会了,针对性的找打相应的问题所在,即全面性的解决问题。通过这次课程设计,提高了动手能力和科学严谨的精神,其次是加强了与他人交流合作的能力,在设计过程中遇到许多问题,通过独立思考,查找资料,和同学交流等方式攻克了难题。在设计中对总体设计思路有了全面的框架,避免了编程时遇到低级错误。总的来说,这次课程设计确实学到很多,也锻炼了遇到问题解决问题的勇气和能力,以及遇到挫折不达目的不罢休的韧性,这在以后的工作与学习中将会非常重要。the realization of multi-function digital clockbased on fpga(college of engineering and college of public management, south china agricultural university guangzhou 510642,china)abstractfpga( field programmable gate array) is a kind of programmable logic devices has developed since the 1970s, and it is the main hardware foundation of presently design digital system.the design process of programmable logic device is a process using the development software, eda, and programming tools to develop the device.our system uses the modular design way. the function modules which were used more than once exist in components. some related block are called in the main program. the main program uses different function blocks inside, and constitutes a complete structure. what is more, we collect all components in the same package, my_pkg.our design is a multi-function digital clock, which mainly uses the vhdl language, maxplus2 as the development platform of fpga. we compiled, simulated and downloaded in the development platform of maxplus2. finally we achieved the functions, such as basic timer display and settings, adjusting, alarming.key words: fpga; modular design ; vhdl; maxplus2; digital clock参考文献1.潘松,黄继业.eda技术实用教程.科学出版社.2006.09.2.林明权.vhdl数字控制系统设计范例.电子工业出版社.2003.01:84114.附录(源代码)1. 1hz频率时钟脉冲library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity div1024 is -实现1024分频,产生1hz时钟脉冲 port( clk: in std_logic; -输入信号频率1024hz f1hz: out std_logic); -输出1hz频率end div1024;architecture behav of div1024 is signal count : integer range 0 to 1023;beginprocess (clk)begin if rising_edge(clk) then count=1023 then f1hz=1; else f1hz=0; end if; end if;end process;end behav;2. 4hz频率时钟脉冲library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity div128 is -实现128分频,产生4hz时钟脉冲 port( clk: in std_logic; -输入信号频率1024hz f1hz: out std_logic); -输出4hz频率end div128;architecture behav of div128 is signal count : integer range 0 to 127;beginprocess (clk)begin if rising_edge(clk) then count=127 then f1hz=1; else f1hz=0; end if; end if;end process;end behav;3.512hz频率时钟脉冲library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity div2 is-实现2分频,产生512hz时钟脉冲 port( clk: in std_logic; -输入信号频率1024hz f1hz: out std_logic); -输出1hz频率end div2;architecture behav of div2 is signal count : integer range 0 to 1;beginprocess (clk)begin if rising_edge(clk) then count=1 then f1hz=1; else f1hz=0; end if; end if;end process;end behav;4.二选一选择器library ieee;use ieee.std_logic_1164.all;entity mux21 is-二选一选择器port(a,b : in std_logic; s : in std_logic; y : out std_logic);end;architecture behav of mux21 isbegin y=a when s=0 else b;end behav;5.非门电路library ieee;use ieee.std_logic_1164.all;entity spnot is -非门电路port(clk : in std_logic; a : in std_logic; c : out std_logic);end;architecture behav of spnot isbeginprocess(clk)beginc=not a ;end process;end behav;6.二输入与门library ieee;use ieee.std_logic_1164.all;entity spand2 is -二输入与门port(clk : in std_logic;a,b : in std_logic;c : out std_logic);end;architecture behav of spand2 isbeginprocess(clk)beginc=a and b;end process;end behav;760进制计数器library ieee;use ieee.std_logic_1164.all;entity count60 is-60进制计数器 port(carry: in std_logic; -计数脉冲输入端口 rst: in std_logic;-复位端口 times: out integer range 0 to 59; full: out std_logic);-进位端口end count60;architecture behav of count60 is signal time : integer range 0 to 59;begin process (rst,carry) begin if rst=1 then time = 0; full=0; elsif rising_edge(carry) then if time=59 then time=0;-60进制判断 full=1; -进位信号 else time= time + 1; -保持计数 full=0; end if; end if; end process; times=time;end behav;8. 24进位计数器library ieee;use ieee.std_logic_1164.all;entity count24 is-24进制计数器 port(carry: in std_logic; -计数脉冲信号输入端口 rst: in std_logic; -复位 times: out integer range 0 to 23; full: out std_logic);-进位信号端口end count24;architecture behav of count24 is signal time : integer range 0 to 23;begin process (rst,carry) begin if rst=1 then time = 0; full=0; elsif rising_edge(carry) then if time=23 then time=0; full=1; else time= time + 1; full=0; end if; end if; end process; times one one one one one one one one one one one ten ten ten ten ten ten ten one one one one one one one one one one one ten ten ten ten ten ten ten one=0000;ten one=0001;ten one=0010;ten one=0011;ten one=0100;ten one=0101;ten one=0110;ten one=0111;ten one=1000;ten one=1001;ten one=0000;ten one=0001;ten one=0010;ten one=0011;ten one=0100;ten one=0101;ten one=0110;ten one=0111;ten one=1000;ten one=1001;ten one=0000;ten one=0001;ten one=0010;ten one=0011;ten one=0000;ten one=0001;ten one=0010;ten one=0011;ten one=0100;ten one=0101;ten one=0110;ten one=0111;ten one=1000;ten one=1001;ten one=0000;ten one=0001;ten one=0010;ten one=0011;ten one=0100;ten one=0101;ten one=0110;ten one=0111;ten one=1000;ten one=1001;ten one=0000;ten one=0001;ten one=0010;ten one=0011;ten=0010;end case; end if;end process;end behav; 11. bcd转led显示码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity bin2led is-*二进制转十进制数码管输出 port (bin : in std_logic_vector (3 downto 0); -待显示的十进制数的二进制码 led : out std_logic_vector (6 downto 0) ); -待显示的十进制数的7段数码管对应码值end bin2led;architecture behav of bin2led isbegin with bin select led=0000110 when 0001,-数码管显示1 1011011 when 0010,-数码管显示21001111 when 0011, -数码管显示31100110 when 0100, -数码管显示41101101 when 0101, -数码管显示51111101 when 0110, -数码管显示60000111 when 0111, -数码管显示71111111 when 1000, -数码管显示81101111 when 1001, -数码管显示90111111 when 0000, -数码管显示0 0000000 when others;end behav;12. 数码管动态扫描显示模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity scan6 is-设置6位数码管扫描显示 port (rst,clk : in std_logic; a,b,c,d,e,f: in std_logic_vector(6 downto 0); s : out std_logic_vector(2 downto 0); mux_out: out std_logic_vector(6 downto 0);end scan6;architecture behav of scan6 is signal sel : std_logic_vector(2 downto 0);begin process (rst,clk,a, b, c, d,e,f) begin if rst=1 then sel=000; elsif rising_edge(clk) then sel mux_out = a; s mux_out = b; s mux_out = 1000000; s mux_out = c; s mux_out = d; s mux_out = 1000000; s mux_out = e; s mux_out = f; s mux_out = 0000000; end case; end if; end process;end behav;13.报时电路library ieee;use ieee.std_logic_1164.all;entity time_tell is -报时电路port( rst,clk : in std_logic;sec_in,min_in : in integer range 0 to 59; outs,outand : out std_logic);end;architecture behav of time_tell isbeginprocess(clk,rst)beginif rst = 1 then outs=1; outand=0;elsif min_in = 00 and sec_in = 00 then outs=0; outand outs=1; outand outs=1; outand outs=1; outand outs=1; outand outs=1; outand outs=1; outand outs=1; outand outs=1; outand outs=1; outand outs=1; outand null; end case; - 当
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初一地理美国试卷及答案
- 机械木工专项考核试卷及答案
- 劳务经纪人转正考核试卷及答案
- 聚丙烯酰胺装置操作工综合考核试卷及答案
- 锻件清理工技能操作考核试卷及答案
- 竖井钻机工转正考核试卷及答案
- 无锡地理会考试卷及答案
- 2025年少儿国际象棋试卷及答案
- 音乐听力测试卷子及答案
- 农发行和田地区皮山县2025秋招半结构化面试题库及参考答案
- 2025年国家能源投资集团有限责任公司校园招聘笔试备考题库附答案详解(综合题)
- 2025年零碳园区综合能源技术发展现状与展望报告-华电电科院
- 环保工程现场施工方案(3篇)
- 索尼微单相机A7 II(ILCE-7M2)使用说明书
- 中级护理真题题库及答案解析
- 一年级新生开学第一课常规训练
- 直播助农培训课件
- 长期照护师抗压考核试卷及答案
- 钢箱梁桥面铺装施工细节及专项方案研究
- 2025版自然人个人创业孵化器贷款协议
- 2025广东汕尾市海丰县公安局招聘警务辅助人员50人备考题库及答案解析
评论
0/150
提交评论