基本运算逻辑和它们的Verilog HDL模型.ppt

上传人:李医生 文档编号:9325307 上传时间:2021-02-18 格式:PPT 页数:34 大小:368KB
返回 下载 相关 举报
基本运算逻辑和它们的Verilog HDL模型.ppt_第1页
第1页 / 共34页
基本运算逻辑和它们的Verilog HDL模型.ppt_第2页
第2页 / 共34页
基本运算逻辑和它们的Verilog HDL模型.ppt_第3页
第3页 / 共34页
基本运算逻辑和它们的Verilog HDL模型.ppt_第4页
第4页 / 共34页
基本运算逻辑和它们的Verilog HDL模型.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《基本运算逻辑和它们的Verilog HDL模型.ppt》由会员分享,可在线阅读,更多相关《基本运算逻辑和它们的Verilog HDL模型.ppt(34页珍藏版)》请在三一文库上搜索。

1、基本运算逻辑和它们的Verilog HDL模型,第5章 2011.3.25,加法器,表中Xi 、Yi 表示两个加数,Si 表示和,Ci-1 表示来自低位的进位、Ci 表示向高位的进位。,Ci = Xi Yi + Yi Ci-1 + Xi Ci-1 Si = Xi Ci + Yi Ci + Ci-1 Ci + Xi Yi Ci-1,全加器和Si的表达式也可以表示为: Si = PiCi-1 其中Pi = XiYi Ci = PiCi-1 + Gi 其中Gi = XiYi,图5.1 由4个1位全加器组成的超前进位4位加法器,图5.2 由4个4位全加器组成的超前进位16位加法器,在实现算法时(如卷积

2、运算和快速傅立叶变换),常常用到加法运算,由于多位并行加法器是由多层组合逻辑构成,加上超前进位形成逻辑虽然减少了延迟,但还是有多级门和布线的延迟,而且随着位数的增加延迟还会积累。 由于加法器的延迟,使加法器的使用频率受到限制,这是指计算的节拍(即时钟)必须要大于运算电路的延迟,只有在输出稳定后才能输入新的数进行下一次运算。 如果设计的是32位或64位的加法器,延迟就会更大。为了加快计算的节拍,可以在运算电路的组合逻辑层中加入多个寄存器组来暂存中间结果。 也就是采用数字逻辑设计中常用的流水线(pipe-line)办法,来提高运算速度,以便更有效地利用该运算电路。,module add_4( X,

3、 Y, sum, C); input 3 : 0 X, Y; output 3: 0 sum; output C; assign C, Sum = X + Y; endmodule,而16位加法器只需要扩大位数即可 module add_16( X, Y, sum, C); input 15 : 0 X, Y; output 15 : 0 sum; output C; assign C, Sum = X + Y; endmodule,设计者可以考虑提高电路的速度,也可以考虑节省电路元件以减少电路占用硅片的面积。 综合器会自动根据选项为你挑选一种基本加法器的结构。有的高性能综合器还可以根据用户对

4、运算速度的要求插入流水线结构,来提高运算器的性能。 可见在综合工具的资源库中存有许多种基本的电路结构,通过编译系统的分析,自动为设计者选择一种电路结构,随着综合器的日益成熟它的功能将越来越强。 然后设计者还需通过布局布线工具生成具有布线延迟的电路,再进行后仿真,便可知道该加法器的实际延时。 根据实际的延迟便可以确定使用该运算逻辑的最高频率。若需要重复使用该运算器,则需要在控制数据流动的状态机中为其安排必要的时序。,乘法电路,设两个n位二进制正数X和Y: X : X n-1X1 X0 Y : Y n-1 Y1Y0 则X和Y的乘积Z有2n位。,式中YiX称为部分积,记为Pi,有 显然,两个一位二进

5、制数相乘遵循如下规则: 00=0; 01=0; 10=0; 11=1 因此YiXj 可用一个与门实现,记Pi.j = Yi X j,两个4位二进制数X和Y相乘,被乘数: X3 X2 X1 X0 ) 乘 数: Y3 Y2 Y1 Y0 _ Y0X3 Y0X2 Y0X1 Y0X0 Y1X3 Y1X2 Y1X1 Y1X0 Y2X3 Y2X2 Y2X1 Y2X0 Y3X3 Y3X2 Y3X1 Y3X0 _ 乘积: Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0,乘法单元(MU),module mult_4( X, Y, Product); input 3 : 0 X, Y; output 7 : 0 P

6、roduct; assign Product = X * Y; endmodule,module mult_8( X, Y, Product); input 7 : 0 X, Y; output 15 : 0 Product; assign Product = X * Y; endmodule,流水线(pipeline),流水线的设计方法已经在高性能的、需要经常进行大规模运算的系统中得到广泛的应用,如CPU(中央处理器)等。 目前流行的CPU,如intel的奔腾处理器在指令的读取和执行周期中充分地运用了流水线技术以提高它们的性能。 高性能的DSP(数字信号处理)系统也在它的构件(buildin

7、g- block functions)中使用了流水线设计技术。,流水线设计的概念,流水线设计(Pipeline Design)是经常用于提高所设计系统运行速度的一种有效方法。为了保障数据快速传输,必须使系统运行在尽可能高的频率上,但如果某些复杂逻辑功能的完成需要较长的延时,就会使系统很难运行在较高的频率上。 流水线技术实际上就是把规模较大、层次较多的组合逻辑电路分为几个级,在每一级插入寄存器组暂存中间数据。 K级的流水线就是从组合逻辑的输入到输出恰好有K个寄存器组(分为K级,每一级都有1个寄存器组),上一级的输出是下一级的输入而又无反馈的电路。,把组合逻辑设计转换为流水线设计,这个组合逻辑包括

8、两级。第一级的延迟是T1和T3两个延迟中的最大值;第二级的延迟等于T2的延迟。 为了通过这个组合逻辑得到稳定的计算结果输出,需要等待的传播延迟为: max(T1,T3) + T2 个时间单位。,在从输入到输出的每一级插入寄存器后,流水线设计的第一级寄存器所具有的总延迟为T1与T3时延中的最大值加上寄存器的Tco(触发时间)。 第二级寄存器延迟为T2的时延加上Tco。,采用流水线设计为取得稳定的输出总体计算周期为: max(max(T1,T3)+Tco,(T2+Tco),流水线设计需要2个时钟周期来获取第一个计算结果,而只需要1个时钟周期来获取随后的计算结果。 开始时用来获取第一个计算结果的2个

9、时钟周期被称为采用流水线设计的首次延迟(latency)。 对于CPLD来说,器件的延迟(如T1、T2和T3)相对于触发器的Tco要长得多,并且寄存器的建立时间Tsu也要比器件的延迟快得多。 只有在上述关于硬件时延的假设为真的情况下,流水线设计才能获得比同功能的组合逻辑设计更高的性能。 采用流水线设计的优势在于它能提高吞吐量(throughput)。 假设T1、T2和T3具有同样的传递延迟Tpd。 对于组合逻辑设计而言,总的延迟为2*Tpd。 对于流水线设计来说,计算周期为(Tpd+Tco)。,前面提及的首次延迟(latency)的概念实际上就是将(从输入到输出)最长的路径进行初始化所需要的时

10、间总量;吞吐延迟则是执行一次重复性操作所需要的时间总量。 在组合逻辑设计中,首次延迟和吞吐延迟同为2*Tpd。 在流水线设计中,首次延迟是2*(Tpd+Tco), 而吞吐延迟是Tpd+Tco。,如果CPLD硬件能提供快速的Tco,则流水线设计相对于同样功能的组合逻辑设计能提供更大的吞吐量。 典型的富含寄存器资源的CPLD器件(如Lattice的ispLSI 8840)的Tpd为8.5ns,Tco为6ns。,流水线设计在性能上的提高是以消耗较多的寄存器资源为代价的。 对于非常简单的用于数据传输的组合逻辑设计,例如上述例子,将它们转换成流水线设计可能只需增加很少的寄存器单元。 随着组合逻辑变得复杂

11、,为了保证中间的计算结果都在同一时钟周期内得到,必须在各级之间加入更多的寄存器。 如果需要在CPLD中实现复杂的流水线设计,以获取更优良的性能,具有丰富寄存器资源的CPLD结构并且具有可预测的延迟这两大特点的FPGA是一个很有吸引力的选择。,流水线加法器与组合逻辑加法器的比较,实现加法功能需要三级电路: (1)加法器输入的数据产生器和传送器; (2)数据产生器和传送器的超前进位部分; (3)数据产生、传送功能和超前进位三者求和部分。,在n位组合逻辑全加器中插入三层寄存器或寄存器组,将它转变为n位流水线全加器,若用拥有840个宏单元和312个有寄存能力I/O单元的Lattice ispLSI88

12、40分别来实现16位组合逻辑全加器和16位流水线全加器并比较它们的运行速度, 对于16位组合逻辑全加器, 共用了34个宏单元。 执行一次计算需经过3个GLB层,每次计算总延迟为45.6ns。 而16位流水线全加器共用了81个宏单元。执行一次计算只需经过1个GLB层,每次计算总延迟为15.10ns(但第一次计算需要多用三个时钟周期),吞吐量约增加了三倍。,Li10.1 非流水线方式实现8位全加器,module adder8(cout,sum,ina,inb,cin,clk); output7:0 sum; output cout; input7:0 ina,inb; input cin,clk;

13、 reg7:0 tempa,tempb,sum; reg cout; reg tempc; always (posedge clk) begin tempa=ina; tempb=inb; tempc=cin; end always (posedge clk) begin cout,sum=tempa+tempb+tempc; end endmodule,4级流水线方式实现8位全加器,module pipeline(cout,sum,ina,inb,cin,clk); output7:0 sum; output cout; input7:0 ina,inb; input cin,clk; re

14、g7:0 tempa,tempb,sum; reg tempci,firstco,secondco,thirdco,cout; reg1:0 firsts,thirda,thirdb; reg3:0 seconda,secondb,seconds; reg5:0 firsta,firstb,thirds; always (posedge clk) begin tempa=ina; tempb=inb; tempci=cin; end /输入数据缓存 always (posedge clk) begin firstco,firsts=tempa1:0+tempb1:0+tempci; /第一级加

15、(低2位) firsta=tempa7:2; firstb=tempb7:2; end /未参加计算的数据缓存 always (posedge clk) begin secondco,seconds=firsta1:0+firstb1:0+firstco,firsts; /第2级加(第2、3位相加) seconda=firsta5:2; secondb=firstb5:2; end /数据缓存 always (posedge clk) begin thirdco,thirds=seconda1:0+secondb1:0+secondco,seconds; /第3级加(第4、5位相加) thir

16、da=seconda3:2; thirdb=secondb3:2; end /数据缓存 always (posedge clk) cout,sum=thirda1:0+thirdb1:0+thirdco,thirds; /第4级加(高两位相加) endmodule,比较器,module compare_n ( X, Y, XGY, XSY, XEY); input width-1:0 X, Y; output XGY, XSY, XEY; reg XGY, XSY, XEY; parameter width = 8; always ( X or Y ) / 每当X 或Y 变化时 begin i

17、f ( X = = Y ) XEY = 1; / 设置X 等于Y的信号为1 else XEY = 0; if (X Y) XGY = 1; / 设置X 大于Y的信号为1 else XGY = 0; if (X Y) XSY = 1; / 设置X 小于Y的信号为1 else XSY = 0; end endmodule,多路器,多路选择器(Multiplexer)简称多路器,它是一个多输入、单输出的组合逻辑电路,在数字系统中有着广泛的应用。它可以根据地址码的不同,从多个输入数据中选取一个,让其输出到公共的输出端。在算法电路的实现中多路器常用来根据地址码来调度数据。 我们可以很容易地写出一个有2位

18、地址码,可以从4组输入信号线中选出1组通过公共输出端输出的功能表。,module Mux_8( addr,in1, in2, in3, in4, in5, in6, in7, in8, Mout, nCS); input 2:0 addr; input width-1 in1, in2, in3, in4, in5, in6, in7, in8; output width-1 Mout; parameter width = 8; always (addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8) begin if (!nc

19、s),case(addr) 3b000: Mout = in1; 3b001: Mout = in2; 3b010: Mout = in3; 3b011: Mout = in4; 3b100: Mout = in5; 3b101: Mout = in6; 3b110: Mout = in7; 3b111: Mout = in8; endcase else Mout = 0; end endmodule,总线和总线操作,总线是运算部件之间数据流通的公共通道。在硬线逻辑构成的运算电路中,只要电路的规模允许,我们可以比较自由地来确定总线的位宽,因此可以大大提高数据流通的速度。 适当的总线的位宽,配合

20、适当并行度的运算逻辑和步骤能显著地提高专用信号处理逻辑电路的运算能力。 各运算部件和数据寄存器组可以通过带控制端的三态门与总线的连接。 通过对控制端电平的控制来确定在某一时间片段内,总线归哪个或哪几个部件使用(任何时间片段只能有一个部件发送,但可以有几个接收)。,module SampleOfBus( DataBus, link_bus,write ); inout 11:0 DataBus; / 总线双向端口 input link_bus; / 向总线输出数据的控制电平 input write; reg 11:0 outsigs; assign DataBus = (link_bus) ? outsigs : 12 h zzz ; /当link_bus为高电平时通过总线把存在outsigs的计算结果输出 always (posedge write) /每当write信号上跳沿时 begin /接收总线上数据并乘以5 outsigs = DataBus * 5; /把计算结果存入outsigs end endmodule,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1