算术逻辑单元在Quartus II与ModelSim中的教学实例设计

2021-04-04 10:48陈艳杨飒
现代信息科技 2021年18期
关键词:数字电路案例教学法

陈艳 杨飒

摘  要:学生学习数字电路后,往往希望设计数字电路系统以提升实践能力。Quartus II和ModelSim软件由于操作便捷而成为学生数字电路实践的首选工具。文章以算术逻辑单元(ALU)为例进行教学设计。首先,根据ALU的特征设计指挥ALU工作的指令;其次,构建基于指令的ALU数字电路模块;最后,通过Quartus II与ModelSim联合仿真验证ALU的功能。仿真结果展示ALU电路的计算功能,直观的案例教学方法有利于培养学生数字电路系统设计方面的实践能力,提升学生的自主学习能力和创新思维能力。

关键词:案例教学法;数字电路;Quartus II;ModelSim

中图分类号:TN79+1 文献标识码:A 文章编号:2096-4706(2021)18-0111-05

Abstract: After learning digital circuit, students often hope to design digital circuit system to improve their practical ability. Quartus II and ModelSim software have become the preferred tools for students' digital circuit practice because of their convenient operation. This paper takes arithmetic logic unit (ALU) as an example for teaching design. Firstly, according to the characteristics of ALU, the instruction for guiding the functions of the ALU is designed; Secondly, the ALU digital circuit module based on instruction is constructed; Finally, the functions of ALU is verified through the joint simulation of Quartus II and ModelSim. The simulation results show the computing function of ALU circuit. The intuitive case teaching method is conducive to cultivate students’ practical ability in digital circuit system design and improve students’ autonomous learning ability and innovative thinking ability.

Keywords: case teaching method; digital circuit; Quartus II; ModelSim

0  引  言

在教学过程中,就人才培养而言,如何发挥学生主观能动性和提升学生动手能力等越来越受到教育工作者的广泛关注[1,2]。在工科领域,新时期人才培养的关键是做到理论与实践相结合[3,4]。显然,传统以教师课堂讲授为主的教学模式不利于新时期人才培养目标的实现。与传统授课不同的是,案例教学是一种“以参与者为中心”的学习方式,其课程的开展采用案例设计的形式[5-7],有助于提升学生理论转化为实践的能力。本文以算术逻辑单元(ALU)设计为例,通过案例分析激发学生在数字电路课程学习中发挥主观能动性。

数字电路作为一门理论基础与工程实践紧密结合的专业基础课程[8],尤其需要注重理论与实践的同步教学,达到理论指导实践、实践巩固理论的教学效果。根据数字电路的特性,课堂上,教师需要树立以“学生为中心”的思想,引导学生主动自主地学;实践中,教师需要通过把主动权交给学生,激发学生的学习兴趣、求知欲和潜在的学习能力,将抽象的数字电路理论转化为学生的实践能力基础,最终在不断的实践中提升学生的专业综合能力和创新思维能力。

本文通过ALU的教学案例引导学生利用数字电路知识进行实践。ALU是计算机中央处理单元(CPU)中的核心模块,也是学生接触最为广泛的数字电路系统。对ALU的设计一方面能提升学生对数字电路系统设计的兴趣;另一方面能加深学生对数字电路系统实践的认识。由于ALU是基于指令的工作模式,本案例將首先提供ALU指令集,然后基于指令集设计数字电路模块,最后给出ALU系统的仿真结果。为验证ALU系统,本文使用Quartus II[9]与ModelSim[10]软件对ALU系统进行联合仿真。Quartus II用于验证、综合ALU系统。考虑到部分版本的Quartus II不提供波形仿真[11],本文采用ModelSim进行波形仿真,解决部分Quartus II版本不能查看波形的问题。仿真结果显示本ALU案例具有正确的波形结果,表明该ALU内部的数字电路设计正确有效。

1  算术逻辑单元

算术逻辑单元(ALU)是中央处理器(CPU)的核心计算模块,如图1所示。与CPU内部其他模块(如,寄存器、译码器、移位器等)不同的是,ALU是唯一用于执行计算的模块。典型ALU包括逻辑运算部件和算术运算部件。其中,逻辑运算部件执行逻辑与、逻辑或、逻辑非、逻辑异或等操作;算术运算部件执行加法、减法、带进位加、带进位减等运算。

由于CPU是通过指令来指导操作的系统,因此,ALU数字电路系统的实现需要根据指令来进行设计。不失一般性,本文以16位的指令长度为例进行设计。

图2为指令的基本格式,指令长度为16 bits。每条指令由操作码和操作数组成。其中,操作码(4 bits)定义不同的操作类型(如加法、减法等),操作数(12 bits)用于提供操作所需数据的地址(如寄存器的地址)和立即数等。在本设计中,操作数和操作码的长度分别为12位(Code[11..0])和4位(Code[15..12]),所有计算数据均为无符号数据。

为驱动ALU实现图1中的各类运算,图3给出了不同运算类型的操作码。从图3中可以看出,操作码与运算类型间为一对一的关系,例如操作码“0001”指示执行逻辑或操作。本设计中涉及8类运算,其中逻辑运算和算术运算分别有4个。因此,本设计仅用到操作码的低3位(23=8),最高位为保留位(Code[15]=0)。

指令除了操作码外,还含有操作数(即Code[11..0])。本设计仅考虑操作数为操作码所对应的操作提供输入数据地址。对于不同类型的操作而言,其操作数格式分为两类,分别称为1输入类型和2输入类型。1输入类型对应图3中的逻辑非操作,该操作所对应的操作数仅提供一个输入数据地址;2输入类型对应图3中的其他类型操作,此类型操作的操作数部分需要提供两个输入数据地址。

图4为1输入操作数的指令格式。操作数(Code[11..0])分配一部分地址,用来存储操作数的寄存器地址,指明该操作的输入数据地址。在实际的ALU计算中,运算部件需要从寄存器中加载数据,然后执行计算,计算结果存储到指定的寄存器中。在16位系统中,寄存器地址的长度为4位(24=16),其对应的位置为“11..8”,如图4的“寄存器A”所示。由于1输入操作数的运算部件只需要从一个寄存器中加载数据,因此图4中存在未使用的指令区域,这里标记为保留位,保留位为“7..0”。

与1输入指令类型相比较,2输入指令类型需要指定两个输入数据所在的寄存器地址,如图5所示。因此,在2输入指令类型的指令设计中,存在两组寄存器地址,如图5中的寄存器A和寄存器B所示。寄存器A和寄存器B所在的地址区域分别为“11..8”和“7..4”,每个地址均为4 bits长度,保留位为“3..0”。

为方便起见,对于不同的计算,本文使用Quartus II的器件库设计ALU系统,不再设计器件库已存在的数字电路基本单元。接下来将介绍如何根据指令,利用数字电路基本单元完成ALU系统的设计。

2  ALU的电路实现

由于Quartus II软件支持电路原理图的仿真模式,ALU电路的实现将基于Quartus II软件的器件库,建立ALU指令集与数字电路之间的直观联系。本文先给出ALU原理图符号,然后给出ALU的内部电路。

图6为ALU在Quartus II软件中的原理图符号。ALU符号左侧为ALU输入端(共有4个输入端)。从图6中可以看出,输入端包括两组16 bits数据输入端(DataA[15..0]、DataB[15..0])、进位输入端(CYIN)以及控制端(Code[14..12])。其中DataA[15..0]、DataB[15..0]为ALU各运算提供输入数据,来源于寄存器,这两组数据的取值由图4、图5中操作数部分的寄存器A、寄存器B地址来确定,本设计默认已经从相应的寄存器地址中读取出输入DataA和DataB;CYIN为算术运算中的带进位操作提供进位输入;Code[14..12]是指令集的操作码部分。根据操作码的设计,操作码的最高位(Code[15])不参与ALU运算类型的控制,即该ALU的运算由Code[14..12]确定,如图6所示。ALU符号右侧为输出端(共2个输出端),其中ALUOut为16 bits的数据输出端,Cout为ALU的进位输出端。

在给出ALU的原理图符号之后,我们接下来给出该ALU内部的具体设计,分别包括设计支持图3中逻辑运算的数字电路、算术运算的数字电路以及ALU选择输出模块的数字电路,分别如图7(a)、图7(b)、图7(c)所示。

图7(a)为逻辑运算的电路模块,支持图3中的逻辑与、逻辑或、逻辑非以及逻辑异或等4种计算。根据如图3所示的操作类型与指令的对应关系,这4种操作由操作码的Code[13..12]确定。即:Code[13..12]=“00”为逻辑与操作;Code[13..12]=“01”为逻辑或操作;Code[13..12]=“10”为逻辑非操作;Code[13..12]=“11”为逻辑异或操作。为了在Quartus II中实现这4种逻辑操作,本设计直接从Quartus II器件库中选择相应的逻辑门电路进行实现。其中,逻辑与操作由AND2器件支持;逻辑或操作由OR2器件支持;逻辑非操作由NOT器件支持;逻辑异或操作由XOR器件支持。根据指令格式,逻辑非操作(指令格式见图4)的输入数据为寄存器A中的数据DataA(即图7(a)中NOT器件的输入端数据为DataA)。其余逻辑操作(指令格式见图5)的输入数据为寄存器A、寄存器B中的DataA和DataB(图7(a)中其余逻辑门电路的输入数据为DataA和DataB)。

基于上述各逻辑门,为支持由操作码Code[13..12]确定逻辑运算的唯一输出,还需要从各逻辑门输出结果中进行选择输出。本文选用LPM库中的4选1数据选择器(lpm_mux)实现选择输出。如图7(a)所示,数据选择器的控制端信号为Code[13..12],输入端信号为上述各逻辑单元的输出逻辑值,数据选择器的输出端(LO)为由Code[13..12]选择的一个输入端信号,实现由操作码Code[13..12]确定唯一逻辑值。

图7(b)为算术运算的电路模块,支持计算加法、减法、带进位加法以及带进位减法4种计算。为支持上述4种算术运算,本设计采用LPM库提供的lpm_add_sub器件进行加、减两类操作。该器件含有4个输入端和2个输出端。其中,输入端包含加减操作控制端(add_sub)、进位输入端(cin)和2个数据输入端(dataa、datab);输出端包含算术运算输出端(result)和进位输出端(cout)。加减操作控制端信号由Code[12]确定(见图3指令与运算间的对应关系)。由于指令加、减操作与lpm_add_sub内部的逻辑相反,因此Code[12]需取反后与lpm_add_sub控制端相连。进位输入端信号来自外部。本案例在同一器件上实现带/不带进位加、减操作,通过选择器为lpm_add_sub提供进位数据,实现为带进位操作提供进位数据(CYIN),如图7(b)中lpm_mux所示。2组输入端数据来源于寄存器数据(DataA、DataB)。对于lpm_add_sub的两组输出端,result端口输出运算逻辑值,cout端口輸出进位输出值,二者的值分别传输到ASO和Coutp。

图7(c)为选择输出模块。仅由图7(a)、(b)分别完成逻辑运算和算术运算后,无法得到操作码指定的运算值。为了输出操作码指定运算的值,本文设计如图7(c)所示的选择输出模块。其中,(I)确定ALU的进位输出值Cout;(II)确定ALU的数据输出值ALUOut。

3  仿真分析

本文采用Quartus II和ModelSim进行联合仿真。其中,Quartus II用于电路原理图的验证与综合,ModelSim用于输出仿真波形。下面首先介绍仿真设置,再对仿真结果进行分析。

3.1  仿真设置

本案例所用版本为Quartus II 12.0和ModelSim SE-64 10.0d,其中Quartus II软件用于设计和验证综合ALU电路,ModelSim软件用于提供ALU电路的仿真波形图。Quartus II软件生成.vo/.vho输出网表文件供ModelSim软件使用。

在联合仿真中,Quartus II软件需进行下列必要设置:(1)指定ModelSim软件的安装位置,设置“Tool name”为ModelSim(从Quartus II软件的“Tools”—“Options”—“EDA Tool Options”—“ModelSim”进行设置);2)添加.vo/.vho测试文件(从Quartus II 软件的“Assignments”—“Settings”—“EDA Tool Settings”—“Simulation”,勾选“NativeLink settings”的“Compile test bench”,并点击“Test Benches”添加.vo/.vho测试文件进行设置)。

在完成上述设置之后,直接从Quartus II菜单栏的“Tools”—“Run Simulation Tool”中点击“Gate Level Simulation”进行门级仿真。

3.2  仿真結果

该ALU单元内部主要包含逻辑运算模块和算术运算模块,如图7(a)、(b)所示,为验证ALU内部各模块的运算正确性,仿真结果将展示ALU内部各运算模块的仿真波形,如图8、9所示,以及ALU的输出仿真波形,如图10所示。仿真周期设置为100 ns。

图8为ALU内部逻辑运算模块的仿真结果,该仿真对应的电路图如图7(a)所示。该仿真图中的各信号与图7(a)一致。DataA、DataB以及Code[14..12]为输入信号,其他为输出信号。其中,Code[14..12]为操作码,取值范围为“000”到“011”4个数据,表示如图3所示的4种逻辑运算。DataA和DataB为输入数据,长度为16 bits。波形图中的AND、OR、NOT和XOR分别为逻辑与、逻辑或、逻辑非和逻辑异或操作的值。例如,在0~100 ns内DataA=“1000110101100111”,DataB=“0011001001101110”,经上述4种逻辑门操作后得到与各逻辑运算一致的值,即:AND=“0000000001100110”、OR=“101111110110 1111”、NOT=“0111001010011000”和XOR=“1011111100001001”。上述运算结果与各逻辑运算的理论值一致,这表明ALU内部的各逻辑门功能正确。

除了上述对各逻辑门的功能验证之外,图8中的LO波形用于验证ALU内部逻辑模块的输出。LO为操作码所对应的逻辑运算值,具体对应关系如图3所示。例如,在0~100 ns内,Code[14..12]=“000”,则LO输出逻辑与门的值,即LO=AND=“0000000001100110”。经验证,其余时间内的LO波形均为操作码(Code[14..12])所指定的运算值。因此,可判定该ALU逻辑运算模块具有正确输出。

图9为ALU内部算术运算模块的仿真结果,该仿真对应的电路图如图7(b)所示。该仿真图中的各信号与图7(b)一致。DataA、DataB为输入数据,CYIN为进位输入。Code[14..12]为操作码,用于确定算术运算类型,如图3所示。ASO和Cout分别为算术运算模块的运算值和进位输出值。本仿真设置CYIN=“1”。在0~100 ns内,Code[14..12]=“100”。根据图3所示计算类型,该输出为加法运算的结果,DataA+DataB=“1011111111010101”,进位输出为0,图9的仿真输出结果为ASO=“1011111111010101”,Cout=“0”,表明仿真结果与实际一致。在200 ns~300 ns内,Code[14..12]=“110”,根据图3所示计算类型,该输出为带进位加法运算的结果,DataA+DataB+CYIN= “1011111111100010”,进位输出为0,图9的仿真输出结果为ASO=“1011111111100010”,Cout=“0”。这一仿真结果与实际一致。相同地,减法与带进位减法操作同样能输出正确逻辑值,这表明ALU内部算术运算模块具有正确输出。

图10为ALU的仿真结果,对应的器件符号如图6所示。该仿真图中的各信号与图6、图7一致。Code[14..12]操作码指定一种运算类型,ALUOut输出Code[14..12]指定的运算值,Cout输出该运算的进位值。从该波形图中可以看出,ALUOut和Cout的值均与Code[14..12]操作码指定运算的值一致,实现了ALU的计算功能。例如,逻辑运算指令时(Code[14..12]=“010”或“011”),此时ALU的输出端(ALUOut)与LO一致;算术运算指令时(Code[14..12]=“100”或“101”),ALU的输出端与ASO一致。

4  结  论

本文以ALU为例进行教学案例设计,旨在利用数字电路知识设计复杂数字电路系统。本案例遵循ALU设计的一般过程,首先,基于ALU功能设计指令集;其次,构建基于指令集的ALU数字电路模块,实现从指令集到数字电路的转换;最后通过Quartus II和ModelSim软件进行联合仿真,仿真结果直观地展示了ALU内部主要运算模块以及ALU单元的正确波形图,验证了ALU的功能。本ALU教学案例利用数字电路基本单元实现复杂数字电路系统,学生可以通过教学案例进行自主学习,有效提升其设计复杂数字电路系统的实践能力和创新能力,为其进一步成长为学习型的信息人才打下良好的专业基础。

参考文献:

[1] 郭华.深度学习的关键是真正落实学生的主体地位 [J].人民教育,2019(Z2):55-58.

[2] 李春芳.习作评改应突出学生的主体性 [J].中文科技期刊数据库(全文版)教育科学,2017(5):265.

[3] 李旭,张为公.基于科研项目的数字电路创新型实验教学改革 [J].实验室研究与探索,2015,34(1):168-171+209.

[4] 侯艷姣.浅谈理论与实践一体化的电子电工教学 [J].职业,2021(15): 83-84.

[5] 宋耘.哈佛商学院“案例教学”的教学设计与组织实施 [J].高教探索,2018(7):43-47.

[6] 谢晓专.案例教学法的升华: 案例教学与情景模拟的融合 [J].学位与研究生教育,2017(1):32-36.

[7] 王亮.“C# 程序设计”项目案例教学研究 [J].现代信息科技,2018,2(1):115-116+119.

[8] 潘晓苹,但果,陈昕,等.基于CDIO理念的数字电路实验教学改革 [J].实验室研究与探索,2013,32(8):400-402+429.

[9] 陈贞.QuartusII软件中两种仿真结果的分析研究 [J].电子技术与软件工程,2016,14:98-99.

[10] BUV Prashanth,P Anil Kumar,G Sreenivasulu.Design & Implementation of Floating point ALU on a FPGA Processor [C]//2012 International Conference on Computing, Electronics and Electrical Technologies (ICCEET).Nagercoil:IEEE,2012:772-776.

[11] SINGH K J,SARKAR S K. Maximum power point tracking controller using P and O algorithm for solar PV array on FPGA [C]//2016 International Conference on Communication and Signal Processing (ICCSP).Melmaruvathur:IEEE,2016:1878-1883.

作者简介:陈艳(1991—),女,汉族,湖南常德人,助教,博士,研究方向:FPGA高性能计算。

猜你喜欢
数字电路案例教学法
基于FPGA技术的数字电路综合实验研究
探究数字电路设计中的抗干扰问题
数字电路课程的翻转课堂教学及调研
数字电路的翻转课堂教学
广告学专业《社会学概论》教学研究
案例教学法在高等职业院校口腔内科学教学中的应用效果
案例教学法在高职经济数学教学中的应用
房地产项目策划课程案例教学探索与实施
微课在《数字电路》项目化课程中的设计探索
实际数字电路中冗余故障探析