vivado 乘加器与累加器的ip仿真

在使用乘法器和乘加器中遇到了一些问题,解决后仍有疑问,以此记录

乘法器

乘法器是指只有数据中只有乘法运算,运算时p=a*b

进行如下图所示设置

vivado 乘加器与累加器的ip仿真_第1张图片

借用一张描

vivado 乘加器与累加器的ip仿真_第2张图片

仿真代码

always #5 clk=~clk;
	initial
    begin
        clk = 1;
        a = 0;
        b = 0;
        ce = 0;
        sclr = 1;
        #100;
        sclr = 0;
        ce = 1;
        a = 10;
        b = 10;
        #100;
        ce = 0;   
    end
    
  
mult_gen_0  uut  (
  .CLK(clk),    // input wire CLK
  .A(a),        // input wire [15 : 0] A
  .B(b),        // input wire [15 : 0] B
  .CE(ce),      // input wire CE
  .SCLR(sclr),  // input wire SCLR
  .P(s)        // output wire [31 : 0] P
);
endmodule

成功得到仿真结果100

vivado 乘加器与累加器的ip仿真_第3张图片

乘加器

乘加器的运算时p=a*b+c,在此不进行+c的运算,只运行a*b的运算,并不进行级联运算

vivado 乘加器与累加器的ip仿真_第4张图片

以下为端口定义
A[N:0]    Input    A输入(乘法操作数1)
B[M:0]    Input    B输入(乘法操作数2)
C[L:0]    Input    C输入(加减操作数)
PCIN    Input    级联输入
SUBTRACT    Input    控制加/减操作(1=减法,0=加法)
CE    Input    时钟使能 (高有效)
CLK    Input    时钟信号,上升沿有效
SCLR    Input    同步复位,高有效
PCOUT    Output    输出级联
P[Q:0]    Output    输出端口

原文链接:https://blog.csdn.net/weixin_41445387/article/details/119777736

仿真代码

module tb_mult_gen_0;

	// Inputs
	reg clk;
	reg ce;
	reg sclr;
	reg [31:0] a;
	reg [31:0] b;

	// Outputs
	wire [63:0] s;

	// Instantiate the Unit Under Test (UUT)



always #5 clk=~clk;
	initial
    begin
        clk = 1;
        a = 0;
        b = 0;
        ce = 0;
        sclr = 1;
        #100;
        sclr = 0;
        ce = 1;
        a = 10;
        b = 10;
        #100;
        ce = 0;   
    end

multiply_add uut (
  .CLK(clk),            // input wire CLK
  .CE(ce),              // input wire CE
  .SCLR(sclr),          // input wire SCLR
  .A(a),                // input wire [15 : 0] A
  .B(b),                // input wire [15 : 0] B
  .C(0),                // input wire [47 : 0] C
  .SUBTRACT(0),  // input wire SUBTRACT
  .P(s)               // output wire [40 : 0] P

);
endmodule

得到正确仿真结果100

vivado 乘加器与累加器的ip仿真_第5张图片

 但当

SUBTRACT(0)改为  SUBTRACT(1)时

vivado 乘加器与累加器的ip仿真_第6张图片

 输出结果为-100

将例化中c改为1

vivado 乘加器与累加器的ip仿真_第7张图片

 得到结果为-99

vivado 乘加器与累加器的ip仿真_第8张图片

 

总结

所以乘加器在此次仿真时SUBTRACT 端口为0,乘出的结果为负,为1乘出的结果为正,再去加上c

你可能感兴趣的:(fpga开发)