- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
常用数字处理算法的Verilog实现
常用数字处理算法的Verilog实现1.加法器的Verilog实现串行加法器组合逻辑的加法器可以利用真值表,通过与门和非门简单地实现。假设 和 表示两个加数, 表示和, 表示来自低位的进位, 表示向高位的进位。每个全加器都执行如下的逻辑表达式:?这样可以得到加法器的一种串行结构。因此,式(2.1)所示的加法器也被称为串行加法器。如图2-20给出了一个4位串行加法器的结构示意图。?图2-20 串行加法器的结构示意图在无线通信的信号处理中,常常要用到多位数字量的加法运算。如果用串行加法器实现,速度较慢,而并行加法器就能满足要求,并且结构并不复杂。现在普遍使用的并性加法器是超前进位加法器,只是在几个全加器的基础上增加了一个超前进位形成逻辑,以减少由于逐步进位信号的传递所造成的时延。图2-21给出了一个4位并行加法器的结构示意图。图2-21 串行加法器的示意图在4位并行加法器的基础上,可以递推出16位、32位和64位的快速并行加法器。流水线加法器在使用了并行加法器后,仍旧只有在输出稳定后才能输入新的数进行下一次计算,即计算的节拍必须大于运算电路的延迟;此外,许多门级电路和布线的延迟会随着位数的增加而累加,因此加法器的频率还是受到了限制。但如果采用流水线,就有可能将一个算术操作分解为一些小规模的基本操作,将进位和中间值存储在寄存器中,并在下一个时钟周期内继续运算,这样就可以提高电路的利用效率。将流水线规则应用于FPGA中,只需要很少或根本不需要额外的成本。这是因为每个逻辑单元都包含两个触发器,大多数情况下这两个触发器或者没有用到,或者用于存储布线资源,那么就可以利用其来实现流水线结构。如果采用了流水线后,加法器的速度仍然不能满足需要的话,可以采用第3章中将会提到的串并转换来进一步提高计算的并行度。???由于一个slice中有两个触发器,还需要有1个触发器来作为进位输出,那么采用 级流水线,就可以构造一个最大位数为 位的加法器。?下面给出一个16位流水线加法器的代码。例2-24 16位2级流水线加法器的Verilog设计?module adder16_2(cout ,sum ,clk ,cina ,cinb ,cin) ;????????? input [15 :0 ]cina ,cinb ;????????? input clk ,cin ;????????? output [15 :0 ] sum;????????? output cout ;????????? reg cout ;????????? reg cout1 ;????????? reg[7 :0 ] sum1 ;????????? reg[15 :0 ] sum;????????? always @(posedge clk) begin // 低8 位相加;?{cout1 , sum1} = {cina [7], cina [ 7 : 0 ]} + {cinb[7], cinb [ 7 : 0 ]} +cin ;????????? end?? always @(posedge clk) begin // 高8 位相加,并连成16位?{cout ,sum} = {{cina [15], cina [15 :8 ] }+ {cinb [15], cinb[15 :8]} + cout1 , sum1} ;????????? end?endmodule?上述程序经过synplify Pro综合后,得到如图2-22所示的RTL级结构图。2-22 16位加法器的RTL结构图在ModelSim 6.2b中完成仿真,其结果如图2-23所示,正确地实现了16比特加法。图2-23 16位加法器的RTL结构图2.乘法器的Verilog实现串行乘法器两个N位二进制数x 、y 的乘积,最简单的方法就是利用移位操作来实现,用公式可以表示为:?????????????????????????????????????????????????????????????????????????????????????????????????????? (2.3)这样输入量随着k的位置连续地变化,然后累加?。?例2-25 用Verilog实现一个8位串行乘法器?module ade (clk, x, y, p);?input clk;?input [7:0] x, y;?output [15:0] p;?reg [15:0] p;??parameter s0=0, s1=1, s2=2;?reg [2:0] count;?reg [1:0] state;?reg [15:0] p1, t; // 比特位加倍?reg [7:0] y_reg;?always @(posedge clk) begin??? ca
文档评论(0)