微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 自己写的流水线乘法器问题

自己写的流水线乘法器问题

时间:10-02 整理:3721RD 点击:
module chengfaqi(
input [3:0]  ain,
input [3:0]  bin,
input  clk, rst_n,
output [7:0] cout
    );
reg   [3:0]  ain_reg;
reg   [3:0]  bin_reg;
reg   [3:0]  cout0;
reg   [4:0]  cout1;
reg   [5:0]  cout2;
reg   [6:0]  cout3;
reg   [7:0]  cout_reg;
always@(posedge clk or negedge rst_n)
if(!rst_n)  
     begin   ain_reg <= #1 4'b0;
                  bin_reg <= #1 4'b0;
          end
else begin   ain_reg <= #1 ain;
             bin_reg <= #1 bin;
                               
     end
always@(posedge clk or negedge rst_n)
if(!rst_n)  
     begin
        cout0 <= #1 4'b0;
        cout1 <= #1 5'b0;
        cout2 <= #1 6'b0;
        cout3 <= #1 7'b0;
                  cout_reg <= #1 7'b0;
     end
else
     begin
        cout0 <= #1 (bin[0] == 1)?ain:4'b0;
        cout1 <= #1 (bin[1] == 1)?{ain,1'b0}:5'b0;
        cout2 <= #1 (bin[2] == 1)?{ain,2'b00}:6'b0;
        cout3 <= #1 (bin[3] == 1)?{ain,3'b000}:7'b0;
      cout_reg <= #1 cout1 + cout2 + cout3 + cout0;
     end
assign cout = cout_reg;
endmodule
       
仿真的波形如图:
问题来了,输出的结果怎么只延时一个时钟周期呢?我插入了三个寄存器啊,至少是个周期啊,结果是对的,但是不了解为什么?



回复 1# 谁枫而飘

哪来的三级寄存器?两级好不好!这里“cout0 <= #1 (bin[0] == 1)?ain:4'b0;”的ain、bin,你是不是想用 ain_reg 、bin_reg的?


对的,昨天晚上睡觉的时候,想到了可能是这个问题,我再去试试


bingo是这个问题,本来是想用ain_reg和bin_reg的,写错了,我擦,检查的时候没有检查出来

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top