APP下载

“FPGA原理及应用”的教学案例分析

2021-11-29张庆平郭玉祥

关键词:C语言编程语法

张庆平,郭玉祥

(安庆师范大学电子工程与智能制造学院,安徽安庆 246133)

FPGA全称为现场可编程逻辑门阵列,是广泛用于高速通讯和数字信号处理等领域的芯片[1]。该芯片使用硬件描述语言(HDL)进行编程,常用编程语言有Verilog和VHDL。“FPGA原理及应用”课程是电子类的专业课,主要内容有[1-3]硬件编程语言介绍和FPGA硬件开发实操,两者是循序渐进的关系,前者是后者的基础。HDL语言的学习难度较大,相比于以C语言为代表的软件编程语言,HDL这类硬件语言无论从编程思路还是开发流程上都有明显不同。HDL是学习FPGA的基础,HDL代码仿真、FPGA开发流程、开发软件的使用、开发板的调试,这些实践性很强的教学内容,是课程的重点和难点。大量教学经验表明,学生亲自走通整个实验过程后,对书本理论的理解更透彻,处理实际编程中遇到的问题也更得心应手。针对课程特点、学生实际情况以及现行教法的不足,个人总结了几点教学经验和改进方法。

1 讲解知识点时,突出“硬件”这一主线

Verilog语言的初衷是描述硬件电路和进行电路仿真,所有语法的设计均围绕这一目的展开。讲解各类语法时,不仅要介绍其格式,还应从硬件特性的角度分析为什么要这样设计。这不仅有助于学生理解知识点,更能帮助学生领会Verilog编程的思想和方法。有了这层铺垫,“综合与不可综合语法的区分”和“C语言与Verilog语言的异同”这些难点,学生更易理解和接受。下面举两个教学案例加以说明。

案例1不可综合语法的总结归纳

这类语法之所以不可综合,与硬件电路的特性直接相关,主要有以下几种。

1)形如$time、$display、$fopen、$readmemb等任务。很明显,熟悉了FPGA的内部结构后就能看出,因为芯片没有对应的电路支持这些操作,此类语法只用于仿真,用途是输入仿真数据或输出仿真结果。

2)时间延迟。不同于单片机的时延函数,Verilog的时延只能用于仿真。从硬件角度看,FPGA内没有现成的计时器等电路构造,所以不可综合。同时提醒学生,为达到可综合的时延效果,应采用变通的方案,如构建高速时钟驱动的移位寄存器来实现。

3)开关级MOS管。因FPGA的最小可编程单元的层次在MOS管之上,即Verilog代码无法在FPGA内配置出基于MOS管所搭建的电路,故无法综合。

4)形如wait、forever、repeat、while 等高级语法。讲解时,着重强调HDL 是硬件描述语言,而非硬件设计语言,高级语法难以直接对应硬件电路,综合工具基本都不支持。

5)initial初始化。这一语法用于仿真时给参数赋初值,无法直接对应实际电路。课堂上可引导学生思考如何达到可综合的初始化效果,给出两种解决方法:状态机和在代码的复位if语句段内给寄存器赋初值。由此提醒学生,可综合的电路是通过变通的办法实现寄存器初始化,而非直接使用initial语法。

6)循环次数不固定的for循环。教学时需强调,for循环是个特例,循环次数固定的for循环可以被综合成电路。课堂上结合硬件特征加以解释,因为for循环的综合,本质是将循环体逐次展开成电路,若循环次数不固定,自然无法展开成确定的电路。

7)形如always@(posedge clk or negedge clk)的双沿触发。结合数字电路课程所学的DQ 触发器的特点,触发沿只能是上升沿和下降沿之一,不能同时触发,故不可综合。

教学情况表明,加入硬件特性的分析后,相关知识点无需死记硬背。学生知其然更知其所以然,教学效果更佳。学生初学语法的第一印象就对是否可综合有清晰明确的认知,实际编程时避免走弯路。

案例2Verilog与C语言执行方式的差异

C语言代码按书写顺序执行(goto语句除外),而Verilog本质上是并行化的,教学时需强调背后的硬件背景。C 语言编译得到二进制指令码,执行机构是CPU,硬件特点是逐个取指令-指令译码-执行指令。而对于FPGA,其内部不是CPU的构造,各Verilog模块综合得到的电路,上电后同时运行,与书写顺序无关。教学实践表明,不仅要在绪论部分讲解这一要点,还要在后续讲解各类语法时,对比Verilog和C语言语法的异同。这样,学生初学时就有“软件编程与硬件编程只是形式上类似,编程思路上截然不同”的观念,写代码时从硬件电路的原理及工作方式的角度考虑,错误率会降低。

2 结合讲授的知识点,穿插复习“数字电路”课程

数字电路作为电子类专业的基础课,极为重要,本课程是数字电路的延伸。教学中,穿插复习数字电路的相关知识点,既能巩固前期所学,查漏补缺,同时也为介绍Verilog或FPGA的相关知识点做铺垫。在讲解Verilog代码的同步和异步复位写法之前,简要复习数字电路中的同步复位和异步复位概念,这照顾了遗忘相关知识点的学生。实践表明,引入这一环节后,学生的学习效果更佳。

3 作业题中引入改错题

如前所述,Verilog语法与C语言的貌合神离,学生初学时容易混淆。除了必要的编程习题外,另设计了改错题。此类题型,主体是一段完整的代码,划分为10段,每段为一小题,其中若干段的语法或注释有误,答题时,先判断每段的对错,若有误则改正。这一新题型,不仅锻炼学生代码阅读和理解能力,也能从侧面提醒学生留意编程中的易错点。作业效果显示较理想。

4 注重知识点的梳理和系统总结

Verilog语法较为繁琐,知识点都零散分布于各个章节之中,需学生自行总结。结合本校学生情况,为达到更好的教学效果,在学完语法后,将重要的知识点做系统的归纳整理,帮助学生快速掌握要点。将学过的语法按可综合与不可综合分类,板书和课件中专门列出,学生一目了然。再如,Verilog语法格式中,哪些和C语言意义近似,哪些又有所区别,哪些是Verilog为描述硬件而特有的,都可以在学完语法后,以专题的形式总结。这对学生掌握硬件编程的难点大有帮助。

5 涉及软硬件操作的理论课时,建议在机房授课

传统课堂大多安排在多媒体教室,通过投影仪演示软件操作,但教学经验表明这样的方式收效不佳。原因是投影仪分辨率有限,软件菜单文字和工具栏图标较小,学生不易看清楚。另外,学生只是走马观花地看了一遍操作,而等到动手实验又隔了一段时间,课堂所讲的操作要点已然淡忘。为此,直接将这类课时安排到机房,教师在投影仪上演示,学生同步上机跟进,边学边练手,效果更佳。

6 结合学生实际,合理设计实验内容

为提高学生的技能,拓展就业面,不仅要开设Verilog仿真类实验,还需开设开发板调试的实验。鉴于各高校学生的理解和接受能力不一,实验教学不能照搬外校的内容。本校以往的FPGA实验,大多是上机做modelsim仿真,学生很少接触开发板。新实验的安排,一方面精简仿真类实验,一方面增设开发板综合实验。本着难易适中、兼顾趣味性和实验条件的要求,设计了频率计、简易电子琴、奏乐电路、数字电压表、象棋比赛计时电路等若干必做的综合性实验。这些实验,代码规模适度,突出了自顶向下的整体设计思路,全面覆盖了重要的Verilog语法及知识点,且最终都上开发板调试,实验完成后能明显看出成果。

此外,为贴近实际应用,设计了“数字滤波电路”、“matlab的HDL-Coder模块使用”、“coordic算法求正弦和余弦值”等若干偏算法的选做实验,供有兴趣的学生完成。将综合实验分为必做和选做,更符合因材施教的方针。

7 总结

针对FPGA课程的教学,同仁已总结出一系列行之有效的教学方法[4-6]。结合本校学生的实际情况,为进一步提高教学质量,有几点值得改进和完善。一,强调和区分可综合与不可综合语法。根据编程及教学经验,只有明确区分了这两类语法,才能写出合乎要求的、可以综合出硬件电路的代码,否则写出的代码因无法综合出电路而被开发软件忽略,导致较隐蔽的错误。这类错误初学者较难排查,势必影响学习效率和积极性。二,突出Verilog语言与C语言在语法及理解方式上的异同。

猜你喜欢

C语言编程语法
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
基于Visual Studio Code的C语言程序设计实践教学探索
纺织机上诞生的编程
跟踪导练(二)4
KEYS
基于C语言的计算机软件编程
Keys
Book 5 Unit 1~Unit 3语法巩固练习