0

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

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] 结果是未知类型

[常见 17-69] 命令失败:Vivado 综合失败


我究竟做错了什么?


编辑:我修改了代码,现在我得到:[Synth 8-1031] i is not declared

4

2 回答 2

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

应该

reg [7:0] result=8'h00;
于 2013-10-17T15:02:27.657 回答
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。您必须在 always block result=0; 中为结果分配一个值;

于 2014-10-21T08:31:55.723 回答