【问题标题】:Multiplier 4-bit with verilog using just full adders仅使用全加器的带有 Verilog 的 4 位乘法器
【发布时间】:2016-01-19 01:01:10
【问题描述】:

我正在尝试编写测试台部分,但我不知道该怎么做。基本上,我想测试 0x10 或 5x5。如果我所拥有的是正确的,我不会。

这是一张图片,让您了解我正在尝试构建的内容。不是这个。

这是完整的加法器:

module FA(input a,input b,input cin,output s,output cout);
wire z1,z2,z3;
xor(z1,a,b);
xor(s,z1,cin);
and(z2,z1,cin);
and(z3,a,b);
or(cout,z2,z3);
endmodule

这是乘数:

module multiplier(m0,m1,m2,m3,p);
input[7:0] m0,m1,m2,m3;
output[7:0]p;
wire[11:1]w; // wire
wire[6:1]o; // outputs for the FA
// first part of the diagram
FA stage1(p[1],w[1],m0[1],m1[1]);
FA stage2(o[1],w[2],m0[2],m1[2],m2[2]);
FA stage3(o[2],w[3],m1[3],m2[3],m3[3]);
FA stage4(o[3],w[4],m0[4],m1[4],m2[4]);
// second part of the diagram
FA stage5(p[2],o[1],w[1],w[5]);
FA stage6(o[4],o[2],w[2],w[6],m0[3]);
FA stage7(o[5],o[3],w[3],w[6],w[7]);
FA stage8(o[6],m0[5],m1[5],w[4],w[8]);
// third part of the diagram
FA stage9(p[3],o[4],w[5],w[9]);
FA stage10(p[4],o[5],w[9],w[10]);
FA stage11(p[5],o[6],w[7],w[10],w[11]);
FA stage12(p[6],p[7],w[8],w[11],m0[6]);
endmodule

这是我的测试台:

   module sim();       
   reg [7:0]m0,m1,m2,m3;       
   wire [7:0]p;       
   multiplier uut(.m0(m0),.m1(m1),.m2(m2),.m3(m3),.p(p));

   initial begin m0=0;m1=0;m2=0;m3=0;
   #1 m0=1;m1=1;m2=0;m3=0;
   #1 m0=0;m1=1;m2=0;m3=1;
   #1 m0=1;m1=1;m2=1;m3=1;
   end 
   endmodule

【问题讨论】:

    标签: verilog xilinx hdl test-bench


    【解决方案1】:

    您的测试台是开始的好方法。您可能需要添加$monitor 进行打印 这些信号的值已更改,或者您可能希望查看波形以查看您的模拟。

    module sim();       
    reg [7:0]m0,m1,m2,m3;       
    wire [7:0]p;       
    multiplier uut(.m0(m0),.m1(m1),.m2(m2),.m3(m3),.p(p));
    
    initial begin 
      m0=0;m1=0;m2=0;m3=0;
    #1 m0=1;m1=1;m2=0;m3=0;
    #1 m0=0;m1=1;m2=0;m3=1;
    #1 m0=1;m1=1;m2=1;m3=1;
    end 
    
    initial begin
      $monitor("m0: %0d m1: %0d m2: %0d m3: %0d p: %0d", m0, m1, m2, m3, p);
    end
    
    // you need to check your simulator documentation on how to dump the wave form
    initial begin
      $dumpfile("dump.vcd"); $dumpvars;
    end
    endmodule
    

    您可能需要将连接添加到以下端口数与您的 FA 模块的端口数不匹配的实例:

    FA stage1(p[1],w[1],m0[1],m1[1]);
    FA stage5(p[2],o[1],w[1],w[5]);
    FA stage9(p[3],o[4],w[5],w[9]);
    FA stage10(p[4],o[5],w[9],w[10]);
    

    检查乘法器功能的另一种方法是创建一个参考模型,然后将其与输出进行比较,这样您就可以在等待结果(通过/失败)时发送任意数量的输入。

    【讨论】:

    • 对于我想添加的其他连接,它应该是零。如何添加零值端口?
    • 当我运行模拟时,我得到的 p 的结果总是 z。
    • 只要在上面写一个零。比如:FA stage1(p[1],w[1],m0[1],m1[1],1'b0);
    • 我试过了。这是我得到的错误“实际位长 32 与端口 cout 的正式位长 1 不同”
    • 编辑了我的评论。应该添加1'b0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2022-12-08
    • 1970-01-01
    相关资源
    最近更新 更多