基于fpga的数字跑表设计毕业设计内容摘要:
al strobe : std_logic。 begin process (sysreset,reset0,on_off0) begin if (sysreset=’ 1’ or reset0 = ’ 1’ ) then strobe = ‘ 0’。 elsif (on_off0’ event and on_off0 = ’ 1’ ) then strobe = not strobe。 end if。 end process。 enable = strobe。 end rtl。 图 控制模块 仿真波形 跑表计时模块 跑表计时模块主要就是面对跑表的计时工作,由系统分频来支配计时的工作,由控制电路的信号来安排跑表。 计时模块有八个部分组成,它们分别是:小时十位信号、小时各位信号、分十位、分个位、秒十位、秒个位、秒 、秒 信号组成的。 它是讲 1个三进制计数器、 5 个十进制和 2 个六进制的计数器串连在一起的,从而 15 来实现这个跑表计时模块的功能效果。 由以上条件和功能形成的跑表的计时模块的结构框图如 所示。 下面我们就要用源代码来描述一下三进制的、六进制的和十进制的计数 器。 源代码 5 library ieee。 use。 use。 use。 entity count10 is port ( reset : in std_logic。 enable : in std_logic。 clk : in std_logic。 cout : out std_logic。 q : out std_logic_vector(3 downto 0))。 end count10。 architecture rtl of count10 is signal q_tmp : std_logic_vector(3 downto 0)。 begin process(clk) begin if (clk’ event and clk =’ 1’ ) then if (reset = ’ 1’ ) then q_tmp = (others = ‘ 0’ )。 elsif (enable =’ 1’ ) then if (q_tmp =” 1001” ) then q_tmp = (others = ‘ 0’ )。 else q_tmp = q_tmp+1。 end if。 end if。 16 end if。 q = q_tmp。 end process。 cout = ‘ 1’ when q_tmp =” 1001” and enable =’ 1’ else ‘ 0’。 end rtl。 图 跑表计时模块的结构框图 在这些计时的 VHDL 语言描述中,用元件形式调用计数器。 但跑表的计时模块的 VHDL源代码如下所示 图 计时模块 仿真波形 17 跑表显示模块 跑表的理论上已经成立了,但要想供大家观测吸入信息,所以还是需要八个七段的LED显示数码管来展现给大家信息。 跑表显示模块的结构框图 如图 所示。 图 跑表显示模块的结构框图 跑表的显示模块由 count位选择电路、译码电路、位选择译码四个电路部分组成。 下面就来描述一下显示模块的电路。 首先描述的是八进制计数器 count8,这个八进制计数器没有使能端口 enable 和进位输出端口 cout,它的结构与计数器的结构基本上是相同的。 它的电路 VHDL 语 言的描述如源代码 6所示。 源代码 6 library ieee。 use。 use。 use。 entity count8 is port ( reset : in std_logic。 clk : in std_logic。 sel : out std_logic_vector(2 downto 0))。 end count8。 architecture rtl of count8 is signal sel_tmp : std_logic_vector(2 downto 0)。 18 begin process(clk) begin if (clk’ event and clk =’ 1’ ) then if (reset = ’ 1’ ) then sel_tmp = (others = ‘ 0’ )。 elsif (sel_tmp =” 111” ) then sel_tmp = (others = ‘ 0’ )。 else sel_tmp = sel_tmp+1。 end if。 end if。 sel = sel_tmp。 end process。 end rtl。 显示位选的电路功能是根据 count8 的输出来表示的,可将他的信号传输到一个七段显示数码管的 choose 信号上。 当输出为 000 时,这里的选通信号就被翻译成了 00000001了。 具体的显示位选的译码电路的 VHDL 的描述如下所示。 计时位选电路的输出端口的计时数据的位数三种。 分别是 2位的、 3位和 4 位的计时数据。 图 segment信号与数码管的关系 上面对的是数码管其中一位的显示模块,它由七个块组成的,每个位置都代表着一个信号由 0、 6来组成的信号体。 19 七段显示译码电 路 VHDL 描述如源代码 7所示。 源代码 7 library ieee。 use。 entity seg7 is port( q : in std_logic_vector(3 downto 0)。 segment : out std_logic_vector(6 downto 0))。 end seg7。 architecture rtl of seg7 is begin process(q) begin case q is when “ 0000” = segment = “ 0111111”。 when “ 0001” = segment = “ 0000110”。 when “ 0010” = segment = “ 1011011”。 when “ 0011” = segment = “ 1001111”。 when “ 0100” = segment = “ 1100110”。 when “ 0101” = segment = “ 1101101”。 when “ 0110” = segment = “ 1111101”。 when “ 0111” = segment = “ 0100111”。 when “ 1000” = segment = “ 1111111”。 when “ 1001” = segment = “ 1101111”。 when others = segment = “ 00000000”。 end case; end process; end rtl; 对跑表显示模块中的四个子电路描述以后,就可以进行跑表显示模块的总体功能描述了。 20 图 显示模块 仿真波形 仿真结果 仿真步骤: (1)建立一个波形编辑文件: FileNEWWaveform Editor file; (2)鼠标指到左边区域,左键 — 右键,选中; (3) List移动管脚 OK,把仿真用的管脚调出来; (4)设定参数: OptionsGrid size。 FileEnd Time。 ViewTime range; (5)给定输入信号; (6)保存 .scf 文件; (7)MAX+PlusⅡ simulator。 仿真波形图如图 所示。 21 跑表的仿真波形 22 结 语 毕业设计就要结束了,在整个研究设计的过程中,我收获了许多许多。 刚开始做毕业设计的时候是激情澎湃,把 毕业设计想的很简单,以为跟以往的课程设计一样,随便写写就完事了,还准备速战速决解决掉论文。 但是,刚开始做的时候就发现原来搞一项研究并不像想象的那样简单。 刚开始做的时候就发现自己的知识漏洞好多,仅仅靠专业课本知识解决不了问题的,在着手之前还必须学习相关的知识。 在硬件调试过程中,总是出现大量莫名其妙的错误和警告,有的要花费好长时间才能分析出来问题所在,还要去结合相关的知识去调试修改。 当然,当看到自己所设计的跑表在精确地计时的时候还是很有成就感还是很欣慰的。 总之,本次毕业设计后让我真正体验到了科学研究中那 种一丝不苟的严谨工作态度,使我掌握了对 VHDL 硬件描述语言的熟练运用, 培养了我采用理论联系实际的策略方法,提高了分析、解决计算机技术的实际问题的独立工作能力,能对数字跑表进行扩展, 了解了科学研究与系统开发的整体分析的步骤,并能更熟练地运用 MAX+plus Ⅱ 平台对设计进行 编译、仿真 ,以及 选用 器件,完成 系统的功能。 通过本次设计,也使我的专业知识得到拓展,科研的素质得到提升,这些都将对我以后的学习和工作以及研究有很大的帮助。 23 致 谢 毕业设计 任务 已经接近 了 尾声, 这也标志着 大学生活将 要画上 了句号。 在这段时间里 ,我一直在老师的指导下从事 毕业设计的 学习和研究。 经过一学期的辛勤努力,此次的毕业设计也到了收尾的阶段,毕业设计的成果是用来检验一个本科生的大学期间学习到的知识水平,由于经验的不足,在做毕业设计的时候总会有一些考虑不到的地方,所以如果没有指导老师的指点和传授经验,以及在同一时间做设计的同学们的帮助,想去很好的完成本次毕业设计是困难的。 在这里首先要感谢赵老师。 虽然老师代的课程较多,工作较忙,但作为我的指导老师在做设计的过程中,包括从最开始查阅什么参考资料,到开始拟定毕业设计题目,然后编写开题报告和论文草稿的确定,以及后期详细设计过程等丁老师都给予了我严谨细心的指点。 并且在设计中有我不太懂不太会的地方,丁老师都会不厌其烦的指导我学习,认真纠正其中每个不该有的错误。 其次还要感激在学校学习期间所有教导老师,认真负责的教导我们,让我们打下坚实的专业知识基础。 同时还要感谢身边互帮互助一起努力的同学,正是你们的鼓励才能让我在繁杂的设计上坚持到底,并且最终顺利的做完本次毕业设计。 还要 感谢 在大学里的 各位传道授业解惑的老师 们 ,使我掌握了扎实的基础知识和技能,这为毕业设计的完成奠 定了坚实的理论基础。 感谢本次和我一起认真做毕业设计的同学们,与他们的交流,不仅让我学到了有关专业方面的许多知识,而且也从他们身上学到了许多优秀的品质。 感谢和我一起生活的室友,正是因为有了 他 们的支持和鼓励,才 让我 的生活 充满快乐与温馨。 再次 向 身边所有的同学、朋友、老师 表示衷心的感谢。 最后感谢我的母校安阳工学院这两年来的全力培养。 24 参考文献 [1]姜立东 编著 . VHDL语言程序设计及应用 . 北京:邮电大学出版社, 2020. [2]王志鹏 编著 .可编程逻辑器件开发器件 MAX+plusⅡ . 北京:国防工业 出版社, 2020. [3]姜雪松 ,吴钰淳 ,王鹰 编著 . VHDL设计实例与仿真 . 北京:机械工业出版社, 2020. [4]廖裕评 编著 .使用 MAX+plusⅡ入门篇 . 天津:天津大学出版社, 2020. [5]孟庆海,。基于fpga的数字跑表设计毕业设计
相关推荐
WHEN 0010 = 发送第 2 位 IF (clkbaud_tras = 39。 139。 ) THEN txd_reg = txd_buf(0)。 txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1)。 南昌航空大学学士学位论文 14 state_tras = state_tras + 0001。 END IF。 WHEN 0011 = 发送第 3 位 IF
_tinmeout)then count_k_end=39。 139。 else counter_k=Counter_k+1。 end if。 end if。 end process Count_key。 Count_alarm:process(Enable_count_a,clk) begin if(enable_count_a=39。 139。 )then counter_a=39。 039
STLI/O 标准的输入缓冲器。 还有 4 组或者 8 组的 VCC 引( VCCIO)用于驱动输出 I/O 引脚和使用LVTTL,LVCMOS 或者 PCII/O 标准的输入缓冲器。 CYCLONII 器件的 VCCINT 引脚必须接 的电源,如果 VCCINT 接的是,那么输入引脚允许接 , 或者。 VCCIO 引脚能从 , 或者 的电源中任选,依赖于输出的需求。
要从 约束、综合、布局布线、 RTL 级代码等环节上找原因,也可以借助时序分析工具找原因。 ( 9) 时序分析 使用 EDA 软件的时序分析功能能够分析所有时钟的频率、周期、关键路径和其他所有时钟路径上的延时信息,进行建立时间和保持时间分析和输入到输出、输入到寄存器、寄存器到输出的延时分析等,从而可以找出不满足时序关系的原因所在。 时序分析是一个辅助功能,有时可以不做。 ( 10) 器件编程
和在编写程序简单,把 13 脚直接 GND; 14 脚串行数据输出端作为芯片级联端,实现更多数据的级联。 硬件电路总体设计实现 本课题设计用的是 88 的双基色点阵屏,使用四块点阵屏经过设计组合成的 1616 LED 点阵屏用来显示汉字和图片,所谓的 1616,是每一个汉字在纵、横行各用 16 像素点的区域内显示,满足了本次设计的要求。 由于本次使用的点阵屏是双基色的,所以要用 四个
.....................................43图 43 原信号频谱图(线性幅度) ................................................................................................43图 44 测试信号波形 ................................