实验2 ALU 实验
实验2:运算器ALU实验,熟悉Vivado环境
算术逻辑部件ALU是计算机的核心功能部件,完成数据的算术和逻辑运算,功能和结构相对简单实现也不太复杂,但却是所有计算机的基础。注意,从本实验开始就是硬件的实验,要使用Verilog语言编写程序,通过Vivado来综合和实现。由于Vivado并不支持MacOS操作系统,在苹果电脑上,只能通过虚拟机的方式使用Vivado。在虚拟机里面可以安装Windows或者Linux,建议安装Linux,有许多工具很方便。
由于Vivado只支持Verilog语言(以及System Verilog)与VHDL语言,使用其它语言的一般需要转换为Verilog语言才能够在Vivado中使用。请参考对应语言的使用手册来了解如何转化为Verilog或者VHDL语言。下面的实验过程使用Verilog举例。
实验目的
-
熟悉硬件描述语言;
-
熟悉开发环境Vivado,了解硬件系统开发的基本过程;
-
掌握ALU基本设计方法和简单运算器的数据传送通路;
-
验证ALU的功能。
实验环境
-
硬件环境:PC计算机,Windows10或者Linux操作系统;THINPAD-Cloud开发板或者网络环境。
-
软件环境:FPGA开发工具软件Vivado。
实验内容
-
根据实验原理中的要求,用Verilog语言实现一个简单的ALU;
-
在教学计算机THINPAD-Cloud上验证实现的ALU的功能。
实验原理
本实验通过设计一个简单的ALU帮助同学们更好地理解数据通路和ALU的工作原理,并通过该实验使同学们熟悉Verilog硬件描述语言,为接下来的实验打好基础。
算术逻辑部件ALU的主要功能是对二进制数据进行定点算术运算、逻辑运算和各种移位操作等。算术运算包括定点加减乘除运算;逻辑运算主要有逻辑与、逻辑或、逻辑异或和逻辑非等操作。ALU通常有两个数据输入端A和B输入操作数,一个数据输出端Y以及标志位输出结果,通过输入操作码op来确定所要进行的操作。本实验通过实现一个状态机,根据状态机状态的变化来输入操作数及操作码,并最终实现不同的运算,将结果和标志位呈现出来。
本实验中的ALU要求实现基本的算术运算、位运算、移位运算等,具体功能如下表所示:
操作码 | 功能 | 描述 |
---|---|---|
ADD | A + B | 加法 |
SUB | A -- B | 减法 |
AND | A and B | 按位与 |
OR | A or B | 按位或 |
XOR | A xor B | 按位异或 |
NOT | not A | 按位取非 |
SLL | A sll B | 逻辑左移B位 |
SRL | A srl B | 逻辑右移B位 |
SRA | A sra B | 算术右移B位 |
ROL | A rol B | 循环左移B位 |
要求:ALU的数据输入A、B的长度为16位,操作码op为4位,算术运算时数据用补码表示。
主要实验步骤
本实验通过Verilog语言实现一个比较简单的ALU模块,如下图所示:
ALU的功能示意图
利用THINPAD-Cloud教学计算机完成ALU功能的验证,具体步骤如下:
-
用Verilog语言编写ALU功能代码,并用状态机对其进行控制,使其完成实验要求的操作。操作码和操作数的输入用微型开关SW1\~SW32,计算结果的输出用教学机上的LED灯来显示。
-
将代码下载到教学机的FPGA芯片中,并调试完成。
-
在THINPAD-Cloud教学机上运行时,reset和时钟均用手动开关或按钮,便于演示。操作码和操作数在拨码开关SW1~SW32上输入;为便于观察和调试,每次ALU得到操作数,最好可以在LED上显示一下。最后的运算结果在LED(D1~D16)上显示,溢出标志位( 仅针对加减运算)在D1上显示。另外需要注意的是:虽然板子上有6个按钮,分别是BTN6(RST), BTN5(CLK), BTN4, BTN3, BTN2, BTN1,但是只有BTN6和BTN5是带有消抖电路的,这两个才适合作为模拟时钟的输入。另外,对于Vivado来说,被设为时钟的输入信号用专门给时钟用的布线资源,来改善时序,这些资源不是所有IO都能用的。所以做实验的过程中务必把BTN5安排为手工时钟信号,BTN6安排为reset信号。
-
状态机设计参考下图:
-
记录实验结果
控制ALU功能的状态机
注意:
实验板上拨码开关SW1~SW31是ON端表示1,相反表示0;时钟和复位按钮CLK、RST均是按下为1,放开为0。
实验结果记录
将实验过程中进行的操作与结果数据记录在下表中:
输入数据 | 实际输出 | 与预期一致性 |
---|---|---|
操作码 操作数A 操作数B | 运算结果 标志位 | |
实验思考题
① ALU进行算术逻辑运算所使用的电路是组合逻辑电路还是时序逻辑电路?
② 如果给定了A和B的初值,且每次运算完后结果都写入到B中,再进行下次运算。这样一个带暂存功能的ALU要增加一些什么电路来实现?
实验提示
下图是实验过程展示。
1:拨码开关,输入操作数a,或者操作数b,或者操作码op。
2:手工的时钟开关。
3:状态机的状态指示,参考前面的状态机设计。
4:结果展示。