没有乘法运算符的verilog中的4位乘法器

时间:2013-10-17 14:56:37

标签: verilog

我正在尝试编写一个Verilog模块,它将两个4位输入相乘,而不使用*运算符,但是我遇到了一些错误:

module multiplier(
            output[7:0] prod,
            input[3:0] a,
            input[3:0] b);

            reg [7:0] result=8'h00;

            always @(*)
            begin
                for(i=0;i<4;i=i+1)
                begin
                    if((b&(1<<<i))!=0)
                    begin
                        result = result+(a<<<i);
                    end

                end
            end
            assign prod = result;
endmodule

错误:

[Synth 8-2715]语法错误= =

[Synth 8-2715]语法错误= =

[Synth 8-993]结果是未知类型

[Common 17-69]命令失败:Vivado合成失败


我做错了什么?


编辑: 我修改了代码,现在我得到: [Synth 8-1031]我没有宣布

2 个答案:

答案 0 :(得分:1)

reg [7:0] result=16'h00;

应该是

reg [7:0] result=8'h00;

答案 1 :(得分:0)

module multiplier(
        output[7:0] prod,
        input[3:0] a,
        input[3:0] b);

        reg [7:0] result;
            reg[2:0] i;

        always @(*)
        begin
            result=0;
            for(i=0;i<4;i=i+1)
                    begin
                if(b[i]==1'b1)
                        begin
                    result = result+(a<<i);
                        end

                    end
        end
        assign prod = result;
endmodule

对于你的代码,如果我有a = 15且b = 15,结果将是72.你必须在结果中为结果分配一个值结果= 0;