没有合适的资源?快使用搜索试试~ 我知道了~
首页基于FPGA的32位ALU软核设计
基于FPGA的32位ALU软核设计
310 浏览量
更新于2023-05-22
评论 2
收藏 135KB PDF 举报
介绍了一种基于可编程逻辑器件FPGA和硬件描述语言VHDL的32位ALU的设计方法。该ALU采取层次化设计方法,由控制模块、逻辑模块、加减法模块、乘法模块和除法模块组成,能实现32位有符号数和无符号数的加减乘除运算,另外还能实现9种逻辑运算、6种移位运算以及高低字节内容互换。该ALU在QuartuslI软件环境下进行了功能仿真,通过验证表明,所设计的ALU完全正确,可供直接调用。
资源详情
资源评论
资源推荐

基于基于FPGA的的32位位ALU软核设计软核设计
介绍了一种基于可编程逻辑器件FPGA和硬件描述语言VHDL的32位ALU的设计方法。该ALU采取层次化设计方
法,由控制模块、逻辑模块、加减法模块、乘法模块和除法模块组成,能实现32位有符号数和无符号数的加减
乘除运算,另外还能实现9种逻辑运算、6种移位运算以及高低字节内容互换。该ALU在QuartuslI软件环境下进
行了功能仿真,通过验证表明,所设计的ALU完全正确,可供直接调用。
目前许多
1 电路总体设计思想电路总体设计思想
算术逻辑单元ALU采用模块化设计,可以完成32位有符号数和无符号数的加减乘除,还可以实现9种逻辑运算、6种移位操
作以及高低字节内容互换等操作。
总体设计图,如图1所示。当you_wu=1时实现有符号数加减乘除运算,否则为无符号数运算。进行有符号数加减运算时c为
符号位,无符号数加减运算时c表示进位或借位。加减法运算和逻辑运算结果存于y1。乘运算时,y1放高32位,y2放低32位。
除法运算时y1放商,y2放余数。a,b表示两路32位输入数据。
2 主要模块功能分析主要模块功能分析
算术逻辑单元ALU包含5个模块:控制模块、逻辑模块、加减法模块、乘法模块和除法模块。控制模块比较简单,即1个2线
~4线译码器,完成其他模块的控制与选择。当ctr=00时完成逻辑运算,ctr=01时完成加减法运算,ctr=10时完成乘法运
算,ctr=11时完成除法运算。
2..1 逻辑运算模块逻辑运算模块
本模块实现与、或、非、与非、或非、异或、同或、逻辑左移、逻辑右移、算术左移、算术右移、逻辑循环左移、逻辑循
环右移以及高低半字(16位)分别取反和高低字内容互换等操作。用1个case语句即可实现上述全部功能。
2..2 加减法模块加减法模块
加减法模块可根据需要完成32位有符号数和无符号数的加减运算,在程序开始时先判断所要进行的运算有无符号数,对于
有符号数,用符号位将两组数扩展为33位二进制数,否则用0扩展为33位二进制数,其中减法运算采用补码实现,所以整个程
序只有加法运算。程序只占用68个逻辑资源(LE),非常节省资源,而且速度很快,是一种优化设计。仿真图如图2所示。
2..3 乘法模块乘法模块
比较好的带符号数的乘法是布斯(Booth)算法。但是本模块既要实现有符号数运算,也要实现无符号数运算,用Booth算法反
而复杂。综合考虑逻辑资源的使用和速度两个方面的因素,本设计采用下面的算法:不管是有符号数还是无符号数乘法,都转
换成无符号数相乘,最后根据需要对计算结果进行转换。如果是无符号数相乘,乘积不作变化。如果是有符号数相乘,只有两
位乘数符号不一样时才对乘的结果做处理,否则结果不变。乘积处理的方法是将乘积取反加1。假设乘数是32位数a,b,乘法
主要通过移位和加法组成,设a=a31,a30…a0,如果ai=1则b向左移i位且右边添i个0,否则b不作变化,a中有多少个1就要进
行多少次移位操作,最后将所有移位值相加既得a×b的值。乘法的仿真图如图3所示。仿真结果表示设计完全正确。32位有符
号和无符号数乘法模块占用逻辑资源不到800 LE,且由于各种移位并发进行,故速度较快。
2..4 除法模块除法模块
目前运用VHDL进行乘法运算的研究较多,而除法只有少数学者研究。文中综合考虑速度和资源的占用,采取下列算法实

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0