tag 标签: 加法器

相关帖子
相关博文
  • 热度 24
    2015-3-24 13:30
    1068 次阅读|
    0 个评论
       0  引言   现代信号处理技术通常都需要进行大量高速浮点运算。由于浮点数系统操作比较复杂,需要专用硬件来完成相关的操作(在浮点运算中的浮点加法运算几乎占到全部运算操作的一半以上),所以,浮点加法器是现代信号处理系统中最重要的部件之一。FPGA是当前数字电路研究开发的一种重要实现形式,它与全定制ASIC电路相比,具有开发周期短、成本低等优点。但多数FPGA不支持浮点运算,这使FPGA在数值计算、数据分析和信号处理等方面受到了限制,由于FPGA中关于浮点数的运算只能自行设计,因此,研究浮点加法运算的FPGA实现方法很有必要。    1 IEEE 754单精度浮点数标准   浮点数可以在更大的动态范围内提供更高的精度,通常,当定点数受其精度和动态范围所限不能胜任时,浮点数标准则能够提供良好的解决方案。   IEEE协会制定的二进制浮点数标准的基本格式是32位宽(单精度)和64位宽(双精度),本文采用单精度格式。图1所示是IEEE754单精度浮点数格式。图中,用于单精度的32位二进制数可分为三个独立的部分,其中第0位到22位构成尾数,第23位到第30位构成指数,第31位是符号位。   实际上,上述格式的单精度浮点数的数值可表示为:   上式中,当其为正数时,S为0;当其为负数时,S为1;(-1)s表示符号。指数E是ON255的变量,E减127可使指数在2-127到2128变化。尾数采用科学计算法表示:M=1.m22m21m20……m0。m22,m21,…,m0,mi为Mp的各位,设计时应注意尾数中隐含的整数部分1。0是一个特殊的数,0的指数位和尾数位均为0,符号位可以是1,也可以是0。    2电路的流水线结构   一般情况下,结构化设计是电路设计中最重要的设计方法之一,采用结构化设计方法可以将一个复杂的电路分割为独立的功能子模块,然后按一定的原则将各子模块组合成完整的电路,这几乎是电路设计的通用模式。这种设计方法便于设计人员分工合作、实现设计和功能测试,缩短上市时间、升级和二次开发,因而具有其它方法无法比拟的优势。   结构化设计基本上可归结为两种方法:流水线(pipeline)和握手原则。其中握手原则适用于各功能子模块内部运算比较复杂、数据运算时延(latency)不确定的设计。由于数据运算时延不确定,所以,各子模块间的时序配合必须通过握手信号的交互才能完成。握手原则设计的电路一般采用复杂的有限状态机(FSM)作为控制单元,工程设计难度大,故在设计时应慎重使用。流水线法适用于各功能子模块内部运算简单整齐、数据运算时延确定的设计。由于数据运算时延比较确定,各前后级功能子模块不需要任何交互信号就能完成时序配合,故可方便地实现数据的串行流水运算。流水线控制比较简单,一般不需要设计专门的有限状态机,而且工程设计容易,设计时可优先选用。    3  工程的FPGA实现   3.1开发环境和器件选择   本工程开发可在FPGA集成开发环境QuartusII 8.0 spl中完成。OuartusⅡ是世界著名PLD设计生产厂商——Altera公司的综合性PLD开发软件,内嵌综合器和仿真器,并有可与第三方工具协作的灵活接口,可以完成从设计输入到硬件配置的完整PLD设计流程,而且运行速度快,界面统一,功能集中,易学易用。   本设计中的器件选用Stratix IIEP2S15F484C3。Stratix II是Altera公司的高性能FPGA Stratix系列的第二代产品,具有非常高的内核性能,在存储能力、架构效率、低功耗和面市及时等方面均有优势。   本系统的顶层框图如图2所示。为了显示清楚,图2被分成两个部分显示。本工程采用异步置位的同步电路设计方法,其中clk、reset、enab分别为系统时钟、系统异步置位、系统使能信号。din_a、din_b分别为两个输入的单精度浮点数,data_out则是符合IEEE 754标准的两输入浮点数之和。    3.2浮点加法运算的实现   浮点加法运算可总结为比较、移位、相加、规范化等四个步骤,分别对应于compare、shift、sum、normalize四个模块。    (1)compare模块   本模块主要完成两输入浮点数的比较,若din_a、din_b为两个输入单精度浮点数,则在一个时钟周期内完成的运算结果如下:   ◇大数指数b_exp这里的大数指绝对值的比较;   ◇两浮点数的指数差sube,正数;   ◇大数尾数b_ma;   ◇小数尾数s_ma,该尾数已加入隐含1;   ◇和符号c_sgn,为确定输出结果的符号;   ◇加减选择add_sub,两输入同符号时为0(相加)、异符号时为1(相减),sum模块中使用实现加减选择。    (2)shift模块   shift模块的作用主要是根据两个输入浮点数的指数差来执行小数尾数(已加入隐含1)向右移动相应的位数,以将输入的两个浮点数指数调整为相同的数(同大数),若b_exp、sube、b_ma、s_ma、c_sgn、add_sub为输入信号(其含义见compare模块),则可输出如下运算结果(在一个时钟周期内完成):   ◇大数指数(sft_bexp),将b_exp信号用寄存器延迟一个周期,以实现时序同步;   ◇小数尾数(sft_sma),已完成向右移动相应的sube位;   ◇大数尾数(sft_bma),将b_ma信号用寄存器延迟一个周期,以实现时序同步;   ◇和符号(sft_csgn),将c_sgn信号用寄存器延迟一个周期,以实现时序同步;   ◇加减选择(sft_addsub),将add_sub信号用寄存器延迟一个周期,以实现时序同步;    (3)sum模块   本模块可根据加减选择(sft_addsub(信号完成两输入浮点数尾数(已加入隐含1)的加减,若sft_bexp、sft_sma、sft_bma、sft_csgn、sft_addsub为输入信号(其含义见shift模块),则可输出如下运算结果(在一个时钟周期内完成):   ◇大数指数(sum_bexp),将sft_bexp信号用寄存器延迟一个周期,以实现时序同步;   ◇尾数和(sum_ma),为大数尾数与移位后小数尾数的和,差(两尾数已加入隐含1);   ◇和符号(sum_csgn),将sft_csgn信号用寄存器延迟一个周期,以实现时序同步;    (4)normalize模块   normalize模块的作用主要是将前三个模块的运算结果规范为IEEE 754单精度浮点数标准,若sum_bexp、sum_ma、sum_csgn为输入信号(其含义见sum模块),则其输出的运算结果(在一个时钟周期内完成)只有一个和输出(data_out),也就是符合IEEE754浮点数标准的两个输入浮点数的和。    4系统综合与仿真   由于本工程是由compare、shift、sum、normalize四个模块组成的,而这四个模块通过串行方式进行连接,每个模块的操作都在一个时钟周期内完成,因此,整个浮点数加法运算可在四个时钟周期内完成。这使得工程不仅有确定的数据运算时延(latency),便于流水线实现,而且方便占用的时钟周期尽可能减少,从而极大地提高了运算的实时性。    4.1工程综合结果   经过Quartus II综合可知,本设计使用的StratixⅡEP2S15F484C3芯片共使用了641个ALUT(高级查找表)、188个寄存器、0位内存和可达到80 MHz的时钟频率,因此可证明,本系统利用合理的资源实现了高速浮点数加法运算。    4.2工程仿真结果   本工程仿真可使用Quartus II 8.0内嵌式仿真工具来编写Matlab程序,以生成大量随机单精度浮点数(以便于提高仿真代码覆盖率,提高仿真的精确度),然后计算它们相加的结果,并以文本形式存放在磁盘文件中。编写Matlab程序可产生作为仿真输入的*.vec文件,然后通过时序仿真后生成*.tbl文件,再编写Matlab程序提取其中有用的结果数据,并与先前磁盘文件中的结果相比较,以验证设计的正确性。   图3所示是其仿真的波形图。   从图3可以看出表1所列的各种运算关系。表2所列为其实际的测试数据。   表中“A+B实数表示(M)”指Matlab计算的结果;“误差”指浮点处理器计算结果与Matlab计算结果之差。   综上所述,本工程设计的浮点加法器所得到的运算结果与Matlab结果的误差在10-7左右,可见其精度完全能够符合要求。    5  结束语   本工程设计完全符合IP核设计的规范流程,而且完成了Verilog HDL建模、功能仿真、综合、时序仿真等IP核设计的整个过程,电路功能正确。实际上,本系统在布局布线后,其系统的最高时钟频率可达80MHz。虽然使用浮点数会导致舍入误差,但这种误差很小,可以忽略。实践证明,本工程利用流水线结构,方便地实现了高速、连续、大数据量浮点数的加法运算,而且设计结构合理,性能优异,可以应用在高速信号处理系统中。
  • 热度 22
    2014-11-8 11:36
    1372 次阅读|
    0 个评论
    群里突然有人发问优化代码段: module youhua(input a, input b, input c, input d, input sel, output /*reg*/ sum); always @(a,b,c,d,sel) if(sel) sum = a+b; else sum = c+d;   很早之前就看到了类似的题目,好像也是面试题,所以我很快就想到了减少加法器。 但是群里有人说用assign sum = sel? (a+b):(c+d);代替上面的always块, 我觉得很奇怪,这样跟上面的完全没有什么两样,起不到任何优化的效果 我想到的是用多路选择器选择a,b,c,d然后接入加法器: reg a_r,b_r; always @(a,b,c,d,sel) if(sel) begin a_r = a; b_r = b; end else begin a_r = c; b_r = d; end assign sum = a_r + b_r; RTL如下
  • 热度 21
    2014-6-10 10:37
    1724 次阅读|
    0 个评论
    随着仪表放大器的成本日益下降,在传统上采用运算放大器的应用中,使用仪表放大器可提升性能。 图1所示的运放加法器有以下几个缺点: 1.输入阻抗不高,由各信号的输入电阻决定。 当驱动信号的源阻抗很大或需要低阻抗驱动源设计时,这会引起增益误差。 2.电路无共模抑制能力,因此输入必须是单端。 3.最为明显的是,整个系统的性能受增益最大的通道限制。 一个通道的增益增加会导致所有通道的带宽降低、失真提高、系统噪声增加。 为了限制这些影响,即便是低性能加法器,也需要高性能、高带宽运算放大器。 该运放加法器的噪声增益为1+10k/(10||10k)。 噪声增益主要由增益最高的输入信号(10欧姆输入)决定,但所有输入的失调电压、增益误差、噪声和失真都会提高。 图1. 运放加法器 高性能、低成本仪表放大器提供了一种新颖的替代方案,可解决其中的许多问题。 仪表放大器的输出电压与In+和In–之间的压差成正比。 将一个电阻(Rgain)连接到Rg引脚便可放大该信号。 输出电压在基准引脚和输出引脚之间产生。 这样,基准引脚就可以用来级联加法器配置中的多个信号,如图2所示。 每个仪表放大器可以设置不同的增益。 《电子技术设计》网站版权所有,谢绝转载 与简单的运放加法器相比,该系统有以下几个优点: 1.每个输入都具有极高的输入阻抗。 2.每个信号都具有独立的共模抑制,由连接到该通道的仪表放大器决定。 通道增益越高,共模抑制能力也越强,误差越小。 3.利用仪表放大器的反相或同相端,可以轻松加减信号。 4.需要时,仪表放大器支持使用差分输入信号。 5.各信号的失真、噪声增益和带宽与其他信号无关。 这使得失调电压、增益误差、噪声和失真更低。 图2. 仪表放大器加法器 图3的“总谐波失真加噪声”曲线显示,虽然仪表放大器的带宽为1 MHz且功耗为1 mA,而运算放大器的带宽为8 MHz且功耗为4.5 mA,但仪表放大器加法器的失真性能却要比运放加法器高出5倍。 图3. 仪表放大器加法器和运放加法器的THD+N 《电子技术设计》网站版权所有,谢绝转载
相关资源
  • 所需E币: 1
    时间: 2020-12-18 16:23
    大小: 250KB
    上传者: zendy_731593397
    4032CMOS3位正逻辑串行加法器
  • 所需E币: 1
    时间: 2020-12-18 16:24
    大小: 250KB
    上传者: zendy_731593397
    4038CMOS3位串行负逻辑加法器
  • 所需E币: 1
    时间: 2020-5-29 23:06
    大小: 77.04KB
    上传者: 星空下的屋顶
    加法器(减法器)运算放大电路.docx
  • 所需E币: 4
    时间: 2019-12-25 20:41
    大小: 9.01KB
    上传者: 2iot
    有关于加法器的VHDL编程(是用赛灵思的FPGA实现的)……
  • 所需E币: 4
    时间: 2019-12-25 12:08
    大小: 373.76KB
    上传者: 16245458_qq.com
    算术逻辑部件设计算术逻辑部件设计蒋小龙2001.7.5声明作此资料为本人个人行为,此资料版权为本人所有。你可以任意使用,但你非经本人允许不得对此资料内容作任何修改。你因使用此资料所带来任何收益,本人均不染指;因使用此资料所引起的任何不良后果,本人不承担任何形式的责任。出版物引用,但请注明!蒋小龙2001.7.51目录声明……………………………………………………………………………………10、约定……………………………………………………………………………………31、一位加法器……………………………………………………………………………42、4位加法器……………………………………………………………………………43、4位超前进位链………………………………………………………………………54、16位超前进位链……………………………………………………………………………
  • 所需E币: 5
    时间: 2020-1-4 23:16
    大小: 8.11KB
    上传者: rdg1993
    有关于加法器的VHDL编程(是用赛灵思的FPGA实现的)……
  • 所需E币: 5
    时间: 2020-1-4 23:23
    大小: 311.17KB
    上传者: 978461154_qq
    加法器……
  • 所需E币: 5
    时间: 2020-1-4 23:26
    大小: 198.16KB
    上传者: 978461154_qq
    浮点加法器的VHDL算法设计……
  • 所需E币: 3
    时间: 2019-12-25 02:18
    大小: 37.89KB
    上传者: givh79_163.com
    学习小资料……
  • 所需E币: 5
    时间: 2019-12-28 21:49
    大小: 486.59KB
    上传者: quw431979_163.com
    单电源运放图集……