张燕凯 赵发勇 相乾 朱勇
摘要:针对传统数字电路实验存在的灵活性差以及综合性不足等问题,提出将FPGA技术引入到数字电路的综合性实验设计之中.本文将逻辑代数、触发器、定时器、计数器、译码器以及数码管等数字电路中的传统知识点进行有机结合,设计并实现了数字时钟系统.实践表明,现代设计方法与传统数字电路教学相结合的方法能够起到良好的教学效果.学生在实现系统的过程中既能够加深对相关知识点的理解,又能够提高实践动手能力.
关键词:FPGA;数字电路;综合实验;数字时钟
中图分类号:TN791 文献标识码:A 文章编号:1673-260X(2019)01-0022-03
1 引言
数字电路是为高等院校电气信息类专业本科生开设的一门专业核心课程,作为学习数字系统的入门课程,在人才培养方案中,一方面起到承接模拟电路相关知识的作用,另一方面也为学生后续学习信号处理相关内容做铺垫[1-2].于此同时,数字电路实验课程在加深学生对数字电路理论知识的理解具有非常重要的作用.传统数字电路实验都大多采用74系列芯片,让学生实现加法器、计数器等一些简单的验证性实验.由于芯片之间以手动连线进行通信,当线路较复杂时,实验的调试变得异常困难,实验的灵活性以及综合性难以保证[3-4].
FPGA(Filed Programmable Gate Array:现场可编程门阵列)作为专用集成电路领域中的一种半定制电路,通过逻辑综合和布局、布线工具软件,可以将用硬件描述语言描述的电路快速下载到FPGA上进行测试,并且其内部逻辑可以被设计者反复修改.在现代电子产品设计中,FPGA在通信、信号处理以及嵌入式系统设计等领域得到了广泛的应用[5].
针对传统数字电路实验课程存在的调试困难、实验内容灵活性差、综合性不够等问题,我们将FPGA技术引入到数字电路实验课程中,本文以“数字时钟”综合实验为例,首先对数字时钟电路进行总体设计以及模块划分,然后利用硬件描述语言(Verilog HDL)进行描述,通过Quartus Ⅱ进行软件仿真,最后下载至FPGA开发板上进行硬件验证[6-7].
2 实验总体方案设计
本实验所要完成的功能为:数字时钟系统具备显示时、分、秒的功能,通过按键可以对当前时间进行调节,为了保证时间调节的准确性,还应设置一按键用来暂停以及开启时钟记时,系统还需要具有整点报时的功能.
在明确系统功能的前提下,利用模块化思想[8]可以将系统划分为四个子模块:按键模块、记时模块、数码管模块以及蜂鸣器模块.模块框图如图1所示,其中各模块的功能为:
按键模块:利用三个按键分别调节时钟时、分、秒的个位,利用单独按键暂停或开始时钟的记时,以便对时间进行准确校准.
计时模块:首先完成1s的定时器,再根据时钟的进位特点,分别设计三种计数器:模三计数器、模六计数器以及模十计数器.模三计数器用于完成小时的高位计数,模六计数器用于完成秒、分的高位计数,模十计数器用于完成秒、分、十位的低位计数.
数码管模块:将记时模块输出的时、分、秒数字信息先进行译码,然后利用人眼的视觉暂留,通过分时扫描的方式将时间信息显示在6位数码管上.
蜂鸣器模块: 将小时的低位信息作为蜂鸣器模块的输入,如果小时的低位发生变化,驱动蜂鸣器鸣叫一次.
3 实验系统的模块实现
3.1 按键模块
为了让系统能够准确识别按键的操作,需要对按键进行消抖以及松手检测处理.按键消抖可以分为硬件消抖以及软件消抖,为了简化实验流程,本文采用软件消抖的方式来获取稳定的电平信号,理论上的按键抖动时间为5~10ms,为此按键模块首先定义一个时长为15ms的定时器,按下按键15ms以后再对相应端口的电平信号进行判断.
松手检测的实现方法如式(1)所示:
key_press=key_reg&(~key_reg_next); (1)
式中key_press为表示按键按下是否有效的寄存器变量,key_reg存储当前时刻按键的状态,key_reg_next为下一时刻按键的状态.从式(1)可知,key_press若为1,key_reg必为1以及key_ reg_next必为0,其对应的含义为:只有按键当前时刻没有被按下,并且下一时刻被按下才认定为一次有效的按键触发信号.图2为松手检测实现方法的门级电路图.
3.2 计时模块
计时模块首先定义时长为1s的定时器作为计数器的时钟基准,该模块的设计思路为先利用1s的定时器完成单位秒的计数,然后再根据单位秒与单位分以及单位分与单位时之间的关系,完成时钟的计时.图3为单位秒的实现框图.秒位由秒个位与秒十位组成,数值在0~59之间循环变化,单位秒的实现过程就是模六十计数器的实现过程.模块中首先定义模十计数器完成秒个位的计数,随后定义模六計数器,将模十计数器与模六计数器以串行进位的方式进行级联完成模六十计数器的实现[9].每一个60s的计数完成以后,秒的个位与十位被清零,通过秒十位的进位输出位(C)向单位分的个位进位,完成时钟对分的计时.
3.3 数码管模块
实验平台的6个八段数码管使用共阴极的方式连接到FPGA内部的SEG_EN0~SEG_EN5管脚作为数码管的片选端,6个数码管的a~g以及小数点dp管脚并联连接到FPGA的SEG_DATAa~ SEG_DATADP管脚作为数据输入端.
实验采用动态扫描的方式让6个数码管同时显示当前时刻的时、分、秒信息.模块定义1ms的定时器作为动态扫描数码管的扫描周期,在扫描周期的时间段内,首先将待显示的时间信息进行译码,根据实际情况,只对0~9这10个数字进行译码,译码完成以后将译码结果赋给SEG_DATAx(x=a,b…DP),与此同时将对应的数码管片选端拉低,相应的时间信息就会显示在数码管上,每次间隔1ms开始对下一位时间信息进行扫描显示,由于人眼的视觉暂留,此时看到时、分、秒的信息同时在数码管上显示.
3.4 蜂鸣器模块
实验平台所用蜂鸣器的原理图如图4所示,由图可知蜂鸣器的正极连接在三极管的集电极上,FPGA的输出管脚BEEP接在三极管的基极.当BEEP管脚输出高电平,三级管截止,蜂鸣器不发声;当BEEP管脚输出为低电平时,三极管导通,蜂鸣器的电流系形成回路,蜂鸣器发声.通过控制BEEP管脚输出方波信号的频率以及占空比可以控制蜂鸣器的音调高低与音量大小.
实验中利用蜂鸣器进行整点报时,模块首先定义1s的定时器,然后检测小时的个位是否变化,若发生变化,蜂鸣器发出时长为1s的固定音调声音.
3.5 顶层模块
利用硬件描述语言(Verilog HDL)完成对各模块所要实现的功能进行描述之后,编写顶层模块连接各子模块.利用Quartus Ⅱ所带的分析综合工具对工程进行编译,生成RTL(Register Transfer Level)功能框图如图5所示,从图中可以看出数字时钟系统被分为4个模块,系统的内部端口与外部端口与所要设计的系统相符.
4 软件仿真
为了验证电路功能是否符合设计要求,首先利用ModelSim编写测试代码来对系统进行功能仿真.仿真结果如图6所示,仿真时添加的时钟激励为50M Hz,对开始键施加有效信号,时钟开始计时,此时使能位数据以及数据位的数据完全正确,因此数码管能够正确显示初始设置的时间值,仿真结果表明设计电路正确实现了预先的设计要求.
5 硬件验证
利用Modelsim对各模块及整个电路进行软件仿真后,确保各模块功能正常,最后将编译生成的sof文件通过下载线下载到FPGA开发板上.首先通过按键完成对时钟时、分、秒的设置,然后按开始键启动计时,当时钟到达整点时,蜂鸣器能够鸣叫1s.经实际检验,所设计的数字时钟能够正常运行,满足了预期的设计要求.
6 结束语
将FPGA技术运用到数字电路综合实验的设计之中是一种卓有成效的数字电路实验教学方法.在实验过程中,学生不仅能够学到自顶向下、模块化的现代工程设计思想,而且能够掌握利用硬件描述语言对电路进行设计的现代电路设计方法.经实践证明,该方法能够起到良好的教学效果,学生在实现系统的过程中既能够加深对相关知识点的理解,又能够提高实践动手能力.
参考文献:
〔1〕倪德克,师亚莉,朱旭花,等.EDA技术在数字电路课程设计教学改革中的探索与实践[J].大学教育,2016(04).
〔2〕王红航,刘凯,邓春健,杨健君,等.数字电路和EDA课程融合实践与探讨[J].实验科学与技术,2018,16(02).
〔3〕陈卫兵,陈曙光,李季.EDA技术与数字电路课程的教学改革[J].兰州文理学院学报(自然科学版),2016,30(05).
〔4〕易艺,郝建卫.FPGA在数字逻辑电路教学中的应用[J].实验科学与技术,2016,14(02).
〔5〕韓彬,于潇宇,张雷鸣.FPGA设计技巧与案例开发详解[M].北京:电子工业出版社,2014.
〔6〕刘福奇.Verilog HDL设计与实战[M].北京:北京航空航天大学出版社,2012.
〔7〕于斌,谢龙汉.ModelSim电子系统分析及仿真[M].北京:电子工业出版社,2014.
〔8〕蔚瑞华,余有灵,张伟,等.基于模块化思想的FPGA综合实验项目设计[J].实验技术与管理,2016,33(05).
〔9〕阎石.数字电子技术基础[M].北京:高等教育出版社,2006.