IC课程设计自动化卢宏伟【DOC精选】.doc

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IC课程设计自动化卢宏伟【DOC精选】

《IC课程设计》报告 ——数字部分 Booth乘法器的设计 控制科学与工程系 自动化0505 卢宏伟01205010516 同组成员:康熊鑫 夏纯祥 一、实验内容 1、熟悉软件的Verilog HDL语言设计流程; 2、Booth四位乘法器的设计原理。 二、实验目的 1、掌握语言输入法; 2、熟悉软件的Verilog HDL语言设计流程; 3、掌握booth乘法器原理,能进行多位乘法器的设计。 图形设计方法 二、实验目的 三、实验要求 1、用Verilog HDL语言设计的4位乘法器; 2、完成四位乘法器的时序仿真; 四、实验原理与内容 booth乘法器电路设计: 乘数Y每位分别与乘数X相乘,该部分采用booth编码算法,结构图见图。 Booth算法采用相加和相减的操作计算补码数据的乘积。Booth算法对乘数从低位开始判断,根据两个数据位的情况决定进行加法、减法还是仅仅移位操作。判断的两个数据位为当前位及其右边的位(初始时需要增加一个辅助位0),移位操作是向右移动。比如说被乘数0110,第一次判断被乘数0110中的最低位0以及右边的位(辅助位0),得00;所以只进行移位操作;第二次判断0110中的低两位,得10,所以作减法操作并移位,这个减法操作相当于减去2a的值;第三次判断被乘数的中间两位,得11,于是只作移位操作;第四次判断0110中的最高两位,得01,于是作加法操作和移位,这个加法相当于加上8a的值,因为a的值已经左移了三次。   一般而言,设y=y0,yly2…yn为被乘数,x为乘数,yi是a中的第i位(当前位)。根据yj与yi+1的值,Booth算法表示如下表所示,其操作流程如下图所示。在Booth算法中,操作的方式取决于表达式(yi+1-yi)的值,这个表达式的值所代表的操作为:    0??? 无操作    +1??? 加x    -1??? 减x Booth算法操作表示 ??? yi yi+1 操作 说明 0 0 无 处于0串中,不需要操作 0 1 加x 1串的结尾 1 0 减x 1串的开始 1 1 无 处于1串中,不需要操作 原理流程图: 一 测试文件源代码: module test_adder; reg clk; reg rst; reg [3:0] X,Y; wire [7:0]out; integer i; initial begin clk=1; rst=0;//清零信号 #5 rst=1; X=4b0; Y=4b0; for (i=0;i50;i=i+1) begin X=$random%65535; Y=$random%65535; //随机给X,Y赋值 #60; end end always #10 clk=~clk;//产生脉冲clk four_adder m0(.X(X),.Y(Y),.clk(clk),.rst(rst),.out(out)); endmodule Booth乘法器源代码: module four_adder(X,Y,clk,rst,out); input [3:0] X,Y;//定义四位二进制乘数X与被乘数Y input clk,rst; output [7:0] out;//定义乘积out reg [3:0]X_reg,Y_reg ; reg [3:0]R0; reg [3:0]R1; reg [7:0]out0; reg aid; integer i; //将乘数X寄存与寄存器 X_reg always@(posedge clk or negedge rst) begin if(!rst) X_reg=4b0;//清零 else X_reg=X; end //将被乘数Y寄存与寄存器 Y_reg always@(posedge clk or negedge rst) begin if(!rst) Y_reg=4b0; else Y_reg=Y; end //. 乘法模块 always @(Y_reg[3:0] or X_reg or aid or R1 or R0 or i) begin for(i = 0 ; i = 4 ; i = i + 1) begin if(i == 0) begin aid = 0

文档评论(0)

taotao0b + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档