跳转至

实验2 ALU 实验

实验2:运算器ALU实验,熟悉Vivado环境

算术逻辑部件ALU是计算机的核心功能部件,完成数据的算术和逻辑运算,功能和结构相对简单实现也不太复杂,但却是所有计算机的基础。注意,从本实验开始就是硬件的实验,要使用Verilog语言编写程序,通过Vivado来综合和实现。由于Vivado并不支持MacOS操作系统,在苹果电脑上,只能通过虚拟机的方式使用Vivado。在虚拟机里面可以安装Windows或者Linux,建议安装Linux,有许多工具很方便。

由于Vivado只支持Verilog语言(以及System Verilog)与VHDL语言,使用其它语言的一般需要转换为Verilog语言才能够在Vivado中使用。请参考对应语言的使用手册来了解如何转化为Verilog或者VHDL语言。下面的实验过程使用Verilog举例。

实验目的

  1. 熟悉硬件描述语言;

  2. 熟悉开发环境Vivado,了解硬件系统开发的基本过程;

  3. 掌握ALU基本设计方法和简单运算器的数据传送通路;

  4. 验证ALU的功能。

实验环境

  1. 硬件环境:PC计算机,Windows10或者Linux操作系统;THINPAD-Cloud开发板或者网络环境。

  2. 软件环境:FPGA开发工具软件Vivado。

实验内容

  1. 根据实验原理中的要求,用Verilog语言实现一个简单的ALU;

  2. 在教学计算机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功能的验证,具体步骤如下:

  1. 用Verilog语言编写ALU功能代码,并用状态机对其进行控制,使其完成实验要求的操作。操作码和操作数的输入用微型开关SW1\~SW32,计算结果的输出用教学机上的LED灯来显示。

  2. 将代码下载到教学机的FPGA芯片中,并调试完成。

  3. 在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信号。

  4. 状态机设计参考下图:

  5. 记录实验结果

控制ALU功能的状态机

注意:

实验板上拨码开关SW1~SW31是ON端表示1,相反表示0;时钟和复位按钮CLK、RST均是按下为1,放开为0。

实验结果记录

将实验过程中进行的操作与结果数据记录在下表中:

输入数据 实际输出 与预期一致性
操作码 操作数A 操作数B 运算结果 标志位



实验思考题

① ALU进行算术逻辑运算所使用的电路是组合逻辑电路还是时序逻辑电路?

② 如果给定了A和B的初值,且每次运算完后结果都写入到B中,再进行下次运算。这样一个带暂存功能的ALU要增加一些什么电路来实现?

实验提示

下图是实验过程展示。

1:拨码开关,输入操作数a,或者操作数b,或者操作码op。

2:手工的时钟开关。

3:状态机的状态指示,参考前面的状态机设计。

4:结果展示。


最后更新: 2021年10月25日