我正在尝试编写一个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]我没有宣布
答案 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;