乘法器的硬件实现

时间:2014-04-07 20:15:38

标签: verilog system-verilog hardware-programming

我正在尝试编写一个verilog代码用于harware实现乘法器...但我得到了一定的错误 我的代码是

这里我采用4位输入和4位输出....然后多次使用被乘数多次乘法...并将结果存储在p ...类似于乘数的第二位乘用并存储在q .. 。进一步我拿了一个5位寄存器和sote值....等等等待休息代码

    module multiplier(a,b,c
        );

    input [3:0]a;
    input [3:0]b;
    output [7:0]c;

    wire [3:0]p;
    wire [3:0]q;
    wire [3:0]r;
    wire [3:0]s;
    wire [4:0]t;
     wire [5:0]u;
     wire [6:0]v;
     assign [3:0]p = {4{b[0]}} & [3:0]a ;   ////////ERROR///////
    assign [3:0]q = {4{b[1]}} & [3:0]a ;


    assign [3:0]r = {4{b[2]}} & [3:0]a ;
    assign [3:0]s = {4{b[3]}} & [3:0]a ;

    assign [4:1]t = [3:0]q;
    assign [5:2]u = [3:0]r;
    assign [6:3]v = [3:0]s;
    endmodule

    ERROR:HDLCompilers:26 - "multiplier.v" line 34 unexpected token: '['
    ERROR:HDLCompilers:26 - "multiplier.v" line 34 unexpected token: '['
    ERROR:HDLCompilers:26 - "multiplier.v" line 34 expecting ';', found ':'
    ERROR:HDLCompilers:26 - "multiplier.v" line 34 expecting 'endmodule', found '0'

1 个答案:

答案 0 :(得分:2)

信号名称左侧的括号([])仅用于定义打包数组。之后,括号用于信号的右侧。

示例,您的:

assign [3:0]p = {4{b[0]}} & [3:0]a ;

应该是:

assign p[3:0] = {4{b[0]}} & a[3:0] ;

或使用全范围:

assign p = {4{b[0]}} & a ;