新闻中心

EEPW首页 > 测试测量 > 设计应用 > FPU加法器的设计与实现

FPU加法器的设计与实现

作者:时间:2012-08-29来源:网络收藏

2 的设计实现
2.1 电路原理图
浮点加法运算模块电路原理如图2所示。主要由6个模块构成,分别是Subcell模块、exchange模块、move模块、M_add模块、standat模块、cntrl模块。下面将分别对这6个模块进行介绍。

本文引用地址:http://www.eepw.com.cn/article/193319.htm

d.JPG


1)Subcell模块
此模块的功能主要有以下4个方面:①0操作数的检查。将有关信息送到cntrl模块和standar模块,用于决定是否进行后续操作,以便节省运算的时间。②阶码大小的比较。将小数a_little传送到cntrl模块。③对阶。比较两个操作数的阶码,求出它们阶码的差值sub[6..0],送到move模块。④当这个模块运算结束或者有新操作数输入时,告知cntrl模块。
在图2中,当rst_sub=‘0’,此模块就正常工作;若rst_sub=‘1’,则所有的输出都是0。在零操作数检查的过程中,如果发现有0操作数的存在,则就令num_z=‘1’;在此操作数的检查过程中还可以区分到底是哪一个操作数为零,假如操作数x为零,则就令z_find=“0 1”;若是操作数y为零,则就令z_find=“10”;若无0操作数,则z_find=“00”。当对参与运算的两个操作数进行0操作数判别结束后,本模块在实现的过程中主要采用了5个条件语句来实现两个操作数大小的比较,通过比较可以算出阶码的差值。若两数的阶码相同,即小数点是对齐的,则进行位数的比较,当然这所有的比较都是通过不同的条件语句来实现的。所有的比较完毕,end_sub设为1。当有新的数据从x,y端输入的时候,根据程序的设置,相关进程会被唤醒,控制模块接收到进程发送来的脉冲change,就知道有新的操作数据输入,因此再次启动控制模块,进而进入另一个新的周期。
2)exchange模块
此模块的功能为:①向move模块输入小幂次浮点数尾数,②向M_ADD模块输入大幂次浮点数尾数。
此模块包含一个Process进程,当rst_exchange=‘0’并且en_exchange=‘1’,浮点数x,y的幂和尾数被拆开,存入不同变量。然后执行本模块所设置的4个条件语句,分别对两个浮点数进行处理,一方面将幂次小的操作数位数进行扩充,扩充为33位后传送到move模块中;另一方面将幂次大的操作数扩充成32为传送到M_ADD模块中。进程结束后,end_exchange置高电平,告知控制模块。
3)move模块
此模块的功能主要是为了实现两个操作数的对阶。在这个模块中设计了一个进程process(clk),它以clk为敏感信号,此进程还包含有2个条件语句模块。第1个模块主要是对变量进行更新。第2个模块主要是判断移位是否已经结束,并对相应的标志位进行设置。假如所移操作数的后8位是不为0的,那么在每个时钟的上升沿到来时继续进行向右的移动。
4)M_add模块
此模块的主要功能是对阶完成以后,对尾数进行运算。通过在每个尾数前加一位0来检测运算结果是否需要规格化。程序如下:
e.JPG
在进行加减法运算中分两种情况:当add_sub=“11”,执行Mx+My;当add_sub=“00”,执行Mx-My。具体由Cntrl模块的分析中给出。
5)standar模块
此模块的主要功能是对浮点运算的结果进行规格化处理。这个模块中有两个变量分别是ntemp和texp,该模块在首次执行时对它们进行初始化,否则只有当控制模块发出rst命令的时候才能对它们的初始值进行改变。当add_sub的值不同时,则将条件语句分成了不同的部分:
①当add_sub的取值为“00”或者当其取值为“01”的时候,可得M_ADD模块进行的是减法运算;如果运算结果是0,那么就直接将0输出;假如运算结果不为0,就需要对numb(15)进行考虑;假如其值是1的话,就不需要进行左移,直接执行语句:“sum_standar=signal_b temp_exp(5 downto0)ntemp(14 downto 6);”。但是如果numb(15)的值是为0的,就需要进行左移。
②当add_sub=‘11’时,则M_ADD模块执行加法运算;如果numb(16)的值为1,就需要进行右移。而当numb(16)的值为0时,则不用进行规格化,直接输出。
6)cntrl模块
在这个模块中主要采用的是Mealy状态机,它和输入、输出、状态皆有关;一方面Mealy状态机要完成其状态的转化,需要等待本模块中CLK_m时钟信号的上升沿。另一方面如果subcell模块有了新的操作数的输入,本模块收到告知信号后,会将状态机重新运行。
在此对本设计模块中所使用状态机所包含的各个部分进行简要的阐述:
①说明部分
本部分主要是在ARCHITECTURE和BEGIN之间,用TYPE语句定义枚举型的数据类型(包含既定状态元素)status,状态变量xt_status和ct_st atus定义为信号signal。主要用以下语句实现:
type status is(rst1,rst2,rst3,rst4,rst5,rst6,rst7);
signal xt_status,ct_status:status;



关键词: FPU 加法器

评论


相关推荐

技术专区

关闭