陈彬兵,周群,刘婕,贾绍芝
(四川大学 电气工程学院,四川 成都)
《数字电子技术基础》课程作为电类相关专业的专业基础课程,其课程内容需要与时俱进地跟上信息技术和微电子技术的快速发展,课程的教学内容和教学方法一直是相关专业教师关注的重点,显然基于传统74系列中规模集成芯片为基础的数字电路课程教学内容,已经无法满足课程发展的要求,将 FPGA 引入数字电路课程,取代传统的 74 系列集成电路模块已经成为目前大多数数电课程团队的共识[1]。我校数电教学团队也将数字电路课程的教学内容和教学手段更新作为工作重点,对如何将FPGA引入《数字电子技术基础》课程的教学工作,展开了深入的探索与实践。
《数字电子技术基础》课程是我校面向大二本科多学院学生开设的专业基础课,每期学生人数超过1000人,理论课48学时,配套的实验课24学时。课程要求学生:掌握数字电路的基本分析和基本设计方法;掌握数字集成电路的基本使用方法;能够使用硬件描述语言来设计、验证并实现数字电路;能独立完成中小规模的数字电路设计。目前教学中存在的主要问题,一是相对教学内容来说学时数较少,二是传统的数字电路分析设计方法不适应课程发展和教学需求。
数字技术是所有现代技术里面发展最快、应用最广泛的技术领域。2015年,英特尔(Intel)看中了可编程芯片领域的机会,出资167亿美元收购了FPGA厂商Altera,这也是截至目前英特尔历史上规模最大的一笔收购,收购完成后,英特尔成为全球第二大FPGA器件厂商,仅次于赛灵思(Xilinx)。2020年,英特尔老对手AMD(美国超威半导体公司)也同样看中可编程芯片领域的机会,以350亿美元价值的全股票交易收购了赛灵思(Xilinx)[2]。他们感兴趣的FPGA是什么呢?FPGA(Field Programmable Gate Array),现场可编程门阵列,是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。FPGA芯片主要由可编程逻辑块、可编程互联开关、可编程I/O模块3部分构成[3]。主要用于:1.通信领域-高速接口电路设计,处理高速接口协议;2.算法实现领域-例如数字信号处理、视频图形处理,需要实时处理大量数据;3.IC设计验证领域-尤其数字电路的设计验证;4.嵌入式领域-SOPC,用FPGA搭建底层系统硬件环境。而无论是FPGA的哪个方向,都离不开数字逻辑知识的支撑。数字逻辑是任何电子电气类专业的专业基础知识,FPGA只是一种实现数字逻辑的方式而已,而从数字电路角度看,FPGA是电子工程师尤其做数字电路必须掌握的一门技能。从实际看,行业中设计数字电路很少再采用分立器件设计,基本由可编程器件代替,FPGA还适合原型设计,方便学生创新或参加电赛,所以在《数字电子技术基础》课程的教学中,同时学习FPGA的软硬件知识十分有必要。
器件资源上,我们选择了小脚丫STEP-MAX10 FPGA开发板。它采用超小巧40脚DIP结构,核心FPGA芯片选用了Intel-Altera公司MAX10系列产品,同时板上集成了USB-Blaster编程器和按键、拨码开关、数码管、LED等多种外设资源。板上的36个FPGA的I/O接口都通过2.54mm通孔焊盘引出,可以和面包板配合使用,快速搭建自己的硬件电路。板卡尺寸为52mm X 18mm,能够灵活地嵌入到插座或者其他的系统中。STEP-MAX10 FPGA 板上集成的编程器能够支持Intel-Altera工具Quartus系列开发软件,只需要一根Micro USB数据线就能够完成FPGA的编程仿真和下载。我们按照实验小组,每2位同学配置一块开发板,学生使用开发板上手容易,另一方面学生可以根据实验要求,在任何场所完成软件编程和实验步骤,教师仅需在实验室对实验进行验收和对部分同学在实验中出现的问题进行修改,从而提高了课程学习的效果和效率,使将FPGA引入《数字电子技术基础》课程的教学工作成为可能。
课程采用了“基于SPOC的线上-线下混合教学法”,在中国大学MOOC平台上建立了SPOC学校专有课程,已完整实施了3个教学周期。课时安排上,将每周3学时的课时拆分成1学时在教师引导下的学生线上自主学习和2学时线下课堂教学,充分利用SPOC课程资源实现以教为中心向以学为中心的转变,使学生真正成为学习的主体。利用线上资源完全由学生线上自学的内容占到总体内容的30%以上,做到线上课程以基本知识基本概念为主,线下课程发挥教师与学生面对面即时交流的优势,以解决重点、难点内容为主[4]。
按照这种教学方法,对FPGA内容的学习,我们将可编程器件的基本结构、逻辑功能编程实现的原理完全由学生自学,可编程器件的一般开发过程,包括开发软件Quartus下载、安装和使用,Verilog HDL语言的学习,则是在教师的指导下学生自主学习。
为了在有限的学时中学会开发FPGA,我们充分整合理论教学和实验教学时间,在理论课的教学中,学生学会开发软件Quartus的使用,学会使用Verilog HDL语言描述数字电路,而在实验课的教学中,通过由浅入深的实验设计,使学生先是把FPGA用起来,然后让学生学会如何将FPGA里面的资源组合,实现更多复杂功能,最后充分发挥学生的积极性和创造性独立完成中小规模的数字电路设计。具体设计的有关三个FPGA实验如下:
实验一:组合逻辑电路(FPGA)
一、实验目的:
通过对组合逻辑电路实验的学习,掌握以下知识要点:
二、实验任务:
任务1:逻辑门电路功能验证
输入:a,b
输出:z[5:0]
z[5:0]与输入的逻辑关系分别是:与、与非、或、或非、异或、同或
仿真电路并用实验板上的FPGA实现相应的逻辑功能。供参考的源文件代码如图1所示。
图1 逻辑门电路功能验证实验源文件代码
任务2:在数码管上显示数字
输入:A[3:0]
输出:g_to_a[8:0]
在实验板上实现数码显示,供参考的源文件代码如图2所示。
图2 数码管显示实验源文件代码
三、实验步骤:(略)
实验二:时序逻辑电路(FPGA)
一、实验目的
通过对时序逻辑电路实验的学习,掌握以下知识要点:
二、实验任务:
任务1:分频器
实验板内置时钟频率为12MHZ,通过分频电路得到频率为1HZ的时钟信号。
输入:clk,rst
输出:clock_out
点亮实验板上的LED灯,观察输出信号频率,供参考的源文件代码如图3所示。
图3 分频器实验源文件代码
任务2:设计8位二进制加计数器,并在数码管上显示计数数字
输入:clk,rst
输出:seg[17:0]
计数器对秒脉冲信号计数,实验板上显示计数数字,供参考的源文件代码如图4所示。该程序需要调用之前生成的2个子模块:divider(分频器)和segmen7(7段数码显示)。
图4 二进制计数器实验源文件代码
三、实验步骤:(略)
实验三:课程设计(FPGA)
一、实验要求
每个小组需要在以下题目1~题目8中,抽选一题用硬件描述语言Verilog完成设计,并用实验板验证。
题目所要求的是基本功能(输入、输出端口设置仅供参考),设计时可在完成题目设计要求基础上进行发挥,功能越合理,越完善,越好!
若不能完成所抽题目的设计,可选择题目9,成绩要乘0.9的系数。
设计报告中要包含完整.v源文件的文本(不是图片),Analysis&Synthesis成功的截图(截图时关掉Compilation Report窗口,留下.v文件窗口),管脚分配表的截图,Compile Design成功的截图,programmer成功的截图,实验板演示图片或附视频文件。
最后一次实验课进行现场验收,每个小组展示设计成果并提交设计报告,设计成绩由教师评定(50%)+小组自评(20%)+小组互评(30%)组成。
二、实验题目
题目1:流水灯设计(有两种以上设计方案)
设计要求:控制8只LED灯,周而复始地从LED1~LED8,延时点亮,产生流水效果。需设定合适的延时时间:延时时间太短,由于人眼视觉暂留,看到的是8个LED同时点亮;延时时间太长,8个LED断续点亮,没有流水的效果。比较各种设计方案。
输入:clk,//内部时钟
输出:【7:0】LEDS,//控制实验板上的8个LED
题目2:彩灯设计
设计要求:控制8只LED灯LED1~LED8,按下述方式显示:全亮→奇数灯依次灭→偶数灯依次灭→由LED1~LED8依次亮,循环进行,且显示时间间隔0.5S和1S可调。
输入:clk,key //内部时钟,控制时间间隔
输出:【7:0】LEDS,//控制实验板上的8个LED
题目3:秒表设计
设计要求:秒表为60进制,以秒计时。秒数用数码管以十进制显示,分钟数用LDE灯显示,即秒显示从 00 到 59 循环每秒跳转计数,每计满1分钟,增加点亮1个LED灯,最大计数到7分59秒(此时7个LED灯亮,数码管显示59)。要求带复位、启动/暂停功能。
输入:clk,rst,key,//时钟,复位,启动/暂停
输出:【8:0】seg_10,seg_1 //数码管显示秒数
【7:0】led //LED显示分钟数
题目4:模可变的秒计数器设计
设计要求:对秒脉冲计数,通过控制信号实现模10、模24、模60、模100计数。计数值用数码管显示。要求带复位、启动/暂停功能。
输入:clk,rst,star,//时钟,复位,启动/暂停
[1:0] s //模 控 制 端s=00,M=10; s=01,M=24; s=10,M=60; s=11,M=100
输出:【8:0】seg_H,seg_L //数码管显示计数值
题目5:24进制可逆秒计数器设计
设计要求:秒计数器为24进制,对秒脉冲计数,通过控制信号可实现正计时和倒计时(递增和递减计数)。计数值用数码管以十进制显示。要求带复位、启动/暂停功能。
输入:clk,rst,star,//时钟,复位,启动/暂停dir //控制端dir=1,加计数; dir=0,减计数
输出:【8:0】seg_10,seg_1 //数码管显示秒数题目6:交通信号灯控制设计
设计要求:按图5所示方案进行信号灯控制,主路和支路的信号灯分别用实验板上的三色灯显示(每个三色灯由R、G、B三个变量控制,低电平驱动,红+绿=黄)。
图5 交通信号灯控制方案
输入:clk,rst_n,//时钟,启动
输出:【5:0】RGB_out,//控制实验板上的2个三色灯
题目7:利用PWM设计呼吸灯
设计要求:产生PWM脉冲来控制LED灯的亮度,前1秒从亮到弱,后1秒从弱到亮,周而复始,产生呼吸效果。
输入:clk, //时钟,启动
输出:led,//控制实验板上的LED灯
原理:由占空比可调节的PWM脉冲来反复控制LED的导通和关断,如果PWM脉冲的频率高于人眼视觉暂留需要的频率,尤其是达到50Hz以上后,我们一般人眼就觉察不出LED的闪烁了,从而认为LED没有闪烁。所以可以通过改变PWM脉冲的占空比来改变LED的亮度。
题目8:抢答器
设计要求:主持人发出信号后,开始抢答。三人参赛每人一个按键,抢中者数码管显示其编号。答题时限为10秒钟,抢中后,数码管即开始显示倒计时答题时间9、8…1、0,时间到时,停止答题灯亮。
输入:clk,star,k1,k2,k3//时钟,主持人控制键,抢答键
输出:【8:0】seg_num, //数码管显示答题者编号
【8:0】seg_ time, //数码管倒计时显示答题时间
led //停止答题灯
题目9:自拟题目
设计要求:输入端个数大于2个,输出端个数大于4个,同时包含组合逻辑电路和时序逻辑电路部分,要使用系统内部时钟,逻辑功能越完善越好。
本文提到的教学方案已在全部教学班中实施,2021年春季学期末,我们随机抽取1个136人的教学班,对其课程设计成绩分析,结果如图6所示。从图中我们可以看到,除3位同学因为特殊原因没有参加课程设计以外,其他学生都能很好地完成设计,其中还有23位学生表现优秀。
图6 课程设计成绩分布图
将FPGA技术深入融合到《数字电子技术基础》课程的教学中,能够通过合理的教学设计,在有限的学时下保证教学质量。另外,通过加强理论与实践的结合,使学生对可编程器件FPGA有一定的了解,知道FPGA能完成很多数字电路功能,对后期的数字电路和FPGA的学习产生兴趣,对训练学生工程能力,创新能力和培养创新意识发挥很好的作用。