yintengfei的个人空间 https://blog.eetop.cn/1089522 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

串/并乘法器的改进:流水线处理

已有 1171 次阅读| 2014-4-5 14:36 |个人分类:小失身手

串/并行乘法器的速度比较慢,本节就是在上节的基础上对电路进行改进,提高速度。引入流水线的形式,将相邻的两个部分积乘积结构再以加法树的形式相加,形成了结构上的流水化处理。缩短关键路径
代码:16位的乘法器相乘
module Multiply(
clk,rst,
dataa,datab,
dout
);
input clk; 
input rst;
input [7:0] dataa;
input [7:0] datab;
output [15:0] dout; 

reg [15:0]stored0;
reg [15:0]stored1;
reg [15:0]stored2;
reg [15:0]stored3;
reg [15:0]stored4;
reg [15:0]stored5;
reg [15:0]stored6;
reg [15:0]stored7;

reg [16: 0] add01;
reg [16: 0] add23;
reg [16: 0] add45;
reg [16: 0] add67;

reg  [17:0] mul_out;

always @ (posedge clk or negedge rst)
begin
   if(!rst)
      begin  //初始化寄存器变量
 //        dout <= 16'd0;
         stored0 <= 16'd0;
         stored1 <= 16'd0;
         stored2 <= 16'd0;
         stored3 <= 16'd0;
stored4 <= 16'd0;
         stored5 <= 16'd0;
         stored6 <= 16'd0;
         stored7 <= 16'd0;
add01<= 17'd0;
add23<= 17'd0;
add45<= 17'd0;
add67<= 17'd0;      
mul_out<= 18'd0;  
      end
   else
      begin  //实现移位相加
     stored7 <= datab[7]?{1'b0,dataa,7'b0}: 8'b0;
         stored6 <= datab[6]?{2'b0,dataa,6'b0}: 8'b0;
         stored5 <= datab[5]?{3'b0,dataa,5'b0}: 8'b0;
         stored4 <= datab[4]?{4'b0,dataa,4'b0}: 8'b0;
         stored3 <= datab[3]?{5'b0,dataa,3'b0}: 8'b0;
         stored2 <= datab[2]?{6'b0,dataa,2'b0}: 8'b0;
         stored1 <= datab[1]?{7'b0,dataa,1'b0}: 8'b0;
         stored0 <= datab[0]?{8'b0,dataa }: 8'b0;
         add01 <= stored1 + stored0;
         add23 <= stored3 + stored2;
  add45 <= stored5 + stored4;
         add67 <= stored7 + stored6;
         mul_out <= (add01 + add23)+(add45+add67);
      end
end

assign dout = mul_out[15:0];
endmodule
testbench代码为:

`timescale 1 ns/ 1 ps
module mult_test;
reg clk;
reg rst;
reg [7:0]dataa;
reg [7:0]datab;
wire [15:0]dout;
Multiply  u1(
.clk(clk),
.rst(rst),
.dataa(dataa),
.datab(datab),
.dout(dout)
);
initial                                                
begin                                                                          
rst = 0;
clk=0; 
#10 rst = 1;
end
       
always #5 clk = ~clk;  
always@(posedge clk)
begin
  dataa = {$random}%15;
  datab = {$random}%13;
end
endmodule 


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 1

    获赞
  • 0

    评论
  • 455

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-3 21:56 , Processed in 0.022938 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部