基于FPGA八位小型ALU的设计
2016-06-06陈燕凤
陈燕凤
摘 要:基于可编程逻辑器件FPGA和硬件描述语言VHDL的8位ALU的设计方法,该ALU单元有四个寄存器,其中三个为数据寄存器,一个为状态寄存器。任意三个数据寄存器均可作为输入操作数(操作数均为补码)和输出操作数。该ALU单元可实现左移、右移、加法、减法、乘法、与、或、非,指令的加载通过仿真代码实现。
关键词:FPGA;VHDL;ALU;算术逻辑运算
引言
目前FPGA技术正处于高速发展时期,新型芯片的规模越来越大,成本也越来越低,低端的FPGA已逐步取代了传统数字元件,高端的FPGA不断在争夺ASIC市场份额。算术逻辑单元ALU应用广泛,是芯片上可编程系统不可缺的一部分,本文利用VHDL语言在FPGA芯片上设计8位算术逻辑运算单元ALU,通过VHDL语言实现ALU的功能,并用MAXPLUSII软件进行仿真。
一、设计概述
一种基于可编程逻辑器件FPGA和硬件描述语言的8位的ALU的设计方法。该ALU采用模块设计方法,有寄存器模块、控制模块和显示模块组成,能实现8位无符号数的左移,右移,加,减,乘,与、或、非。该ALU在MAXPLUSII软件环境下进行功能仿真。
二、设计工作原理
ALU中包含4个寄存器,其中A,B,C为8位数据寄存器,其中A,B寄存器为输入数据寄存器,C为操作数寄存器。D为状态寄存器。
输入的第一组数据(运算数),存储在寄存器A中;输入的第二组数据(运算数),存储在B中;数据的第三组数据存储在C中,根据C存储器的数值,决定操作数A,B的运算方式(000->左移,001->右移,010->加法,011->减法,100->乘法,101->与,110->或,111->非)。当C寄存器数据为000,001时,分别对寄存器A,B中的数值进行移位后输出,状态寄存器无变化。当C寄存器数据为101,110,111时,把A,B进行对应与,或,非操作,若运算结果为0,则改变状态寄存器的值为0,若运算结果为非0值,状态寄存器值不变。当C寄存器数据为010,011,100时,把A,B进行对应的加,减,乘运算,当运算结果为0,溢出,负数时,改变状态寄存器数据,否则,状态寄存器数值不变。
三、设计流程图
四、仿真实现
RST功能、复位,RST=0时,各计时器归零,各输出归零。
时钟CLK_R=200ns
时钟CLK=200ns
CNT计时器,用于输入输出及运算的时序控制,6个一循环。
OPER运算控制000-111分别表示左移,右移,加,减,乘,与,或,非
SW_A第一个输入数
SW_B第二个输入数
LU_OUT运算结果,在CNT计时器计数为3时得出有效结果(当前分别对应复位,左移,右移,加,减,乘,与,或,非)。
HEX_H和HEX_L分别为运算结果高低位的数码管输出。
五、总结
本设计使用MAXPLUSII软件进行仿真,通过仿真结果分析可以看出实现设计要求的功能,此运算器设计充分利用FPGA和VHDL语言的特点实现了ALU功能。随着FPGA技术的发展,VHDL语言在硬件电路设计中,越来越显示出其优势,我们还可根据实际情况制定一个具有灵活性、可靠性和可扩展的,大于八位的ALU。
参考文献:
[1]孔哲,王伟基于FPGA的32位ALU的设计与实现[J]信息技术,2013(12)
[2]张庆玲,杨勇FPGA原理与实践[M]北京航空航天大学出版,2006